El CAD (Conversor Analógico Digital), permite medir señales analógicas en forma digital (no todos los micros PIC lo tienen).
Para ello el PIC cuenta con pines determinados en la arquitectura de su hardware por donde le llegará la señal analógica y para que funcione correctamente, estos pines deben configurarse como entradas analógicas.
El conversor analógico digital en el micro PIC, cuenta con un circuito que carga un condensador interno con la tensión analógica que le está llegando a la entrada analógica. Luego, la tensión almacenada en el condensador lo convierte en un número binario de 10 bits que representará la tensión almacenada en el condensador. Este número binario se guarda en sus registros ADRESH y ADRESL de 8 bits cada uno, pero estos actúan como un solo registro de 16 bits.
En el registro ADRESH se guardan los bits mas significativos y en el registro ADRESL se guardan los bits menos significativos, el número que representa la tensión almacenada en el condensador y guardado en forma binaria dentro de estos registros será de 10 bits para el PIC16F877A (la cantidad de bits de este número depende del conversor analógico digital del microcontrolador PIC utilizado).
El CAD necesita una tensión de referencia (interna o externa) para poder trabajar adecuadamente. Esta tensión de referencia Vref normalmente será la tensión a la cual trabaja el PIC, aunque por programa se puede elegir otra diferente; a la relación que hay entre la tensión de referencia Vref y el máximo número binario de 8 bits 28-1=255=11111111 o de 10 bits 210-1=1023=1111111111 que representará la tensión analógica se le conoce como resolución, por ejemplo para el caso del PIC16F877A se tendrá que la resolución del conversor analógico digital PIC será:
Resolución = Vref/(210-1) = Vref/1023
Si se toma como la Vref=5V que es la tensión adecuada a la que trabaja el PIC16F877A se tendrá que la resolución de su convertidor analógico digital PIC será:
Resolución = 5V/(210-1) = 5V/1023
de donde...
Resolución = 0,004887585533V ≈ 0,0049V luego para el caso del conversor de 10 bits con un voltaje de referencia de 5V será:
Resolución=4,9mV
La resolución indica en este caso que a la tensión de referencia de 5V se le ha partido en 1023 partes iguales y cada una de esas partes equivalen a aproximadamente 4,9mV, al utilizar esto en forma digital indicará que para un 0 será 0V, si el voltaje aumenta desde 0 en 4,9mV se tendrá un 1, si aumenta 2 veces 4,9mV se tendrá un 2, si aumenta 3 veces 4,9mV se tendrá un 3, si aumenta 4 veces 4,9mV se tendrá un 4 etc.
Esto quiere decir en este caso, que al utilizar el conversor analógico digital PIC, cada vez que la tensión analógica que llegue por el pin configurado como entrada analógica aumente en 4,9mV, el número que lo representa y almacenado en los registros ADRESH y ADRESL aumentará en 1, por ejemplo cuando la tensión analógica es 0, el número binario que lo representa será 0000000000, si la tensión analógica aumenta de 0 a 4,9mV el número binario que lo representa será 0000000001, si la tensión analógica aumenta de 4,9mV a 9,8=2*4,9mV el número binario que representa este valor será 0000000010, si la tensión analógica aumenta de 9,8V a 14,7=3*4,9mV el número binario que representa este valor será 0000000011, y así hasta que la tensión analógica se haga igual a la tensión de referencia, lo que ocurrirá cuando la tensión analógica aumente desde 0 de 4,9mV en 4,9mV unas 1023 veces lo cual es 1023*4,9mV que es un poquito mas de 5V porque la resolución se redondeo, el número binario que representa a los 5V será 1111111111.
Para trabajos mas complejos, el número binario que representará la tensión analógica la cual dependerá de la resolución, puede leerse desde los registros ADRESH y ADRESL, guardarlo en una variable y luego mediante operaciones matemáticas se puede hacer que represente el valor de la medida analógica que esta llegando a la entrada analógica del PIC.
Veamos como se configuran los registros del microcontrolador para que este entienda que queremos implementar el CAD...
Para utilizar los CAD en un PIC con PBP sin utilizar ADCIN, se necesita conocer y entender algo sobre los registros de memoria especiales que tiene el micro PIC y que estan relacionados con el ADC. Los registros que necesitamos conocer y trabajar son los siguientes (para más información sobre estos registros, consulte la hoja de datos, ya que no todos los micros disponen de CAD y o los mismos registros):
ADCON0 - registro de configuración ADC 0
ADCON1 - registro de configuración ADC 1
TRISA / TRISE - registro de estado del puerto (entrada / salida) para el puertoA (TRISE es para el puerto E, en los PIC de 40 pines solamente)
ADRESH - ADC registro para el resultado de la conversión, (byte alto o mejor dicho, mas significativo)
ADRESL - ADC registro para el resultado de la conversión (byte bajo o mejor dicho, menos significativo)
Los bits de registro en ADCON0 ADCON1 se utilizan para ajustar los diversos parámetros del convertidor de CAD.... Veamos como es el comportamiento segun la configuracion de estos registros:
Bits de ADCON0:
bits 7-6: selecciona Reloj. Le permite elegir si el reloj del ADC está determinada por el oscilador del PIC o por un oscilador RC interno.
bits 5-3: selección de canal. Le permite elegir qué entrada-A-D para que esté escuchando
bit 2: estado de la conversión...este bit si esta en alto inicia la conversión CAD. Este bit pasa automáticamente a bajo cuando la conversión termino, por lo que puede utilizarlo para ver cuándo leer los registros de resultados.
bit 1 - no se utiliza
bit 0 - AD on / off. Para encender o apagar el ADC.
Bits de ADCON1:
bit7 - formato del resultado: Hay 16 bits en los dos registros de resultados. La conversión ADC lleva 10 bits. Por lo tanto, no se utilizan 6 bits. El bit de formato del resultado le permite determinar si los primeros 6 bits del registro no se utilizan (justificando a la derecha), o los seis últimos bits del registro no se utilizan (justificando a la izquierda). La siguiente TABLA hace esto más claro. El número 1023 (en binario, 1111111111) es el resultado en ambos casos:
bits 6-4: no se utiliza
bits 3-0: Configuración del puerto definiendo cuales son entradas analógicas y cuales como entradas digitales, y que tensión de referencia se implementara.
Bits de TRISA / TRISE:
Estos son los bits que determinan si cada pin en un puerto determinado son entradas o salidas. El 1 indica que el puerto se va comportar como entrada, y el 0 como salida
TRISA =% 11111111 ;se configura como entrada a todos los pin de portA
TRISA =% 00000001 ;se configura PORTA.0 como entrada, el resto como salidas
TRISA =% 00000011 ;se configura PORTA.0 y PORTA.1 como entradas el resto como salidas
Una vez que configuramos los registros, ya está listo para leer el CAD. Para ello, se establece el inicio con un bit en alto, luego se espera a que este pase a nivel bajo, y a continuación, se pueden leer los registros con los resultados de la conversion. El siguiente ejemplo muestra cómo leer una entrada analógica y guardar ese resultado en la variable tipo word llamada ADVAR:
'**************************************************************************************
'* Name : CAD sin ADCin.PBP
'* Author : [Alejandro Martin Torres - prof.martintorres@educ.ar]
'* Notice : Copyright (c) 2015 [ETI - Educación Técnica Informal]
'* : All Rights Reserved
'* Date : 11/10/2015
'* Version : 1.0
'* Notes :
'***************************************************************************************
adVar var word 'Creamos una variable tipo word
TRISA = %11111111 ' Configuramos todo el puerto A como entradas
ADCON1 = %10000010 ' Configuramos justificacion derecha del resultado CAD
ADCON0 = %11000001 ' Configure and turn on A/D Module
; el puerto C lo vamos a usar para controlar el display LCD
DEFINE LCD_DREG PORTC ;bus del LCD DB4-DB8 - portC.4 en adelante
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTC ;pin RS LCD conectado a portC.2
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTC ;pin E lcd conectado a portC.3
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4 ;control del LCD en modo 4 bits
DEFINE LCD_LINES 2 ;display lcd de 2 lineas
Menu:
ADCON0.2 = 1 'ponemos bit en alto para inicio de la conversion
' no hacer nada hasta terminada la conversion
while ADCON0.2 = 1
pause 5
wend
adVar.highbyte = ADRESH 'mover byte mas significativo del resultado en adVar
adVar.lowbyte = ADRESL 'mover byte menos significativo del resultado en adVar
SEROUT2 PORTC.6, 16468, [DEC adVar, 10, 13]
pause 10
Goto menu
Para ver como trabajar nuestro CAD con el comando ADCin, podemos ir al siguiente ejemplo (click acá), donde intentare nuevamente explicarles desde cero todo el proceso de conversion analogica digital implementando matematicas sencillas.
Creo que hasta aqui, puede llegar a resultarnos algo sencillo adquirir una señal analogica con el CAD, pero en nuestro siguiente capitulo, veremos un poco de matematicas aplicadas a los microcontroladores para poder realizar las conversiones a numeros decimales y asi poder ver el dato correctamente... Nos vemos en el siguiente capitulo