Libro Proyectos Pic Basic

March 27, 2018 | Author: Christian Arias | Category: Bit, Analog To Digital Converter, Light Emitting Diode, Liquid Crystal Display, Clock


Comments



Description

 PROYECTO PARA LA DETECCIÓN DE OBJETOS SE ILUMINARÁ EL LED ROJO/AMARILLO/VERDE UTILIZANDO UN 12F629, QUE HARÁ PARPADEAR LENTAMENTE LOS INDICADORES LED Mediante el comando PWM (modulación por ancho de pulso), se realiza el programa para detección de objetos con tres indicadores LED (rojo, amarillo, verde) que se activaran brillando poco a poco, cuando el objeto detectado este lejos y con mayor intensidad cuando el objeto este adelante del sensor LDR1. Al sentir la oscuridad (la noche), se pone en movimiento un conjunto de rutinas. Circuito de programación El 12F629 (IC 8-pin) está lleno de características, cada pin se selecciona y se establece a través del estado. El IC no requiere reloj externo, sino interno, el pin ha sido utilizado como otro pin de control. El circuito funciona bien con energía de batería (oficialmente 2.0-5.5V)   5 Next level   .1. level. level.4 word 'level=variable ' LED off GPIO. 5 NEXT level For level=0 to 255 PWM LG. GPIO.0. 5 Next level For level=255 to 0 step -1 PWM LY. GPIO.1=0 GPIO. 5 '255 -> 0 NEXT level For level=0 to 255 PWM LY.4-verde) 'Van cambiando su brillo uno después de otro (no al mismo tiempo) 'cuando la entrada del LCD1 (GPIO.0-rojo. 'LED off GPIO.4 'LED verde en GPIO.7=0 ' habilitar Pull-Up's LR LY LG level var var var var GPIO.2) es" 0 "(a oscuras).4.0=0 GPIO. amarillo GPIO. level.1 GPIO.1 'LED amarillo en GPIO. WPU=%00000100 ' Pull-Up on GPIO.4=0 CdSin: If GPIO. level.0 'LED rojo en GPIO. 'LED off GPIO.2=0 then inicio Goto CdSin inicio: For level=0 to 255 PWM LR.  Programa (B): 'Ejercicio 1 uso del PWM 'Tres LEDs (GPIO.0 GPIO.2 OPTION_REG. 5 Next level 'Fade-up rutina '0 -> 255 '5 ciclos para cada nivel For level=255 to 0 step -1 'Fade-down rutina PWM LR.1. level. TRISIO=%000100 'GPIO.2 única entrada CMCON=7 'Deshabilitar los comparadores.   . PWRTE .INTOSC (GP4: I / O). uno puede ser la alimentación del PIC y el otro puede ser una tensión de referencia externa suministrada al pin destinado para este propósito y que ocupa una de las entradas análogas. El resultado de la conversión se obtiene en dos registros de 8 bit cada uno. ! ! UTILIZACIÓN DE LA FUNCIÓN DE ADC 12F675 (TRES LEDS DE VISUALIZACIÓN PARA NIVEL DE ENTRADA DE LA LUMINOSIDAD) El PIC 12f675 es económico como el PIC12F629.Desactivar.Habilitar. level. WDTE . Tiene cuatro entradas análogas pero solo una de ellas puede leer a un tiempo. sin embargo posee convertidor analógico-digital de 10 Bit. Para poder realizar la conversión al ADC necesita una fuente de tensión de referencia que pueda seleccionarse desde dos orígenes distintos. CDP . y por último se necesita una fuente de pulsos de reloj.Activar 'MCLR . este modulo convierte una señal análoga a digital de 10 bit.Habilitar! CD .Desactivar. Modulo análogo digital (ADC): El PIC 12f675 posee un modulo ADC que se utiliza para saber la tensión en su entrada.Internas (por lo que MCLR no requiere resistencia a conexión Vdd) 'BODEN . la entrada activa se selecciona mediante un multiplexor interno dedicado a este propósito que la conecta al circuito sample and hold. 5 NEXT level Goto CdSin 'Nota 'la Configuración de programación se establece de la siguiente manera: '1) FOSC .  For level=255 to 0 step -1 PWM LG. El tad es un pulso de reloj de un ancho ( tiempo) determinado que lo da la velocidad de conversion del modulo ADC. o en su defecto por no exixstir .6 us. por lo tanto en ala tabla.  Al configurar el modulo ADC se tiene que tener presente la correcta sincronizacion del relor principal con la velocidad real del convertidor. Para poder seleccionar la escala del divisor el datasheets el PIC especifica que se necesitan 11 Tad para realizar cada conversion. En este caso el manual indica que como minimo se requiere de 1. Si se observa la tabla es posible que se de la paradoja de que una frecuancia de reloj mas elevada el ACED trabaje mas lemto ya que solo se pueden seleccionar multiplos de la frecuecia proncipal. El PIC 12f675 dispone de un divisor de frecuencia dispueto entre el reloj principal y la entrada de reloj del ADC. Al tiempo de conversion de la lectrura hay que añadirle el tiempo de os registros de salida. se buscara la configuracion del divisor que de cómo resultado 1. Cuando muestra el resultado en un solo registro de 8 BIT se tarda 4 ciclos de reloj en leerlo o lo que es lo mismo 1 ciclo de ejecucion de instrucción y 8 ciclos   .6 us . la inmediata superior. para la frecuencia de reloj seleccionada. 6 us para este ADC). La impdencia de la señal aplicada a la entrada no debe superar los 10 K. como no existe un multiplo que de 1. pero despues de esto hay que esperar 2Tad antes de mandar una nueva y los registros de salida mantienen el valor de la conversion anterior. En el caso de no obtener el valor exacto como en este caso. tambien puede trabajr en el modulo Sleep del micro mediante el relo interno RC. son el valor mayor y menor de la lectura respectivamente y ambos se usan con el formato de salida de 10 BITS.6 us exactos se elige el inmediatamente superior que es 2us (001 = 8Tosc). los registros de lectura son ADRESH y ADREL . ANSEL ( ANS3: ANS0): Se seleccionan los pines que trabajaran como analogos y con el registro TRISIO bits se asignan como entradas. el manual indica que se seleccione el inmediatamente superior o coloquemos un cristal con una frecuencia especial. ADCS2: ADCS0 : Bits de tiempo de adquisicion: Con los bits ADCS2: ADCS0se seleciona el tiempo de adquisicion del modulo ADC que se de 11 Tad (1tad= 1.   . Configuracion modulo ADC Los registros de configuacion son ADCON0 y ANSEL ANSEL ( ADCS2: ADCS0): Se asigna el tipo de reloj y su conversion al modulo ADC. Setendra que hacer una espera minima de 10 useg. Conocido esto solo queda configurar los bits del divisor según la tabla trabajando con un cristal de 4 Mhz.  de reloj ( 2 ciclos de instrucción) cuando el formato de salida es de 10 BITS. Si se eligio el formato ede salida de 8 BITS el valor de la conversion se leee en el registro ADRESH. de sta forma se garantizan que se esta trabajando dentro de os parametros expuestos en el datasheets del PIC. El modulo tiene un flag de aviso de terminacion de lectura y permite interrupciones . El tiempo de espera es necesario para que el modulo complete su nueva configuracion y se estabilice. Esta permitido abortar la conversion que este en proceso. Registros de salida del adc La conversion interna del ADC siempre se de 10 BIT pero se puede programar para que la muestre en dos formatos: 10 y 8 BITS. si se realiza un cambio de configuracion en tiempo de ejecucion para estar seguro que la lectura no estara falseada. porque el resultaso de la lectura se divide en dos registros de 8 BITS. Conclusion: Trabajando a 4Mhz elegimos la opcion 001 = FOSC/8 . porque (4Mhz/8) = 2 useg. Tx pueto serie.5 = 0 ‘GP5 pin. ADCON regitro de control modulo ADC Selección en modo Bits:   . seleccióna el divisor ADCS2 = 0 ADCS1 = 0 ADCS0 = 1 ANSEL ANS3 = 1 : GP4/AN3. ANS2 = 1 : GP2/AN2. TRISIO.5 Mhz = 2 uSeg. trabaja como analogo. I/O trabaja como digital. El resto de pines como entradas. haya que tener en cuenta que el PIC siempre genera una conversion de 10 bits. TRISIO = %11011011 ‘Se definen los pines como entrada = 1 salida = 0 % en lengueje BASIC significa que el numero siguiente esta expresado en binario. I/O trabaja como digital. pero se sale de los parametros. ANS0 = 1 : GP0/AN0. lectruta de la resistencia ajustable. AN3 analogo y resto I/O( bit 3-0).4= 1 ‘ GP4/AN3 . como salida. como entrada.  Aclaracion: 4Mhz/8= 0. Modo ebreviado: ANSEL = %00011000 ‘Fosc/8 (4Mhz/8 = 2uSeg). Es posible que configurando otros valores inferiores a los recomendados el modulo funcione correxctamente . puede que al utilizar otro distinto. ( conversion completa 10bits). control LED.5 Mhz =>1/0. como salida. ANS1 = 1 : GP1/AN1.2 = 0 ‘ GP2/AN2 . esto implica que aunque funciones el ADC del micro utilizado. sus margnes de tolerancia sean distintos y no funcione correctamante. Configuracion en modo BIT Ejemplo: ANSEL ADCS2: ADCS0 = 001 = FOSC/8 . TRISIO. I/O trabaja como digital. I/O = El pin puede trabajar como entrada o salida ( Input/ Output) según se programe en el registro TRISIO Asignacion de Bits como (I/O) Ejemplo: TRISIO. VCFG = 0 ‘ Tension de referencia conetada a la alimetacion del pic. Circuito Similar al ejercicio 1 la diferencia con el PIC12F629 es: GP0 entrada de sensor CDS (pin 7). Si ADFM = 0 los Bits se justifican hacia la izquiera que dando el formato de salida de la conversion con 8 Bits. formato de salida de la conversion con 10 Bits . adc On. GP1 GP2 (pin 6.   .5). Modo abreviado: ADCON0 = &10001101 ¿ ADC salida con 10 bits . CHS1 = 1 CHS0 = 0 Tabla de selección de canal de entrada. solo cuando el modulo ya se estable con la configuracion. canal AN3 (bit 3-2) .refenecia a VDD. La sensibilidad de sensor CDS se ajusta con el potenciómetro de 10K (que es como un círculo azul) es visible. ADFM = 1 ‘ Se justifican los Bits hacia la derecha . CHS1:CHS0 ‘ selecciona el pin analogo ( canal) que se asigna al ADC para su lectura. LED de color rojo y amarillo.  ADCON ADON = 1 ‘ Activa el modo GO/_DONE ‘ Se pone a 1 para activar el proceso de conversion . 'Pin 1: Vdd (+3-5V) 'Pin 8: Vss 'GPIO.9V: Todos los LED no se encienden 3.5 V: El LED rojo parpadea 2. OFF . 'bit5-4=0(no se han aplicado). cada uno de los patrones de flash LED. Amarillo . al cambiar el contenido del rango por encima de 4.1.5 V>: LED parpadea en verde Por supuesto. Además. Además. está en relación con GP0 (pin 7). La configuración se realiza con un programador. por ejemplo.  Programación Cuando la luz no sea percibida por el sensor CDS. puede cambiar la forma en que no se iluminan o se encienden. verde.2. Programa (B) El programa se comenzará con ADCON0 =% 10000011 y termina con Goto ADCloop.0: entrada . Verde ) 'se ilumina con el parpadeo de acuerdo al cambio 'En el nivel de voltaje de entrada de sensor LDR1.amarillo .   .es de 0. 'Cada uno de los LEDs (Rojo .4: conectar LED (Verde) ADCON0=%10000011 '=131 (decimal) 'bit7=1(justificado a la derecha).conectar LDR1 a potenciometro de 10k(0-5V) 'entre Vdd y Vss 'GPIO.1seg.9 .88mV/step).2: conectar LED (Amarillo) 'GPIO. amarillo.5 V: LED amarillo intermitente 1.0 como entrada ASC 'bit7=0(no implementado). De hecho. se establecido el voltaje del umbral de la conversión a Vdd.0.bit0=1(En operacion) ANSEL=%00000001 'establece Fosc/2 y GPIO.0. corresponde 5V a 1023 (5000mV/1023 =4. Con el ADC de 10 bits. cuando Vdd = 5V.bit6=0(V se refieren-Vdd).5 segundos.verde se encienden intermitente en orden. ON . es decir a la tensión entre GND se encontró lo siguiente: • • • • >3. 'bit1=1(se inicia de inmediato). que 'Está conectado a GPIO. Para convertir este rango se estableció la entrada provisional de Vin de la siguiente manera: • • • • Vin> 800 800> = Vin> 500 500> = Vin> 300 Vin = <300 Cada una de las luces LED son de color rojo. el rango de entrada es de 0 a 1023.bit3-2=00(Un canal 0-0).1: conectar LED (Rojo) 'GPIO. cuando Vdd = 5V.bit6-4=000 (Fosc/2). También utilizamos reloj interno de 4MHz. en repetidas ocasiones el LED rojo .5 . el procesamiento podría ser mostrado en diferentes colores LED. Logrando aplicar a cualquier proyecto.por defecto Conclusión: En este experimento de adquirir y cambiar el voltaje del PIC en la entrada.2 'LedY . 'MCLRE/Interno.4 'LedG .bit0=1(entrada analoga) TRISIO=%00000001 'pone todos los pines como salidas.  'bit3-2-1=0(PIN Digtal I/O ).almacenamiento de tensión de entrada LedR var GPIO.LED Rojo LedY var GPIO.1 'LedR . Vin 'leer canal ADC ch-0 y guardar enVin (rango 0-1023) Pause 500 'Necesarios para activar-desactivar el LED If Vin>800 then goto ADCloop 'Sin luces If (800>=Vin) and (Vin>500) then goto LR '( de 0-1023) IF (500>=Vin) and (Vin>300) then goto LY If Vin=<300 then goto LG LR: High LedR Pause 100 Goto ADCloop LY: High LedY Pause 100 Goto ADCloop LG: High LedG Pause 100 Goto ADCloop 'Nota: configuracion para programacion '.LED Amarillo LedG var GPIO.0 CMCON=7 'desactiva la función de comparación Define ADC_BITS 10 'Usar 10-bit ADC Define ADC_CLOCK 3 'usar Reloj interno Define ADC_SAMPLEUS 50 'muestra el tiempo Vin var word 'Vin .   .LED Verde ADCloop: Low LedR Low LedY Low LedG ADCIN 0.FOSC/INTOSC(GP4:I/O). excepto GPIO. otros . El sensor de temperatura LM35DZ de tres patas por debajo de la LCD. En la pantalla LCD en la imagen siguiente. con una precisión de ± un° C. El Sensor de temperatura LM35DZ tiene un rango de 000-100 ° C. Circuito Se ha utilizado el esquema del manual Basic Compiler PicBasic Pro (PBP) donde figura la combinación de la pantalla LCD y 16F84.0 mV / tasa de conversión ° C. se aplica el cableado a la pantalla LCD y 16F819. En otras palabras. 10. es útil para la producción de forma lineal es decir con cada 10. ! ! ! !   .0mV aumente un ° C de temperatura.31V línea 1) y la temperatura convertido (Temp = 31C línea 2) se puede ver lo que se muestra.    LCD CON LM35 Y 16F819 QUE MUESTRA LA TEMPERATURA Resumen En este experimento mediante el uso del PIC16F819 y un sensor de temperatura LM35DZ se medirá la temperatura y se visualizara a través de un cristal líquido (LCD). el voltaje del sensor (V = 0. '+Vref-AVdd(supply power). bit6-5-4=111(OSC 8MHz). bit6=0 .  Programación El objetivo de las dos líneas del LCD.5-entrada Los demas salidas ‘ Puerto B como salida Samples=0   .'bit5-4-3=000(canal 0 (RA0/AN0). PortA.0-entrada análoga. es mostrar en la línea 1 "= Volt 0. 'bit1=0 bit0=1(modulo AD operando) ADCON1=%10001110 '=142 (decimal) . 'bit2=1(Ad conversion AD en progreso ADOn=1). -Vref-AVss(GND)) TRISA=%00100001 TRISB=%00000000 Samples var word Sample var byte Vin var Word 'PortA.xxV" la salida de voltaje del sensor directamente. bit5-4=00 'bit3-2-1-0=1110 (AN4-3-2-1-0=DDDDA. 'bit3=0 bit2=1 'bit1-0 =00 ADCON0=%10000101 '=5 (decimal) .ADC y selección de BIT 'bit7=1 (justificado a la izquierda). y el uso de los datos en la segunda línea es "Temp = XXC" Temperatura en grados centígrados (ºC).ADC 'bit7-6=01(Fosc/32 atADSC2?). DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE LCD_DREG PORTB 'Selección del puerto para el LCD LCD_DBIT 4 ‘Selecciona modo de comunicación '4-bit bus LCD_RSREG PORTB LCD_RSBIT LCD_EREG PORTB LCD_EBIT 0 LCD_BITS 4 LCD_LINES 2 LCD_COMMANDUS 1000 LCD_DATAUS 50 '** ADC 16F819** Define ADC_BITS 10 Define ADC_CLOCK 3 Define ADC_SAMPLEUS 50 OSCCON=%01110100 '=100 (decimal) – selección OSC interno 'bit7=0). "C" Samples=0 goto ADCLoop ‘Al programar tener en cuenta: 'FOSC-INTRC__RA6=I/O. CPD-Deshabilitado.".2. LVP-RB3=I/O. "Volt=". WDTE-habilitado. PWRTE-habilitado.SIGUE MAS     .  ADCloop: For Sample=1 to 10 ADCIN 0. MCLRE-RA5=I/O. 'DEBUG-' 4-bit bus.Dec2 Vin.DEC2 Vin LCDOUT $FE.. 'BODEN-habilitado.". CP-' 4-bit bus ……. Vin 'leer canal 0 y guarder en variable Vin '(rang0 0-1023) Samples=Samples + Vin Pause 100 Next sample Vin=Samples/10 Vin=(Vin*/500)>>2 Lcdout $fe. WRT-All-habilitado.1 'Clear LCD Lcdout $fe. CCPMX-CCPI=RB2.$C0 Lcdout "Temp=".dec(Vin/100).
Copyright © 2024 DOKUMEN.SITE Inc.