Está en la página 1de 24

CONVERSIÓN

ANALOGA A DIGITAL
DANILO A GARCIA HANSEN
Objetivo:
En esta presentación se hace una revisión de la terminología de la
conversión A/D así como también de la arquitectura del módulo de
conversión análogo a digital y de su configuración en el
PIC16F87XA.
Se debe comprender que es un solo conversor de análogo a digital con 5 u 8 posibles
canales de entrada, esto último depende de si el dispositivo PIC es de 28 o de 40/44 pines.
En un ejemplo adjunto se configuran sus registros especiales para
ponerlo en funcionamiento y se realiza la visualización dinámica
del resultado en hexadecimal.
Definiciones de la terminología A/D
 El código N (el resultado) de la conversión AD está dada por:
,
n es el número de bits en el código N.

Vpaso ó Resolución = , ejm: Vpaso = 5V/210 = 4.882812 mV


Por tanto :
El resultado de una conversión A/D 
Definición del voltaje de paso
  está dado como la diferencia entre VREF + y VREF-;
Vref
Asumamos un VREF+ = 5V y un VREF-=0V y n=10

= = 4,88mV

El voltaje de paso significa el cambio (∆V) que debe haber en el voltaje a medir (Vin) para que el
resultado N varíe en un ±bit.
Ejemplo:
Sí Vin=2,5V, entonces el resultado N (ADRESH:ADRESL)= 2,5V/4.88mV=512 (0x200)
Para obtener N=513 (0x201), el Vin debe incrementarse al menos en 4,88mV y al contrario si el Vin disminuye en
al menos 4,88mV, la respuesta sería N=511 (0x1FF)
Cálculo del Voltaje de referencia
 
Supóngase que vamos a medir con un resultado de 500 pasos de N en donde cada
paso representa 1 mV, entonces:

= = 1mV;

Despejando VREF+ = 1024 x 1 mV 


VREF+ = 1,024V

Esto limita el Vin a valores en el rango de 0V a 1,023V máximo.


Cálculo de VREF, VPaso o resolución
 
Ejercicio: Supóngase que queremos efectuar una medición de voltaje en el rango de 0.00V a 4.99V
esto representa la medición con una resolución de 10mV. Esto nos lleva a representar en 500
combinaciones de los bits de N (de 1024 posibles) el valor de 5.00V de la entrada. N [0..500]

Resolución = 5V/500 = 10mV  De antemano podemos deducir que no debe ser posible ya que al
usar 5V de VREF+ habíamos obtenido 4,88mV/paso

Resolución= =  VREF+=10,24V

Lo cual no es posible usando VDD=5V!!! El VREF no debe superar a VDD


Cálculo de VREF, VPaso o resolución
(cont)
Para superar la situación anterior (no viable) podemos dividir el Vin en 2, 4, etc…
con divisor de tensión, así se logran voltajes menores a obteniendo un VREF menor a
VDD que es lo que se busca:
Vin dividido en 2 (con divisor de tensión) Vin max=2,5V, haciendo una regla de 3
simple:
VREF = 1024 pasos
2,5V = 500 pasos  VREF = 1024*2,5V/500  VREF=5,12V

Lo cual no es posible usando VDD=5V!!! El VREF no debe superar a VDD


Cálculo de VREF, VPaso o resolución
(cont)
Seguimos buscando superar la situación anterior (no viable) así que podemos dividir
el Vin en 4 ahora también con divisor de tensión y así Vin max=1,25V, los cuales nos
representan los 500 pasos de la medición deseada, haciendo una regla de 3 simple:
VREF = 1024 pasos
1,25V = 500 pasos  VREF = 1024*1,25V/500  VREF=2,56V

Lo cual si es posible usando VDD=5V!!! Ya que VREF no supera a VDD


