Está en la página 1de 12

PROYECTO PARA LA DETECCIN DE OBJETOS SE ILUMINAR EL LED ROJO/AMARILLO/VERDE UTILIZANDO UN 12F629, QUE HAR PARPADEAR LENTAMENTE LOS INDICADORES

LED

Mediante el comando PWM (modulacin por ancho de pulso), se realiza el programa para deteccin 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 programacin El 12F629 (IC 8-pin) est lleno de caractersticas, cada pin se selecciona y se establece a travs 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 energa de batera (oficialmente 2.0-5.5V)

Programa (B): 'Ejercicio 1 uso del PWM 'Tres LEDs (GPIO.0-rojo, amarillo GPIO.1, GPIO.4-verde) 'Van cambiando su brillo uno despus de otro (no al mismo tiempo) 'cuando la entrada del LCD1 (GPIO.2) es" 0 "(a oscuras). TRISIO=%000100 'GPIO.2 nica entrada CMCON=7 'Deshabilitar los comparadores. WPU=%00000100 ' Pull-Up on GPIO.2 OPTION_REG.7=0 ' habilitar Pull-Up's LR LY LG level var var var var GPIO.0 'LED rojo en GPIO.0 GPIO.1 'LED amarillo en GPIO.1 GPIO.4 'LED verde en GPIO.4 word 'level=variable ' LED off GPIO.0. 'LED off GPIO.1. 'LED off GPIO.4.

GPIO.0=0 GPIO.1=0 GPIO.4=0 CdSin:

If GPIO.2=0 then inicio Goto CdSin inicio: For level=0 to 255 PWM LR, level, 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, level, 5 '255 -> 0 NEXT level For level=0 to 255 PWM LY, level, 5 Next level For level=255 to 0 step -1 PWM LY, level, 5 NEXT level For level=0 to 255 PWM LG, level, 5 Next level


For level=255 to 0 step -1 PWM LG, level, 5 NEXT level Goto CdSin 'Nota 'la Configuracin de programacin se establece de la siguiente manera: '1) FOSC - INTOSC (GP4: I / O); WDTE - Habilitar; PWRTE - Activar 'MCLR - Internas (por lo que MCLR no requiere resistencia a conexin Vdd) 'BODEN - Habilitar! CD - Desactivar, CDP - Desactivar.

! !
UTILIZACIN DE LA FUNCIN DE ADC 12F675 (TRES LEDS DE VISUALIZACIN PARA NIVEL DE ENTRADA DE LA LUMINOSIDAD)

El PIC 12f675 es econmico como el PIC12F629, sin embargo posee convertidor analgico-digital de 10 Bit. Modulo anlogo digital (ADC): El PIC 12f675 posee un modulo ADC que se utiliza para saber la tensin en su entrada, este modulo convierte una seal anloga a digital de 10 bit. Tiene cuatro entradas anlogas pero solo una de ellas puede leer a un tiempo, la entrada activa se selecciona mediante un multiplexor interno dedicado a este propsito que la conecta al circuito sample and hold. Para poder realizar la conversin al ADC necesita una fuente de tensin de referencia que pueda seleccionarse desde dos orgenes distintos, uno puede ser la alimentacin del PIC y el otro puede ser una tensin de referencia externa suministrada al pin destinado para este propsito y que ocupa una de las entradas anlogas, y por ltimo se necesita una fuente de pulsos de reloj. El resultado de la conversin se obtiene en dos registros de 8 bit cada uno.

Al configurar el modulo ADC se tiene que tener presente la correcta sincronizacion del relor principal con la velocidad real del convertidor. El PIC 12f675 dispone de un divisor de frecuencia dispueto entre el reloj principal y la entrada de reloj del ADC. Para poder seleccionar la escala del divisor el datasheets el PIC especifica que se necesitan 11 Tad para realizar cada conversion. El tad es un pulso de reloj de un ancho ( tiempo) determinado que lo da la velocidad de conversion del modulo ADC. En este caso el manual indica que como minimo se requiere de 1.6 us , por lo tanto en ala tabla, para la frecuencia de reloj seleccionada, se buscara la configuracion del divisor que de cmo resultado 1.6 us, o en su defecto por no exixstir , la inmediata superior. 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.

Al tiempo de conversion de la lectrura hay que aadirle el tiempo de os registros de salida. 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 instruccin y 8 ciclos


