Sie sind auf Seite 1von 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 var GPIO.0 'LED rojo en GPIO.0


LY var GPIO.1 'LED amarillo en GPIO.1
LG var GPIO.4 'LED verde en GPIO.4
level var word 'level=variable

GPIO.0=0 ' LED off GPIO.0.


GPIO.1=0 'LED off GPIO.1.
GPIO.4=0 'LED off GPIO.4.

CdSin:

If GPIO.2=0 then inicio


Goto CdSin

inicio:

For level=0 to 255 'Fade-up rutina


PWM LR, level, 5 '0 -> 255
Next level '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 LCD_DREG PORTB 'Seleccin del puerto para el LCD


DEFINE LCD_DBIT 4 Selecciona modo de comunicacin '4-bit bus
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 1000
DEFINE 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 'PortA.0-entrada anloga, PortA.5-entrada Los demas salidas


TRISB=%00000000 Puerto B como salida

Samples var word


Sample var byte
Vin var Word

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

Das könnte Ihnen auch gefallen