Arquitectura del
módulo ADC
Como se observa en la figura
(11-1 del Datasheet
PIC16F87XA) el módulo ADC
está compuesto por un solo
conversor Análogo a digital y
éste puede convertir desde 5
(28 pines) ú 8 (40/44 pines)
posibles canales.
El voltaje de referencia
positivo puede ser el VDD o un
Vin en el pin RA3 y el voltaje
de referencia negativo puede
ser el VSS (tierra) o un Vin en
el pin RA2. Fijando estos
voltajes se “configura” la
ventana de conversión.
Pasos para hacer la conversión A/D
(1/7)
1. Configurar el módulo ADC:
Configurar los pines análogos o digitales y los pines
utilizados como voltaje de referencia en el registro ADCON1
Seleccionar el canal a convertir en el registro ADCON0
Seleccionar el reloj de conversión en el registro ADCON0
Encender el módulo ADC en el registro ADCON0
Pasos para hacer la conversión A/D
(2/7)
2. Configurar la interrupción por ADC (si se requiere)
Borrar la bandera del módulo ADC ADIF
Poner en 1 el bit habilitador de interrupción análoga
ADIE
Poner en 1 el bit habilitador de periféricos PEIE
Habilitar el bit de interrupciones globales GIE
Pasos para hacer la conversión A/D
(3,4,5/7)
3. Esperar el tiempo de conversión adecuado
4. Dar inicio a la conversión con el bit GO/DONE en el registro
ADCON0
5. Esperar a que la conversión se complete de una de las dos
maneras:
Leyendo el bit GO/DONE si las interrupciones están inhabilitadas
Esperar la interrupción ADC.
Pasos para hacer la conversión A/D
(6,7/7)
6. Leer el resultado de la conversión de los registros
ADRESH:ADRESL. Se debe borrar el bit ADIF si es
necesario (en caso de tener habilitada la interrupción
A/D).
7. Para la siguiente conversión A/D ir al paso 1 o 2 según
sea necesario, el tiempo de conversión está dado por el
TAD
Registro ADCON0 (1/2)
Registro ADCON0 (2/2)
ADCON
1
Nota:
Ante cualquier RESET,
los pines que son
multiplexados con pines
análogos ( ANx ) serán
forzados a ser entradas
análogas.
Requisitos de la adquisición A/D
Tiempo de adquisición (TACQ)
En el cálculo del tiempo de adquisición de la señal a convertir influyen: el tiempo
de establecimiento del amplificador, la carga del condensador CHOLD, la
impedancia de la fuente (Rs), la impedancia de suicheo (RIC+RSS), la temperatura,
entre otras variables; se calcula por medio de las siguientes ecuaciones:
Reloj y selección del TAD en la conversión
A/D
El tiempo de conversión A/D por bit se
denomina TAD.
La conversión A/D para 10 bit requiere
un mínimo de 12 TAD
La fuente de reloj para la conversión
A/D se selecciona de acuerdo a la tabla
11-1 y TAD debe ser de al menos 1.6uS
Asegure el TRIS correspondiente a un
pin análogo para que sea de entrada.
Programación en el microcontrolador
Para la utilización en el Microcontrolador y partiendo del programa utilizado para la
visualización dinámica por interrupción del Timer, se realizan dos subrutinas ó
funciones:

1. Configuración del módulo ADC


2. Lectura de la respuesta del ADC (en Hexadecimal)

En el programa principal solamente se hace un llamado a la función de lectura del


resultado de la conversión de análoga a digital cada 500 mS.
Subrutina para inicializar el ADC

void Init_ADC()
{
ADCON0 = 0x81; //B'10000001' = CLK=Osc/32, CANAL 0, AD=ON
ADCON1 = 0x85; //B'10000101' = AN0 Y AN1 ANALOGOS, AN3 = VREF+
ADCON0bits.GO_DONE = 1; //INICIA CONVERSIÓN AD
}
Subrutina para la lectura del ADC
void Lee_ADC()
{
if (ADCON0bits.GO_DONE == 0)
{
DIG1 = ADRESL&0x0F; //Display de "Unidades"
DIG2 = ADRESL>>4; //Display de "Decenas"
DIG3 = ADRESH&0x0F; //Display de "Centenas"
DIG4 = 0;
ADCON0bits.GO_DONE =1; //inicia la lectura ADC
}
}
Programa principal : MAIN()
void main(void) {
TRISC = 0x00; //00000000 SEGMENTOS RC7...RC0
TRISD = 0x0F; // CONTROL DE ANODOS RD7...RD4
Init_TMR1(); //LLAMA FUNCION DE INICIALIZACION DEL TIMER E INTERRUPCIONES
Init_ADC(); //LLAMA A FUNCION DE INICIALIZACIÓN DEL MODULO ADC
while (1) {
Lee_ADC();
__delay_ms(500);
}
}
Conclusiones
La utilización del módulo de conversión Análoga a Digital se debe planear en dos
partes: la primera es la adecuación y cálculo del voltaje de referencia de acuerdo al
rango y escalas que se vayan a utilizar y el segundo en el ajuste y configuración de los
registros de configuración. Dependiendo de la impedancia y l naturaleza de la fuente de
la señal a medir, se debe involucrar algún tipo de amplificación de la señal.
Puesto que el módulo ADC entrega una respuesta Hexadecimal en dos registros, debe
realizarse la conversión de dicha respuesta uniendo el resultado ADRESH:ADRESL en
una sola variable de 16 bits cuando se realiza el programa en lenguaje C.
Paso seguido, si es necesario, se debe realizar la conversión de dicha variable a valores
decimales (codificando en BCD 8421) si se quiere visualizar o darle tratamiento
decimal.

También podría gustarte