de reloj ( 2 ciclos de instruccin) cuando el formato de salida es de 10 BITS, porque el resultaso de la lectura se divide en dos registros de 8 BITS. Setendra que hacer una espera minima de 10 useg, si se realiza un cambio de configuracion en tiempo de ejecucion para estar seguro que la lectura no estara falseada. El tiempo de espera es necesario para que el modulo complete su nueva configuracion y se estabilice. La impdencia de la seal aplicada a la entrada no debe superar los 10 K, 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 , tambien puede trabajr en el modulo Sleep del micro mediante el relo interno RC. Esta permitido abortar la conversion que este en proceso, 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. 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, los registros de lectura son ADRESH y ADREL , son el valor mayor y menor de la lectura respectivamente y ambos se usan con el formato de salida de 10 BITS. Si se eligio el formato ede salida de 8 BITS el valor de la conversion se leee en el registro ADRESH. 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. ANSEL ( ANS3: ANS0): Se seleccionan los pines que trabajaran como analogos y con el registro TRISIO bits se asignan como entradas. 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.6 us para este ADC). Conocido esto solo queda configurar los bits del divisor segn la tabla trabajando con un cristal de 4 Mhz, como no existe un multiplo que de 1.6 us exactos se elige el inmediatamente superior que es 2us (001 = 8Tosc). Conclusion: Trabajando a 4Mhz elegimos la opcion 001 = FOSC/8 , porque (4Mhz/8) = 2 useg. En el caso de no obtener el valor exacto como en este caso, el manual indica que se seleccione el inmediatamente superior o coloquemos un cristal con una frecuencia especial.

Aclaracion: 4Mhz/8= 0.5 Mhz =>1/0.5 Mhz = 2 uSeg. ( conversion completa 10bits), haya que tener en cuenta que el PIC siempre genera una conversion de 10 bits. Es posible que configurando otros valores inferiores a los recomendados el modulo funcione correxctamente , pero se sale de los parametros, esto implica que aunque funciones el ADC del micro utilizado, puede que al utilizar otro distinto, sus margnes de tolerancia sean distintos y no funcione correctamante. Configuracion en modo BIT Ejemplo: ANSEL ADCS2: ADCS0 = 001 = FOSC/8 , seleccina el divisor ADCS2 = 0 ADCS1 = 0 ADCS0 = 1 ANSEL ANS3 = 1 : GP4/AN3, trabaja como analogo. ANS2 = 1 : GP2/AN2, I/O trabaja como digital. ANS1 = 1 : GP1/AN1, I/O trabaja como digital. ANS0 = 1 : GP0/AN0, I/O trabaja como digital. I/O = El pin puede trabajar como entrada o salida ( Input/ Output) segn se programe en el registro TRISIO Asignacion de Bits como (I/O) Ejemplo: TRISIO.2 = 0 GP2/AN2 , como salida, control LED. TRISIO.4= 1 GP4/AN3 , como entrada, lectruta de la resistencia ajustable. TRISIO.5 = 0 GP5 pin, como salida, Tx pueto serie. El resto de pines como entradas. Modo ebreviado: ANSEL = %00011000 Fosc/8 (4Mhz/8 = 2uSeg), AN3 analogo y resto I/O( bit 3-0). TRISIO = %11011011 Se definen los pines como entrada = 1 salida = 0 % en lengueje BASIC significa que el numero siguiente esta expresado en binario. ADCON regitro de control modulo ADC

Seleccin en modo Bits:

ADCON ADON = 1 Activa el modo GO/_DONE Se pone a 1 para activar el proceso de conversion , solo cuando el modulo ya se estable con la configuracion. CHS1:CHS0 selecciona el pin analogo ( canal) que se asigna al ADC para su lectura. CHS1 = 1 CHS0 = 0

Tabla de seleccin de canal de entrada. VCFG = 0 Tension de referencia conetada a la alimetacion del pic. ADFM = 1 Se justifican los Bits hacia la derecha , formato de salida de la conversion con 10 Bits . Si ADFM = 0 los Bits se justifican hacia la izquiera que dando el formato de salida de la conversion con 8 Bits. Modo abreviado: ADCON0 = &10001101 ADC salida con 10 bits ,refenecia a VDD, canal AN3 (bit 3-2) , adc On.

Circuito Similar al ejercicio 1 la diferencia con el PIC12F629 es: GP0 entrada de sensor CDS (pin 7), LED de color rojo y amarillo, GP1 GP2 (pin 6,5). La sensibilidad de sensor CDS se ajusta con el potencimetro de 10K (que es como un crculo azul) es visible.


Programacin Cuando la luz no sea percibida por el sensor CDS, en repetidas ocasiones el LED rojo - amarillo - verde se encienden intermitente en orden. Con el ADC de 10 bits, el rango de entrada es de 0 a 1023. 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, amarillo, verde. Adems, se establecido el voltaje del umbral de la conversin a Vdd, por ejemplo, cuando Vdd = 5V, corresponde 5V a 1023 (5000mV/1023 =4.88mV/step). De hecho, cuando Vdd = 5V, est en relacin con GP0 (pin 7), es decir a la tensin entre GND se encontr lo siguiente: >3.9V: Todos los LED no se encienden 3,9 - 2,5 V: El LED rojo parpadea 2,5 - 1,5 V: LED amarillo intermitente 1,5 V>: LED parpadea en verde

