Anda di halaman 1dari 3

Conversor Anlogo A Digital Con PIC 16F887

La conversin analgica digital, es la que nos permite transformar una seal analgica (un
voltaje), en una representacin digital (nmeros binarios) del valor correspondiente a la
tensin en el pin de entrada para poder trabajar con ella. Se utiliza en infinidad
de aplicaciones, lo ms comn es usarla para leer seales provenientes de algn sensor
(temperatura, humedad, acelermetros, etc.).
Un convertidor anlogo digital tiene como entrada un nivel de voltaje (valor analgico) y
produce en su salida un nmero binario de n bits proporcionales al nivel de la entrada (valor
digital). Los convertidores de seal anloga a digital abrevian ADC o A/D.
Uno de los parmetros que definen al A/D es la resolucin como la mnima variacin de
voltaje en la entrada que produce cambio del valor digital en la salida. Por ejemplo un
convertidor de 10 bits tiene un total de 210 valores (1024 valores de 0 a 1023).
Si tenemos 10V a la entrada la resolucin seria de 9,765mV. En este caso el voltaje es de
10V a 0V pero pueden variar. Por ejemplo si tenemos de 10v a 5v la resolucin ser:
Resolucin= (10v 5v)/1024=4.88 mV
Una frmula para el clculo ser:
Resolucin= (Vref2-Vref1)/1024
Donde las tensiones de referencia son 10V y 5V.

En este ejercicio se nos pide leer una seal analgica usando un LDR y por medio del
dispositivo desplegar los valores en los puertos del PIC.
Al desarrollar este ejercicio en donde se programa en lenguaje assembler, donde tengo
algunas dificultades al habilitar los puertos C y D, lo que hice en mi programa es que en los
puertos RC0 y RC7 se mostrara el comportamiento del LDR desplegando as las distintas
reacciones del dispositivo. Cuando la fotorresistencia enva valores de 0.9555 voltios y
valores superiores existentes se enciende el LED conectado en RC0. Si la fotorresistencia
enva valores de 1.00338 voltios o que llegue al lmite de capacidad del LDR enciende el
LED conectado en RC7. Leyendo las seales anlogas por el puerto RA0.
A continuacin el cdigo y diagrama esquemtico:

LIST P=16F887
INCLUDE P16F887.INC
ERRORLEVEL -302
__CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF
& _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
__CONFIG _CONFIG2, _BOR40V & _WRT_OFF
CBLOCK 0X20
PDel0, VALORAD
ENDC

ORG 0x00
GOTO CONFIGURA
RETAD movlw .123 ; 1 establecer el numero de repeticiones
movwf PDel0 ; 1 |
PLoop0 clrwdt
; 1 limpiando watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo durante....
goto PLoop0 ; 2 no, bucle
PDelL1 goto PDelL2
; 2 ciclos delay
PDelL2 clrwdt
; 1 ciclos delay
return
; 2+2 termina

CONFIGURA CLRF PORTB


BANKSEL OSCCON
MOVLW B'01101100'
MOVWF OSCCON
BANKSEL ADCON1
MOVLW B'00000000' ; 7 justifica a la izq, 5 Vss ref, 4 Vdd ref
MOVWF ADCON1
BANKSEL TRISA
MOVLW B'00000001'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
BANKSEL ANSEL
MOVLW B'00000001'
MOVWF ANSEL
CLRF ANSELH
BANKSEL ADCON0
MOVLW B'11000001' ;7:6 FCR clock, 5:2 canal, 1 go, 0 AD ON
MOVWF ADCON0
CLRF PORTC

INICIO BSF ADCON0,GO


CALL RETAD
END_AD BTFSC ADCON0,GO
GOTO END_AD
MOVF ADRESH,W
MOVWF VALORAD
MOVLW .51 ;Pregunto si el valor medido por el AD es menor a 1 V - en este caso usamos un LDR
SUBWF VALORAD,W
BTFSS STATUS,C
GOTO MENOR

GOTO MAYOR
MAYOR BCF PORTC,0
BSF PORTC,7
GOTO INICIO

MENOR BCF PORTC,7


BSF PORTC,0
GOTO INICIO
END

Anda mungkin juga menyukai