Você está na página 1de 3

Conversor Análogo A Digital Con PIC 16F887

La conversión analógica digital, es la que nos permite transformar una señal analógica (un
voltaje), en una representación digital (números binarios) del valor correspondiente a la
tensión en el pin de entrada para poder trabajar con ella. Se utiliza en infinidad
de aplicaciones, lo más común es usarla para leer señales provenientes de algún sensor
(temperatura, humedad, acelerómetros, etc.).

Un convertidor análogo digital tiene como entrada un nivel de voltaje (valor analógico) y
produce en su salida un número binario de n bits proporcionales al nivel de la entrada (valor
digital). Los convertidores de señal análoga a digital abrevian ADC o A/D.

Uno de los parámetros que definen al A/D es la resolución como la mínima variación 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 resolución 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 resolución será:

Resolución= (10v – 5v)/1024=4.88 mV


Una fórmula para el cálculo será:

Resolución= (Vref2-Vref1)/1024

Donde las tensiones de referencia son 10V y 5V.

En este ejercicio se nos pide leer una señal analógica 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 envía valores de 0.9555 voltios y
valores superiores existentes se enciende el LED conectado en RC0. Si la fotorresistencia
envía valores de 1.00338 voltios o que llegue al límite de capacidad del LDR enciende el
LED conectado en RC7. Leyendo las señales análogas por el puerto RA0.

A continuación el código y diagrama esquemático:


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

Você também pode gostar