Anda di halaman 1dari 7

La conversin analgica-digital (CAD) consiste en la transcripcin de seales analgicas en seales digitales, con el propsito de facilitar suprocesamiento (codificacin, compresin,

etc.) y hacer la seal resultante (la digital) ms inmune al ruido y otras interferencias a las que son ms sensibles las seales analgicas. Para esta prctica se usar el PIC16F870 y un sensor de temperatura LM35. El resultado de la temperatura medida se mostrar en un LCD de 16x2. Para el caso de los PICs, es necesario asignar ciertos valores a un par de registros. ADCON0: controla la operacin del mdulo A/D. ADCON1: configuracin de las funciones de los pines de los puertos del A/D (analgicos o digitales, uso o no de voltaje de referencia externo). Por ejemplo: ADCON0 = %11000001 significa: ADCON1 = %00001110 significa:

Bit 7-6: clock del ADC es RC. Bit 7: 1 es justificacin a la izquierda. Bit 5-3: canal analgico 0. (AN0.) Bit 6-4: no se usan. Bit 2: bit de estado de conversin. 0 significa Bit 3-0: solo un canal analgico, V de referencia que la conversin no est en progreso. + es VDD y V de referencia es VSS. Bit 1: no se usa. Bit 0: 1 significa inicio de operacin del mdulo A/D. La funcin del compilador que lee el dato del pin de ADC es ADCIN, cuya sintaxis es: ADCIN canal, variable Antes de usar esta funcin, es necesario asignar la direccin de los pines de entrada analgica con la funcin TRIS. Varios DEFINEs pueden tambin ser utilizados. Los valores por defecto se muestran abajo: DEFINE ADC_BITS 8 ' Fije el nmero de BITS en el resultado (8, 10 o 12) DEFINE ADC_CLOCK 3 'Fije EL CLOCK (RC = 3) DEFINE ADC_SAMPLEUS 50 ' Fije el tiempo de muestreo en microsegundos Para el caso de la resolucin del ADC, se usa la siguiente frmula:

Para el caso de trabajar con 8 bits y un voltaje de 5 voltios como referencia se tendr:

Es decir, el ADC ir de 0 V a 5 V con pasos de 19.53 mV. El valor ledo por ADCIN (para el caso de 8 bits ir de 0 a 255 y para el caso de 10 bits ir de 0 a 1024) debe ser multiplicado por la resolucin para obtener el valor analgico que se est leyendo. Por ejemplo: Valor = ADCIN x ADC_resolucin

Veamos un ejemplo usando 8 bits y un voltaje de referencia de 5 V: ' DEFINICIN DE REGISTROS PARA EL LCD DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS DEFINE LCD_DBIT 4 'DESDE EL BIT B.4 AL BIT B.7 DEFINE LCD_RSREG PORTB'UTILIZAR EL REGISTRO DE CONTROL/DATOS EN EL PUERTO D DEFINE LCD_RSBIT 1 'EN EL BIT B.1 DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B DEFINE LCD_EBIT 2 'EN EL BIT B.2 DEFINE OSC 4 ; PARMETROS DEL ADC DEFINE ADC_BITS 8 ; NMERO DE BITS DEFINE ADC_CLOCK 3 ; USAR CLOCK INTERNO DEL AD DEFINE ADC_SAMPLEUS 50 ; TIEMPO DE MUESTREO EN 50US ; VARIABLES RES VAR WORD ; RESULTADO DE LA CONVERSIN TEMP1 VAR BYTE ; TEMPERATURA C TRISA = 1 ; RA0 (AN0) COMO ENTRADA TRISB = 0 ; PORTB SALIDA (ADC) PAUSE 500 ; PAUSA DE INICIALIZACIN DEL LCD ; INICIAR CONVERSIN A/D ADCON1 = %00001110 ; ESTABLECER SOLO UN CANAL COMO ANALGICO ; VOLTAJE DE REFERENCIA ES VDD ADCON0 = %11000001 ; RELOJ DEL A/D, SELECCIONA CANAL AN0 ; INICIAR EL A/D LCDOUT $FE, 1 ; BORRAR LCD INICIO: ; INICIAR CONVERSIN ADCIN 0, RES ; LEER EL CANAL A0 TEMP1 = 2 * RES ;2 VIENE DE->19.53 LCDOUT $FE,2,"TEMP = ",DEC TEMP1,$DF,"C" ; MOSTRAR RESULTADO PAUSE 500 ; PAUSA 0.5 SEGUNDOS GOTO INICIO END

Figura 1. ADC de 8 bits.

Ntese en el cdigo que TEMP1 = 2 * RES significa que se redondea el valor de 19.53 a 2. Trabajando con el ADC de 10 bits tenemos la siguiente resolucin:

