Módulo 6 Conversor AD

14
CURSO DE MICROC ONTROLADORES PIC16F877A EL CONVERSOR A/D Profesor: Mishell Sanchez Página 1 Módulo 6: CONVERTIDOR ANÁLOGO DIGITAL Normalmente la naturaleza que nos rodea tiene fenómenos que para el hombre es de suma importancia medir. Para medir estos fenómenos usamos sensores que transforman un valor físico en un valor eléctrico. Por ejemplo cuando queremos medir la voz, necesitamos usar un micrófono, este sensor a su salida nos dará una pequeño voltaje, esta señal de voltaje tendremos que amplificarla para poder tratarla. En épocas pasadas el tratamiento de la señal de voz era puramente analógico, sin embargo en la actualidad existen muchos métodos para tratar las señales de voz de manera digital. Antes de pasar al control digital de la señal de voz, debemos convertir esta señal en digital, para este propósito se usa un conversor A/D. 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). El proceso de conversión A/D normalmente posee las etapas de: - Muestreo - Cuantificación - Codificación Uno de los parámetros que definen al conversor 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 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á: Una fórmula para el cálculo será: Donde las tensiones de r eferencia son:

Transcript of Módulo 6 Conversor AD

Page 1: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 1/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 1

Módulo 6: CONVERTIDOR ANÁLOGO DIGITAL

Normalmente la naturaleza que nos rodea tiene fenómenos que para el hombre es de suma importanciamedir. Para medir estos fenómenos usamos sensores que transforman un valor físico en un valor

eléctrico. Por ejemplo cuando queremos medir la voz, necesitamos usar un micrófono, este sensor a su

salida nos dará una pequeño voltaje, esta señal de voltaje tendremos que amplificarla para poder

tratarla. En épocas pasadas el tratamiento de la señal de voz era puramente analógico, sin embargo en

la actualidad existen muchos métodos para tratar las señales de voz de manera digital. Antes de pasar al

control digital de la señal de voz, debemos convertir esta señal en digital, para este propósito se usa un

conversor A/D.

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). El proceso de

conversión A/D normalmente posee las etapas de:

-

Muestreo- Cuantificación

- Codificación

Uno de los parámetros que definen al conversor A/D es la resolución como la mínima variación devoltaje en la entrada que produce cambio del valor digital en la salida.

Por ejemplo un convertidor de 10 bits tiene un total de 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á:

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

Donde las tensiones de referencia son:

Page 2: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 2/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 2

1. Descripción General

El módulo convertidor Análogo Digital (A/D) del PIC 16F877A tiene 8 canales de entrada. La conversión

de la señal analógica aplicada (a uno de los canales) se plasma en número binario de 10 dígitos. El

módulo A/D posee voltajes de referencia que pueden ser seleccionados para emplear las tensiones VDD,

VSS del microcontrolador o puede emplear tensiones aplicadas a los pines RA2 o RA3 (incluso es posible

establecer combinaciones de los anteriores valores).

Para operar el modulo ADC contamos con 4 registros:

- Registro de resultado de byte alto de la conversión A/D (ADRESH). Banco 0, 0x1E

- Registro de resultado de byte bajo de la conversión A/D (ADRESL). Banco 1, 0x9E

- Registro 0 de control del módulo A/D (ADCON0). Banco 0, 0x1F

- Registro 1 de control del módulo A/D (ADCON1). Banco 1, 0x9F 

El detalle del registro ADCON0 se muestra a continuación:

bit 7-6 ADCS1:ADCS0: Bits Selectores de reloj del Conversor A/D (Bits de ADCON0 en negrita)

bit 5-3 CHS2:CHS0: Bits selectores de canal analógico

000 = Canal 0 (AN0)

001 = Canal 1 (AN1)

010 = Canal 2 (AN2)

011 = Canal 3 (AN3)

100 = Canal 4 (AN4)

101 = Canal 5 (AN5)110 = Canal 6 (AN6)

111 = Canal 7 (AN7)

Nota: Los dispositivos PIC16F873A/876A solo tienen canales A/D del 0 hasta el 4; los selectores

no implementados son reservados. No seleccione los canales sin implementar en estos

dispositivos.

bit 2 GO/DONE: Bits de estado del Conversor A/D