Por supuesto, al cambiar el contenido del rango por encima de 4, puede cambiar la forma en que no se iluminan o se encienden. Adems, cada uno de los patrones de flash LED, ON - 0.1seg, OFF - es de 0,5 segundos. Programa (B) El programa se comenzar con ADCON0 =% 10000011 y termina con Goto ADCloop. Tambin utilizamos reloj interno de 4MHz. La configuracin se realiza con un programador. 'Cada uno de los LEDs (Rojo , Amarillo , Verde ) 'se ilumina con el parpadeo de acuerdo al cambio 'En el nivel de voltaje de entrada de sensor LDR1, que 'Est conectado a GPIO.0. 'Pin 1: Vdd (+3-5V) 'Pin 8: Vss 'GPIO.0: entrada - conectar LDR1 a potenciometro de 10k(0-5V) 'entre Vdd y Vss 'GPIO.1: conectar LED (Rojo) 'GPIO.2: conectar LED (Amarillo) 'GPIO.4: conectar LED (Verde) ADCON0=%10000011 '=131 (decimal) 'bit7=1(justificado a la derecha),bit6=0(V se refieren-Vdd), 'bit5-4=0(no se han aplicado),bit3-2=00(Un canal 0-0), 'bit1=1(se inicia de inmediato),bit0=1(En operacion)

ANSEL=%00000001 'establece Fosc/2 y GPIO.0 como entrada ASC 'bit7=0(no implementado),bit6-4=000 (Fosc/2),


'bit3-2-1=0(PIN Digtal I/O ),bit0=1(entrada analoga) TRISIO=%00000001 'pone todos los pines como salidas, excepto GPIO.0 CMCON=7 'desactiva la funcin de comparacin

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 - almacenamiento de tensin de entrada LedR var GPIO.1 'LedR - LED Rojo LedY var GPIO.2 'LedY - LED Amarillo LedG var GPIO.4 'LedG - LED Verde ADCloop: Low LedR Low LedY Low LedG ADCIN 0, 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 '- FOSC/INTOSC(GP4:I/O), 'MCLRE/Interno, otros - por defecto Conclusin: En este experimento de adquirir y cambiar el voltaje del PIC en la entrada, el procesamiento podra ser mostrado en diferentes colores LED. Logrando aplicar a cualquier proyecto.

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 travs de un cristal lquido (LCD). Circuito

Se ha utilizado el esquema del manual Basic Compiler PicBasic Pro (PBP) donde figura la combinacin de la pantalla LCD y 16F84, se aplica el cableado a la pantalla LCD y 16F819. El Sensor de temperatura LM35DZ tiene un rango de 000-100 C, 10,0 mV / tasa de conversin C, con una precisin de un C. En otras palabras, es til para la produccin de forma lineal es decir con cada 10.0mV aumente un C de temperatura. En la pantalla LCD en la imagen siguiente, el voltaje del sensor (V = 0.31V lnea 1) y la temperatura convertido (Temp = 31C lnea 2) se puede ver lo que se muestra. El sensor de temperatura LM35DZ de tres patas por debajo de la LCD.

! ! ! !


Programacin El objetivo de las dos lneas del LCD, es mostrar en la lnea 1 "= Volt 0.xxV" la salida de voltaje del sensor directamente, y el uso de los datos en la segunda lnea es "Temp = XXC" Temperatura en grados centgrados (C). DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE DEFINE LCD_DREG PORTB 'Seleccin del puerto para el LCD LCD_DBIT 4 Selecciona modo de comunicacin '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) seleccin OSC interno 'bit7=0), bit6-5-4=111(OSC 8MHz), 'bit3=0 bit2=1 'bit1-0 =00 ADCON0=%10000101 '=5 (decimal) - ADC 'bit7-6=01(Fosc/32 atADSC2?),'bit5-4-3=000(canal 0 (RA0/AN0), 'bit2=1(Ad conversion AD en progreso ADOn=1), 'bit1=0 bit0=1(modulo AD operando)

ADCON1=%10001110 '=142 (decimal) - ADC y seleccin de BIT 'bit7=1 (justificado a la izquierda), bit6=0 , bit5-4=00 'bit3-2-1-0=1110 (AN4-3-2-1-0=DDDDA, '+Vref-AVdd(supply power), -Vref-AVss(GND)) TRISA=%00100001 TRISB=%00000000 Samples var word Sample var byte Vin var Word 'PortA.0-entrada anloga, PortA.5-entrada Los demas salidas Puerto B como salida

Samples=0

ADCloop: For Sample=1 to 10 ADCIN 0, 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,1 'Clear LCD Lcdout $fe,2, "Volt=",dec(Vin/100),".",DEC2 Vin LCDOUT $FE,$C0 Lcdout "Temp=",Dec2 Vin,"C" Samples=0 goto ADCLoop Al programar tener en cuenta: 'FOSC-INTRC__RA6=I/O, WDTE-habilitado, PWRTE-habilitado, MCLRE-RA5=I/O, 'BODEN-habilitado, LVP-RB3=I/O, CPD-Deshabilitado, WRT-All-habilitado, 'DEBUG-' 4-bit bus, CCPMX-CCPI=RB2, CP-' 4-bit bus ..SIGUE MAS