Es decir, ir de 0 V a 5 V con pasos de 4.88 mV. ADCIN ir en este caso de 0 (0 voltios ledos) a 1024 (5 voltios ledos). Usando 10 bits de resolucin se puede usar una lectura decimal de la temperatura:
' DEFINICIN DE REGISTROS PARA EL LCD DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS DEFINE LCD_DBIT 4 'DESDE EL BIT B.4 AL BIT B.7 DEFINE LCD_RSREG PORTB'UTILIZAR EL REGISTRO DE CONTROL/DATOS EN EL PUERTO D DEFINE LCD_RSBIT 1 'EN EL BIT B.1 DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B

DEFINE LCD_EBIT 2 'EN EL BIT B.2 DEFINE OSC 4 ; PARMETROS DEL ADC DEFINE ADC_BITS 10 ; NMERO DE BITS DEFINE ADC_CLOCK 3 ; USAR CLOCK RC DEL AD DEFINE ADC_SAMPLEUS 50 ; TIEMPO DE MUESTREO EN 50US ; VARIABLES RES VAR WORD ; RESULTADO DE LA CONVERSIN VAL VAR WORD TEMP1 VAR byte ; TEMPERATURA C TRISA = 1 ; RA0 (AN0) COMO ENTRADA TRISB = 0 ; PORTB SALIDA (ADC) PAUSE 500 ; PAUSA DE INICIALIZACIN DEL LCD ; INICIAR CONVERSIN A/D ADCON1 = %10001110 ; ESTABLECER SOLO UN CANAL COMO ANALGICO ; VOLTAJE DE REFERENCIA ES VDD ADCON0 = %11000001 ; RELOJ DEL A/D, SELECCIONA AN0 ; INICIAR EL A/D LCDOUT $FE, 1 ; BORRAR LCD INICIO: ; INICIAR CONVERSIN ADCIN 0, RES ; LEER EL CANAL A TEMP1 = 488 * RES ; 1024*488=499712; VAL = DIV32 10 LCDOUT $FE,1,"TEMP = ",DEC VAL DIG 3,DEC VAL DIG 2,".",DEC VAL DIG 1, DEC VAL DIG 0,$DF,"C" ; PAUSE 500 ; PAUSA 0.5 SEGUNDOS GOTO INICIO END

La siguiente figura muestra el cdigo en funcionamiento:

Figura 2. ADC con 10 bits de resolucin.

Con un voltaje de referencia externo usando un diodo zener de 2.5 V se tendr:

Sabiendo que el LM35 da 10 mV por grado centgrado, usando un voltaje de referencia externo nos da una lectura ms precisa del valor de la temperatura. Es necesario definir el registro ADCON1 de esta manera:
ADCON1 = %00001010

De este modo, se establece al pin RA3 (AN3) como el voltaje de referencia positivo a Vss como el voltaje de referencia negativo.
' DEFINICIN DE REGISTROS PARA EL LCD DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS DEFINE LCD_DBIT 4 'DESDE EL BIT B.4 AL BIT B.7 DEFINE LCD_RSREG PORTB'UTILIZAR EL REGISTRO DE CONTROL/DATOS EN EL PUERTO D DEFINE LCD_RSBIT 1 'EN EL BIT B.1

DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B DEFINE LCD_EBIT 2 'EN EL BIT B.2 DEFINE OSC 4 ; PARMETROS DEL ADC DEFINE ADC_BITS 8 ; NMERO DE BITS DEFINE ADC_CLOCK 3 ; USAR CLOCK INTERNO DEL AD DEFINE ADC_SAMPLEUS 50 ; TIEMPO DE MUESTREO EN 50US ; VARIABLES RES VAR WORD ; RESULTADO DE LA CONVERSIN TEMP1 VAR BYTE ; TEMPERATURA C TRISA = 1 ; RA0 (AN0) COMO ENTRADA TRISB = 0 ; PORTB SALIDA (ADC) PAUSE 500 ; PAUSA DE INICIALIZACIN DEL LCD ; INICIAR CONVERSIN A/D ADCON1 = %00001010 ; ESTABLECER SOLO UN CANAL COMO ANALGICO ; VOLTAJE DE REFERENCIA ES RA3 ADCON0 = %11000001 ; RELOJ DEL A/D, SELECCIONA AN0 ; INICIAR EL A/D LCDOUT $FE, 1 ; BORRAR LCD INICIO: ; INICIAR CONVERSIN ADCIN 0, RES ; LEER EL CANAL A TEMP1 = RES ;2 VIENE DE->19.53 LCDOUT $FE,2,"TEMP = ",DEC TEMP1,$DF,"C" ; MOSTRAR RESULTADO PAUSE 500 ; PAUSA 0.5 SEGUNDOS GOTO INICIO END

El resultado se muestra en la siguiente figura:

Figura 3. ADC con 8 bits de resolucin y Vref externo.

Descarga el cdigo de esta simulacin:

Anda mungkin juga menyukai