Cuando ADON = 1:

1 = Conversión A/D en curso (seteando este bit se inicia la conversión A / D que se borra

automáticamente por hardware cuando la conversión A / D es completa

0 = Conversión A/D no está en curso.

bit 1 Bit no implementado: Leído como ‘0’ 

bit 0 ADON: Bit para prender el Conversor A/D

Page 3: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 3/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 3

1 = El modulo conversor A/D está prendido

0 = El módulo conversor A/D está apagado y no consume corriente de funcionamiento

Y el detalle del registro ADCON1 se muestra a continuación:

bit 7 ADFM: Bit Selector de Formato del Resultado A/D

1 = Justificación derecha. Seis de los bits mas significantes de ADRESH son leídos como ‘0’. 

0 = Justificación izquierda. Seis de los bits menos significativos de ADRESL son leídos como ‘0’. 

bit 6 ADCS2: Bit selector de reloj del conversor A/D (Bits de ADCON1 en zona sombreada y en

negrita)

bit 5-4 Bits no implementados: Leídos como ‘0’ 

bit 3-0 PCFG3:PCFG0: Bits de Control para la configuración del Puerto A/D

El registro ADCON1 configura las funciones de los pines de entrada al módulo. Como se aprecia se puede

configurar los pines del puerto A como entradas analógicas inclusive la línea RA3 puede funcionar como

el votaje de referencia.

Los registros ADRESH:ADRESL contienen el resultado de la conversión (10 bits). Cuando se hacompletado una conversión el resultado es almacenado en ADRESH:ADRESL y además el bit GO/-DONE

(registro ADCON bit 2) se pone a 0-lógico y el bit ADIF (registro PIR1 bit 7) se pone como 1-lógico. El

Page 4: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 4/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 4

registro PIR1 ocupa la posición 0x0C del banco 0. He aquí parte del registro que volveremos a tocar en el

módulo de interrupciones:

El diagrama de bloques del modulo ADC del PIC es:

Después que el módulo A/D ha sido configurado, es necesario esperar un periodo de tiempo para que la

señal sea adquirida (antes que las conversiones empiecen). Cada uno de los canales de entrada tiene su

correspondiente bit de configuración en los registros TRIS y estos han de ser puestos como entradas.

Una vez que el periodo de adquisición ha terminado la conversión A/D puede empezar. Los siguientes

pasos muestran la secuencia de uso:

1. Configure el módulo A/D: (lo cual significa)

- Configurar los pines de entrada de los canales analógicos a usar. Configure los voltajes de

referencia. (en el registro ADCON1)

- Seleccione el canal de entrada al módulo A/D (en el registro ADCON0)

- Seleccione el clock de conversión A/D (en el registro ADCON0)

- Ponga a funcionar el módulo A/D (en el registro ADCON0)

2. Configure la interrupción del A/D si lo desea:

- ADIF=0 -lógico (bit que indica si se produjo una conversión)

-ADIE=1-lógico (habilitador de interrupción del modulo analógico)

- PEIE=1 lógico (habilitador de interrupción de periféricos)

Page 5: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 5/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 5

- GIE=1-lógico (Habilitador general de interrupciones)

3. Espere por el tiempo de adquisición (es el tiempo que se demora en trabajar el bloque de sampling

and hold).

4. Comienzo de la conversión: GO/-DONE=1-lógico (en el registro ADCON0)

5. Esperar a que la conversión se complete. Para saber si la conversión termino podemos:

- Revisar el bit GO/-DONE esperando que sea de nuevo 0 -lógico

-O esperar al flag de ADIF sea 1-lógico (puede emplearse como interrupción)

6. Leer el resultado del A/D en el par de registros (ADRESH:ADRESL). No debemos olvidar colocar el bit

ADIF a 0-lógico (si se requiere).

7. Para la siguiente conversión, regrese al paso 1 o paso 2 dependiendo si solo se usa uno o más canales.

2. Requerimientos para la adquisición A/D

Para que el modulo convertido A/D trabaje apropiadamente la carga del capacitor que muestrea la señal

análoga debe ser la máxima.

Como se muestra en la figura, la impedancia de la fuente (Rs) y la impedancia del switch interno (Rss)

afectan el tiempo requerido para la carga del capacitor. La máxima impedancia recomendada para la

fuente analógica es de 10 K ohmios. Cuando la impedancia es menor el tiempo de adquisición es menor

y por tanto la respuesta es mejor. Luego que el canal de entrada es seleccionado (o ha sido cambiado)

no olvide esperar un tiempo a que la adquisición del dato sea hecha antes de que la conversión

propiamente dicha empiece.

Para calcular el mínimo tiempo requerido en la adquisición podemos usar la ecuación:

3. Selección del clock de conversión Analógica Digital

Existe otro parámetro que es importante mencionar y es el tiempo de conversión de A/D POR BIT

(definida como TAD). La conversión A/D requiere un mínimo de 12 TAD por 10 bits de conversión, La

fuente para el clock en la conversión A/D se selecciona por software. Hay 7 posibles valores para la

selección del TAD:

Page 6: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 6/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 6

- 2Tosc

- 4Tosc

- 8Tosc

- 16Tosc

- 32Tosc

- 64Tosc

-Oscilador RC interno que tiene el modulo A/D (crea un retardo de 2us a 6 us).

Para el correcto funcionamiento del módulo el clock de conversión debe ser seleccionado para asegurar

un TAD de 1.6 us como mínimo.

La siguiente tabla muestra el resultado de varios T AD calculados para diferentes clock aplicados al

microcontrolador.

4. Configuración de los pines de los puertos para que trabajen de forma analógica

Los registros ADCON1 y TRIS controlan la operación de los pines de los canales A/D. Los pines que se

empleen como entradas deben ser configurados en los registros TRIS como 1-lógico. Si en el registro

TRIS se coloca a 0-lógico (como línea de salida) el módulo A/D convertirá el voltaje presente a la salida

del pin.

La operación de conversión del A/D es independiente del estado de los bits CHS2:CHS0 y de los bits de

los registros TRIS

Nota1.  Si el puerto A ha sido configurado como analógico y tratamos de leer el registro del puerto

(PORTA) lo que encontraremos serán 0-lógicos. Los pines configurados como salida digital serán

leídos como entradas analógicas con el valor de voltaje presente en las líneas.

2.  Si hubiera niveles analógicos en cualquier pin definido como entrada digital (incluyendo los

pines AN7:AN0). Pueden causar en el buffer de entrada un consumo de corriente que esté

fuera del rango de las especificaciones y por tanto dañar el microcontrolador.

5. Conversiones A/D

Si iniciamos una conversión y colocamos a 0-lógico el bit GO/-DONE conseguimos abortar la conversión

A/D que se esté llevando a cabo en ese momento. El resultado de la conversión no aparecerá en los

registros ADRESH:ADRESL y se mantendrá el último valor convertido.

Después que la conversión A/D es abortada, la siguiente adquisición en el canal seleccionado empieza

automáticamente. El bit GO/-DONE puede ser colocado a 1 para empezar la conversión.

Page 7: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 7/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 7

Como se aprecia en la figura después que el bit GO es colocado a 1-lógico comienza la conversión y al

inicio hay que desconectar el condensador lo cual demanda como máximo 1 TAD, luego vienen los

10TAD correspondientes a los 10 bits del A/D y se necesita un TAD mas para depositar el resultado en

los registros ADRES, colocar el bit GO/-DONE de nuevo a 0-lógico y el bit ADIF a 1-lógico.

Nota. EL bit GO/-DONE y el bit ADON están en el registro ADCON0 pero no debe ser activados a la vez

esto es en la misma instrucción.

6. Registros que almacenan el resultado de la conversión

El par de registros ADRESH:ADRESL almacenan el resultado de la conversión A/D. Este par de registros

ocupan 16 bits. EL módulo A/D tiene la flexibilidad de colocar el resultado justificado a la derecha o a la

izquierda de esos 16 bits (formato). El bit que selecciona el formato es el ADFM (registro ADCON1 bit 7).

La figura muestra como el detalle de la justificación:

Los bits extras (6 bits) son llenados con 0-lógicos. Si en un programa no se emplea el módulo A/D esposible usar los registros ADREH :ADRESL como si fueran registros de propósito general (registros de 8

bits).

7. Operación del módulo A/D durante la operación SLEEP

El módulo A/D puede seguir operando durante el modo SLEEP, esto requiere que el clock A/D sea la red

RC (ADCS1:ADCS0=111). Cuando el clock RC es seleccionado, el módulo A/D espera un ciclo de

instrucción antes de empezar la conversión. Esto le permite a la instrucción SLEEP ser ejecutada

eliminando todos los ruidos digitales producidos por el swticheo en la conversión.

Cuando la conversión es completada, el bit GO/-DONE es colocado a 0-lógico y el resultado es cargado a

los registros ADRES. Si está habilitada la interrupción del módulo A/D el microcontrolador se despierta o

sale del modo SLEEP.

Page 8: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 8/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 8

Si las interrupciones del módulo A/D no están habilitadas, el módulo A/D será apagado pese a que el bit

ADCON sigue aun en 1-lógico. Cuando se apaga el modulo A/D se tiene el mínimo consumo de corriente.

Nota. Para que el módulo A/D opere durante el modo SLEEP la fuente del clock A/D debe ser siempre el

RC (ADCS1:ADCS0=11). Para permitir que la conversión ocurra durante el modo SLEEP asegúrese de

colocar la instrucción SLEEP inmediatamente después de colocar el bit GO/-DONE a 1-lógico.

8. Efectos en el RESET

Después de un RESET el módulo A/D está apagado y si había una conversión en curso ésta es abortada.

Todos los pines que entran al modulo A/D son configurados como entradas analógicas. El valor presente

en ADRESH:ADRESL no se modifica después de un RESET. Luego de encender el microcontrolador el

valor presente en ADRESH:ADRESL es aleatorio (basura).

Ejercicio1: Mostrar la medida de temperatura que el sensor de LM35 nos ofrece a su salida. Usar elPORTD y RC7 para mostrar los datos en binario. Usar el canal analógico 7 (AN7) y un cristal de 20 MHz.  

Para este problema necesitaremos algunos conocimientos previos:

1-  El Sensor LM35 es un sensor de temperatura que nos ofrece a su salida 10mv/ºC. La

alimentación que normalmente se le da es de 5v, sin embargo puede trabajar en el rango de 4 a

20v. Los circuitos que se pueden montar con este sensor son diversos, gran mayoría de estos

circuitos están en su hoja de datos que proporciona el fabricante, nosotros usaremos la

configuración típica pues no hay le necesidad en el ejemplo de usar algo mas complejo.

2-  El primer paso para nuestro diseño debería ser analizar la resolución sensor-microcontrolador.

Sabemos que el sensor nos ofrece una resolución 10mv/ºC, lo cual significa que nuestro

microcontrolador debería estar a la misma resolución o lo más próximo. El pic cuenta con

10bits para almacenar la muestra del conversor A/D, además tiene por defecto los

por tanto si usamos los 10bits del pic n=10 la resolución seria:

Vemos que a 10 bits tenemos una buena resolución, sin embargo si usamos 9 bits obtendremos

algo mas cercano a la resolución del sensor, de esta manera algún incremento en nuestro dato

de 9 bits, seria directamente el incremento en la temperatura sin hace ningún tipo de

procesamiento:

Notese que mientras mas alta sea la temperatura será mas grande el error, mejor dicho:

Para obtener una medida muy exacta tendríamos que usar los Vref del pic. Otra opción seríaconfigurar a nuestro sensor para ajustar al resolución como lo expresa la hoja de datos.

Page 9: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 9/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 9

Ahora ya poseemos los conocimientos necesarios en cuanto al Conversor A/D del PIC y el sensor LM35.

Vamos a configurar el PIC a 9bits de datos justificados a la izquierda, teniendo en teniendo en cuenta la

frecuencia de muestreo y canal analógico 9.

1-  Configuración del ADCON0:

- Para elegir el canal analógico 7: CHS2-CHS1-CHS0= “111” 

- Aun no solicitaremos ninguna muestra, entonces GO/DONE: ‘0’ 

- La conversión A/D requiere un mínimo de 12 TAD por 10 bits de conversión, no nos haremos

problema en este punto, así que usaremos 32 TAD que se refleja en ADCS2-ADCS1-ADCS0=”010” 

nótese que en este registro solo moveremos los bits ADCS1-ADCS0, el bit ADCS2 se encuentra

en el registro ADCON1 que se encuentra en el banco 1.

-Finalmente prenderemos el conversor A/D haciendo ADON=’1’  

2-  Configuración del ADCON1:

-Para justificación a la izquierda el ADFM=’0’ 

- En el paso 1 concluimos de la tabla de configuración que el ADCS2=’0’ 

- Para los bits PCFG3- PCFG2- PCFG1- PCFG0, queremos introducir la señal analógica por el pin

AN7, lo ideal sería que los pines que restan sean digitales, sin embargo vemos que el AN7 no

tiene la combinación idónea para esto, por tanto PCFG3- PCFG2- PCFG1- PCFG0 = “0000”: 

Page 10: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 10/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 10

El Programa en ASM para este ejemplo seria:

 __config _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _HS_OSC

list P=16f877ainclude<p16f877a.inc>

cblock 0x20

TEMP_100us

TEMP_1ms

endc

ORG 0x000

CONF_PINOUT

bsf STATUS,RP0 ; banco 1

clrf TRISD ; PORTD : Salida

bcf TRISC,7 ; RC7 : Salidabcf STATUS,RP0 ; banco 0

clrf PORTD

CONF_AD

bsf STATUS,RP0

movlw b'00000000' ; ADCS2 = '0'

movwf ADCON1 ; Todos los pines Analogicos

bcf STATUS,RP0

movlw b'10111001' ; ADCS1-ADCS0="10"

movwf ADCON0 ; Chanel: AN7 Conversor A/D Prendido

PRINCIPAL

bsf ADCON0,GO ; Inicio de muestreo

btfsc ADCON0,GOgoto $-1 ; Espero que la muestra este lista

movf ADRESH,W

movwf PORTD

bsf STATUS,RP0 ; banco 1

movlw b'00000000'

btfsc ADRESL,7

movlw b'10000000'

bcf STATUS,RP0 ; banco 0

movwf PORTC

call retardo_1ms

goto PRINCIPAL

retardo_1msmovlw .10

movwf TEMP_1ms

retardo_100us

movlw .100

movwf TEMP_100us

nop

nop

decfsz TEMP_100us

goto $-3

decfsz TEMP_1ms

goto retardo_100us

return

END

Page 11: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 11/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 11

La Simulación de este programa la haremos en PROTEUS:

Ejercicio2: Realizar un programa que sirva como voltímetro, sabiendo que el nivel de voltaje a medirpuede variar entre 0v y 30v. El ingreso de la señal analógica se hará por el pin AN0. Mostrar los datosde voltaje usando 3 displays, con un decimal de precisión. Los displays irán conectador al PORTB,PORTC y PORTD respectivamente. Para los displays usaremos la técnica de multiplexación, por tantonecesitaros habilitadores para estos. Usar un cristal de 20 MHz. 

Para este problema para poder imprimir los datos en los displays tendremos que hacer una rutina quenos permita transformar números BINARIOS a formato BCD (decimal). Para este ejemplo trabajaremos

con 8 bits del conversor A/D, por tanto solo necesitaremos convertir los 8 bits del registro ADRESH a 3

números BCD.

La ecuación nos invita a separar CENTENAS, DCENAS y UNIDADES en otros registros de 8 bits, cabe

resaltar que podrían ser solo 2 registros, pues cada BCD es de 4 bits, pero para este ejemplo por la

facilidad de manejo de datos los haremos de la primera manera.

Usaremos restan consecutivas unas de 100 para las centenas, otras de 10 para las decenas y finalmente

el residuo será las unidades.

Si usáramos el lenguaje de alto nivel C, usando datos de 8 bits sin signo la solución sería:

Page 12: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 12/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 12

Lo expuesto anteriormente representado en lenguaje ensamblador seria:

BINTOBCD

clrf CENTENAS

clrf DECENAS

clrf UNIDADES

CENTmovlw .100

subwf DATOC

btfss STATUS,C ; Esperamos que la resta sea negativa

goto $+3 ; Para que el bit C del STATUS se ponga a CERO

incf CENTENAS ; y continue ahora con las rutina de decenas

goto CENT

movlw .100 ; Para volver al valor anterior

addwf DATOC ; antes que sea negativo

DEC

movlw .10

subwf DATOC

btfss STATUS,Cgoto $+3

incf DECENAS

goto DEC

movlw .10

addwf DATOC

UNID

movf DATOC,W ; En DATOC tenemos el residuo de las

movwf UNIDADES ; operaciones anteriores

return

Hasta este momento ya resolvimos un problema de software, sin embargo aun nos queda solucionar el

cuestionamiento que por el PIC no puede ingresar ninguna señal mayor de 5v. Para poder conectar laseñal al pin AN0 usaremos un divisor de tensión con resistencias por su simplicidad, cabe resaltar que

esta solución disminuirá un poco la precisión, hay otras soluciones que dependerán de la aplicación y de

la importancia de la señal a ingresar, otra solución seria opamp’s, etc.:

Muy bien, circuito ya solucionamos el problema de acondicionamiento de señal, ahora vamos a

configurar los registro ADCON0 y ADCON1.

Colocaremos los valores y el lector tendrá que comprobar estos con los apuntes hechos arriba.

Page 13: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 13/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 13

El Código en ASM para este ejercicio sería:

 __config _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _HS_OSC

list P=16f877a

include<p16f877a.inc>

cblock 0x20

TEMP_100us

TEMP_1ms

CENTENAS

DECENAS

UNIDADES

DATOC

endc

ORG 0x000

CONF_PINOUT

bsf STATUS,RP0 ; banco 1clrf TRISB ; PORTB: Salida

clrf TRISC ; PORTC: Salida

clrf TRISD ; PORTD: Salida

bcf STATUS,RP0 ; banco 0

clrf PORTD

CONF_AD

bsf STATUS,RP0

movlw b'00000000' ; ADCS2 = '0'

movwf ADCON1 ; Todos los pines Analogicos

bcf STATUS,RP0

movlw b'10000001' ; ADCS1-ADCS0="10"

movwf ADCON0 ; Chanel: AN0 Conversor A/D PrendidoPRINCIPAL

bsf ADCON0,GO ; Inicio de muestreo

btfsc ADCON0,GO

goto $-1 ; Espero que la muestra este lista

movf ADRESH,W

movwf DATOC

call BINTOBCD

movf CENTENAS,W

call DISPLAY

movwf PORTB

movf DECENAS,W

call DISPLAYmovwf PORTC

movf UNIDADES,W

call DISPLAY

movwf PORTD

call retardo_1ms ; Tiempo de espera para otra ADC

goto PRINCIPAL

BINTOBCD

clrf CENTENAS

clrf DECENAS

clrf UNIDADES

CENT

movlw .100

subwf DATOC

Page 14: Módulo 6 Conversor AD

7/28/2019 Módulo 6 Conversor AD

http://slidepdf.com/reader/full/modulo-6-conversor-ad 14/14

CURSO DE MICROCONTROLADORES PIC16F877A  EL CONVERSOR A/D

Profesor: Mishell Sanchez Página 14

btfss STATUS,C

goto $+3

incf CENTENAS

goto CENT

movlw .100 ; Para volver al valor anterior

addwf DATOC ; antes que sea negativo

DECmovlw .10

subwf DATOC

btfss STATUS,C

goto $+3

incf DECENAS

goto DEC

movlw .10

addwf DATOC

UNID

movf DATOC,W

movwf UNIDADES

;---return

retardo_1ms ; Este tiempo es para la recuperación del ADC

movlw .10

movwf TEMP_1ms

retardo_100us

movlw .100

movwf TEMP_100us

nop

nop

decfsz TEMP_100us

goto $-3

decfsz TEMP_1msgoto retardo_100us

return

DISPLAY

addwf PCL,f ; PC=PC+W

retlw b'00111111' ;0

retlw b'00000110' ;1

retlw b'01011011' ;2

retlw b'01001111' ;3

retlw b'01100110' ;4

retlw b'01101101' ;5

retlw b'01111101' ;6

retlw b'00000111' ;7retlw b'01111111' ;8

retlw b'01101111' ;9

retlw b'01110111' ;A

retlw b'01111100' ;B

retlw b'00111001' ;C

retlw b'01011110' ;D

retlw b'01111001' ;E

retlw b'01110001' ;F

END