Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Conversión Analoga A Digital: Danilo A Garcia Hansen
Conversión Analoga A Digital: Danilo A Garcia Hansen
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.
= = 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;
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
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.