3.9 Módulos Analógicos
El módulo del convertidor A/D dispone de las siguientes características:
- El convertidor genera un resultado binario de 10 bits utilizando el método de aproximaciones sucesivas y almacena los resultados de conversión en los registros ADC (ADRESL y ADRESH);
- Dispone de 14 entradas analógicas separadas;
- El convertidor A/D convierte una señal de entrada analógica en un número binario de 10 bits;
- La resolución mínima o calidad de conversión se puede ajustar a diferentes necesidades al seleccionar voltajes de referencia Vref- y Vref+.
CONVERTIDOR A/D
Aunque a primera vista parece muy complicado utilizar un convertidor A/D, en realidad es muy simple. De hecho resulta más simple utilizar un convertidor A/D que los temporizadores o módulos de comunicación serie.
El funcionamiento del convertidor A/D está bajo el control de los bits de cuatro registros:
- ADRESH Registro alto del resultado de la conversión A/D;
- ADRESL Registro bajo del resultado de la conversión A/D;
- ADCON0 Registro de control 0; y
- ADCON1 Registro de control 1.
Registros ADRESH y ADRESL
El resultado obtenido después de convertir un valor analógico en digital es un número de 10 bits que se almacenará en los registros ADRESH y ADRESL. Hay dos maneras de manejarlo: justificación a la izquierda y a la derecha que simplifica en gran medida su uso. El formato del resultado de la conversión depende del bit ADFM del registro ADCON1. En caso de que no se utilice el convertidor A/D, estos registros se pueden utilizar como registros de propósito general.
REQUERIMIENTOS DE ADQUISICIÓN A/D
Para que el convertidor A/D alcance su exactitud especificada, es necesario proporcionar un cierto tiempo muerto entre seleccionar una entrada analógica específica y la medición misma. Este tiempo se le denomina “tiempo de adquisición” y generalmente depende de la impedancia de la fuente. Se utiliza una ecuación para hacer cálculo de tiempo de adquisición con precisión, cuyo valor mínimo es de 20uS aproximadamente. Por consiguiente, para realizar una conversión con precisión, no se olvide este detalle.
RELOJ PARA LA CONVERSIÓN A/D
El tiempo necesario para realizar una conversión A/D cuyo resultado es 1 bit se define en unidades de TAD. Se requiere que sea como mínimo 1,6 uS. Para realizar una conversión completa de 10 bits se requiere un poco más tiempo de lo esperado, son 11 TAD. Como la frecuencia de reloj así como la fuente de conversión A/D son determinadas por software, es necesario seleccionar una de las combinaciones de los bits disponibles ADCS1 y ADCS0 antes de empezar a medir voltaje en una de las entradas analógicas. Estos bits se almacenan en el registro ADCON0.
FUENTE DE RELOJ DE ADC |
ADCS1 |
ADCS0 |
FRECUENCIA DE DISPOSITIVO (FOSC) |
20 Mhz |
8 Mhz |
4 Mhz |
1 Mhz |
Fosc/2 |
0 |
0 |
100 nS |
250 nS |
500 nS |
2 uS |
Fosc/8 |
0 |
1 |
400 nS |
1 uS |
2 uS |
8 uS |
Fosc/32 |
1 |
0 |
1.6 uS |
4 uS |
8 uS |
32 uS |
Frc |
1 |
1 |
2 - 6 uS |
2 - 6 uS |
2 - 6 uS |
2 - 6 uS |
Cualquier cambio de la frecuencia de reloj del microcontrolador afectará a la frecuencia de reloj de la conversión A/D, lo que puede perjudicar al resultado de la conversión A/D. En la siguiente tabla se muestran las características de la frecuencia del dispositivo. Los valores en las celdas sombreadas están fuera del rango recomendado.
¿CÓMO UTILIZAR EL CONVERTIDOR A/D?
Para llevar a cabo una conversión A/D sin problemas así como para evitar los resultados inesperados, es necesario considerar lo siguiente:
- El convertidor A/D no hace diferencia entre señales digitales y analógicas. Para evitar errores en medición o dañar el chip, los pines se deben configurar como en tradas analógicas antes de que empiece el proceso de conversión. Los bits utiliza dos para este propósito se almacenan en los registros TRIS y ANSEL (ANSELH);
- Al leer el estado de puerto con las entradas analógicas, el estado de los bits correspondientes se leerá como cero lógico (0), sin reparar en el valor del voltaje real en el pin; y
- Hablando en términos generales, la medición de voltaje en el convertidor está basado en comparar voltaje de entrada con una escala interna que tiene 1023 grados (210 - 1 =1023). El grado más bajo de esta escala representa el voltaje Vref-, mientras que el grado más alto se refiere al voltaje Vref+. La siguiente figura muestra los voltajes de referencia seleccionables así como sus valores máximos y mínimos.
Registro ADCON0
ADCS1, ADCS0 - A/D Conversion Clock Select bits (bits de selección de reloj de conversión A/D) selecciona la frecuencia de reloj utilizada para sincronización interna del convertidor A/D. Asimismo afecta a la duración de la conversión.
ADCS1 |
ADCS2 |
RELOJ |
0 |
0 |
Fosc/2 |
0 |
1 |
Fosc/8 |
1 |
0 |
Fosc/32 |
1 |
1 |
RC * |
* Señal de reloj se genera por el oscilador interno RC que está integrado en el convertidor.
CHS3-CHS0 - Analog Channel Select bits (bits de selección de canal analógico) selecciona un pin o un canal analógico para la conversión A/D, o sea para medir el voltaje:
CHS3 |
CHS2 |
CHS1 |
CHS0 |
CANAL |
PIN |
0 |
0 |
0 |
0 |
0 |
RA0/AN0 |
0 |
0 |
0 |
1 |
1 |
RA1/AN1 |
0 |
0 |
1 |
0 |
2 |
RA2/AN2 |
0 |
0 |
1 |
1 |
3 |
RA3/AN3 |
0 |
1 |
0 |
0 |
4 |
RA5/AN4 |
0 |
1 |
0 |
1 |
5 |
RE0/AN5 |
0 |
1 |
1 |
0 |
6 |
RE1/AN6 |
0 |
1 |
1 |
1 |
7 |
RE2/AN7 |
1 |
0 |
0 |
0 |
8 |
RB2/AN8 |
1 |
0 |
0 |
1 |
9 |
RB3/AN9 |
1 |
0 |
1 |
0 |
10 |
RB1/AN10 |
1 |
0 |
1 |
1 |
11 |
RB4/AN11 |
1 |
1 |
0 |
0 |
12 |
RB0/AN12 |
1 |
1 |
0 |
1 |
13 |
RB5/AN13 |
1 |
1 |
1 |
0 |
CVref |
1 |
1 |
1 |
1 |
Vref = 0.6V |
GO/DONE - A/D Conversion Status bit (bit de estado de la conversión A/D) determina el estado actual de de la conversión:
- 1 - La conversión A/D está en progreso.
- 0 - La conversión A/D ha finalizado. El bit se pone a cero automáticamente por hardware cuando la conversión A/D finaliza.
ADON - A/D On bit (bit de encendido A/D) habilita el convertidor A/D.
- 1 - Convertidor A/D está habilitado.
- 0 - Convertidor A/D está deshabilitado.
Vamos a hacerlo en mikroC...
/* Este código es un ejemplo de leer el valor analógico del canal 2 y de visualizarlo
en los puertos PORTB y PORTC como número binario de 10 bits. */
#include <built_in.h>
unsigned int adc_rd;
void main() {
ANSEL = 0x04; // Configurar AN2 como pin analógico
TRISA = 0xFF; // PORTA se configura como entrada
ANSELH = 0; // Configurar los demás pines AN como E/S digitales
TRISC = 0x3F; // Pines RC7 y RC6 se configuran como salidas
TRISB = 0; // PORTB se configura como salida
do {
temp_res = ADC_Read(2); // Obtener el resultado de 10 bits de la conversión AD
PORTB = temp_res; // Enviar los 8 bits más bajos al PORTB
PORTC = temp_res >> 2; // Enviar los 2 bits más significativos a los RC7, RC6
} while(1); // Quedarse en el bucle
}
Registro ADCON1
ADFM - A/D Result Format Select bit (bit de selección del formato del resultado de la conversión A/D)
- 1 - Resultado de conversión está justificado a la derecha. No se utilizan los seis bits más significativos del registro ADRESH.
- 0 - Resultado de conversión está justificado a la izquierda. No se utilizan los seis bits menos significativos del registro ADRESL.
VCFG1 - Voltage Reference bit (bit de configuración de voltaje de referencia) selecciona la fuente de voltaje de referencia bajo que se necesita para el funcionamiento del convertidor A/D.
- 1 - Voltaje de referencia bajo se aplica al pin Vref-
- 0 - Voltaje de alimentación Vss se utiliza como una fuente de voltaje de referencia bajo.
VCFG0 - Voltage Reference bit (bit de configuración de voltaje de referencia) selecciona la fuente de voltaje de referencia alto que se necesita para el fucionamiento del convertidor A/D.
- 1 - Voltaje de referencia alto se aplica al pin Vref+.
- 0 - Voltaje de alimentación Vdd se utiliza como una fuente de voltaje de referencia alto.
Para medir el voltaje en un pin de entrada por medio del convertidor A/D, se debe realizar lo siguiente:
Paso 1 - Configuración del puerto:
- Escribir un uno lógico (1) a un bit del registro TRIS, lo que resulta en configurar el pin apropiado como una entrada.
- Escribir un uno lógico (1) a un bit del registro ANSEL, lo que resulta en configurar el pin apropiado como una entrada analógica.
Paso 2 - Configuración del módulo de la conversión A/D:
- Configurar voltaje de referencia en el registro ADCON1.
- Seleccionar una señal de reloj de la conversión A/D en el registro ADCON0.
- Seleccionar uno de los canales de entrada CH0-CH13 del registro ADCON0.
- Seleccionar el formato de dato por medio de ADFM del registro ADCON1.
- Habilitar el convertidor A/D al poner a uno el bit ADON del registro ADCON0.
Paso 3 - Configuración de la interrupción (opcionalmente):
- Poner a cero el bit ADIF.
- Poner a uno los bits ADIE, PEIE y GIE.
Paso 4 - Tiempo de espera para que transcurra el tiempo de adquisición (aproximadamente 20uS).
Paso 5 - Inicio de la conversión poniendo a uno el bit GO/DONE del reg istro ADCON0.
Paso 6 - Esperar a que la conversión A/D finalice.
- Es necesario comprobar en el bucle de programa si el bit GO/DONE está a cero o esperar que se produzca una interrupción (deberá estar anteriormente habilitada).
Paso 7 - Lectura del resultado de la conversión A/D:
- Leer los registros ADRESH y ADRESL.
COMPARADOR ANALÓGICO
Aparte del convertidor A/D, hay otro módulo, que hasta hace poco ha sido incorpodo sólo en los circuitos integrados que pertenecen a los llamados “componentes analógicos”. Debido al hecho de que casi no hay ningún dispositivo automático complejo que en cierto modo no utilice estos circuitos, dos comparadores de alta calidad, junto con los componentes adicionales están integrados en el microcontrolador y conectados a sus pines.
¿Cómo funciona un comparador? Básicamente, el comparador analógico es un amplificador que compara la magnitud de voltajes en dos entradas. Dispone de dos entradas y una salida. Dependiendo de cuál voltaje de entrada es más alto (valor analógico), un cero lógico (0) o un uno lógico (1) (valores digitales) será la salida.
- Cuando el voltaje analógico en Vin - es más alto que el voltaje análogo en Vin+, la salida del comparador estará a un nivel digital bajo.
- Cuando el voltaje analógico en Vin+ es más alto que el voltaje análogo en Vin-, la salida del comparador estará a un nivel digital alto.
El microcontrolador PIC16F887 dispone de dos de estos comparadores de voltaje cuyas entradas están conectadas a los pines de E/S RA0-RA3, mientras que las salidas están conectadas a los pines RA4 y RA5. Además, hay una fuente de voltaje de referencia interna en el chip mismo, la que vamos a discutir más tarde.
Estos dos circuitos están bajo el control de los bits almacenados en los siguientes registros:
- CM1CON0 está en control del comparador C1;
- CM2CON0 está en control del comparador C2;
- CM2CON1 está en control del comparador C2;
FUENTE INTERNA DE VOLTAJE DE REFERENCIA
Uno de dos voltajes analógicos proporcionados en las entradas del comparador es por lo general estable e inalterable. Es denominado ‘voltaje de referencia’(Vref). Para generarlo, se pueden utilizar tanto una fuente de voltaje externa como una fuente de voltaje interna especial. El voltaje de referencia Vref se deriva después de seleccionar una fuente, por medio de una red en escalera que consiste en 16 resistencias, formando un divisor de voltaje. La fuente de voltaje es seleccionable por el bit VRSS del registro VRCON.
Además, la fracción de voltaje proporcionada por la red de resistencias es seleccionable por los bits VR0-VR3 y utilizada como voltaje de referencia. Vea la siguiente figura:
El voltaje de referencia del comparador dispone de dos gamas con 16 diferentes niveles de voltaje cada una. La selección de gama es controlada por el bit VRR del registro VRCON. El voltaje de referencia seleccionado CVref puede ser la salida al pin RA2/AN2 si el bit VROE se pone a uno.
Aunque la idea principal era obtener el voltaje de referencia variable para el funcionamiento de módulos analógicos, de ese modo se obtiene un simple convertidor A/D. Este convertidor es muy útil en algunas situaciones. Su funcionamiento está bajo el control del registro VRCON.
COMPARADORES E INTERRUPCIÓN
Siempre que haya un cambio del estado lógico en la salida de un comparador, el bit de bandera CMIF del registro PIR se pone a uno. Ese cambio también causará una interrupción si los siguientes bits se ponen a uno:
- El bit CMIE del registro PIE = 1;
- El bit PEIE del registro INTCON = 1; y
- El bit GIE del registro INTCON = 1.
Si una interrupción está habilitada, un cambio en la salida de un comparador cuando el microcontrolador está en modo de reposo, puede causar que el microcontrolador salga de reposo y vuelva a funcionar en modo normal.
FUNCIONAMIENTO EN MODO DE REPOSO (SLEEP MODE)
Si está habilitado antes de entrar en modo de reposo, el comparador se queda activo durante el modo de reposo. Si el comparador no se utiliza para "despertar" el dispositivo, el consumo de corriente se puede reducir en modo de reposo al apagar el comparador. Esto se lleva a cabo al poner a cero el bit CxON del registro CMxCON0.
Para que el comparador "despierte" al microcontrolador del modo de reposo, el bit CxIE del registro IE2 y el bit PEIE del registro INTCON deberán ponerse a uno. La instrucción que sigue a la instrucción Sleep siempre se ejecuta al salir del modo de reposo. Si el bit GIE del registro INTCON se pone a uno, el dispositivo ejecutará la rutina de servicio de interrupción.
Registro CM1CON0
Los bits de este registro están en control del comparador C1. Eso afecta principalmente a la configuración de las entradas. Para explicarlo con más claridad, vea la siguiente figura en la que se muestran sólo los componentes directamente afectados por los bits de este registro.
C1ON - Comparator C1 Enable bit (bit de habilitación del comparador C1) habilita al comparador C1.
- 1 - Comparador C1 está habilitado.
- 0 - Comparador C1 está deshabilitado.
C1OUT - Comparator C1 Output bit (bit de salida del comparador C1) es la salida del comparador C1.
Si C1POL = 1 (salida del comparador está invertida)
- 1 - Voltaje de entrada C1Vin+ es más bajo que el voltaje de entrada C1Vin-.
- 0 - Voltaje de entrada C1Vin+ es más alto que el voltaje de entrada C1Vin-.
If C1POL = 0 (salida del comparador no está invertida)
- 1 - Voltaje de entrada C1Vin+ es más alto que el voltaje de entrada C1Vin-.
- 0 - Voltaje de entrada C1Vin+ es más bajo que el voltaje de entrada C1Vin-.
C1OE Comparator C1 Output Enable bit (bit de habilitación de salida del comparador C1)
- 1 - Salida del comparador C1OUT está conectada al pin C1OUT *.
- 0 - Salida del comparador se utiliza internamente.
* Para habilitar que el bit C1OUT aparezca en el pin, se deben cumplir dos condiciones: C1ON = 1 (el comparador debe estar activado) y el bit correspondiente TRIS = 0 (pin se debe configurar como salida).
C1POL - Comparator C1 Output Polarity Select bit (bit de selección de polaridad de salida del comparador C1) habilita la inversión del estado de la salida del comparador C1.
- 1 - Salida del comparador C1 está invertida.
- 0 - Salida del comparador C1 no está invertida.
C1R - Comparator C1 Reference Select bit (bit de selección de la fuente de voltaje de referencia del comparador C1)
- 1 - Entrada no invertida C1Vin+ está conectada a la fuente de voltaje de referencia C1Vref.
- 0 - Entrada no invertida C1Vin+ está conectada al pin C1IN+.
C1CH1, C1CH0 - Comparator C1 Channel Select bit (bit de selección de canal del comparador C1)
C1CH1 |
C1CH0 |
ENTRADA C1VIN- DEL COMPARADOR |
0 |
0 |
Entrada C1Vin- está conectada al pin C12IN0- |
0 |
1 |
Entrada C1Vin- está conectada al pin C12IN1- |
1 |
0 |
Entrada C1Vin- está conectada al pin C12IN2- |
1 |
1 |
Entrada C1Vin- está conectada al pin C12IN3- |
Registro CM2CON0
Los bits de este registro están en control del comparador C2. Similar al caso anterior, la siguiente figura muestra un esquema simplificado del circuito afectado por los bits de este registro.
C2ON - Comparator C2 Enable bit (bit de habilitación del comparador C2) habilita el comparador C2.
- 1 - Comparador C2 está habilitado.
- 0 - Comparador C2 está deshabilitado.
C2OUT - Comparator C2 Output bit (bit de salida del comparador C2) es la salida del comparador C2.
If C2POL = 1 (salida del comparador está invertida)
- 1 - Voltaje de entrada C2Vin+ es más bajo que el voltaje de entrada C2Vin-.
- 0 - Voltaje de entrada C2Vin+ es más alto que el voltaje de entrada C2Vin-.
If C2POL = 0 (salida del comparador no está invertida)
- 1 - Voltaje de entrada C2Vin+ es más alto que el voltaje de entrada C2Vin-.
- 0 - Voltaje de entrada C2Vin+ es más bajo que el voltaje de entrada C2Vin-.
C2OE - Comparator C2Output Enable bit (bit de habilitación de salida del comparador C2)
- 1 - Salida del comparador C2OUT está conectada al pin C2OUT*.
- 0 - Salida del comparador se utiliza internamente.
* Para habilitar que el bit C2OUT aparezca en el pin, se deben cumplir dos condiciones: C2ON = 1 (el comparador debe estar activado) y el bit correspondiente TRIS = 0 (pin se debe configurar como salida).
C2POL - Comparator C2 Output Polarity Select bit (bit de selección de polaridad de salida del comparador C2) habilita la inversión del estado de la salida del comparador C2.
- 1 - Salida del comparador C2 está invertida.
- 0 - Salida del comparador C2 no está invertida.
C2R - Comparator C2 Reference Select bit (bit de selección de la fuente de voltaje de referencia del comparador C2)
- 1 - Entrada no invertida C2Vin+ está conectada a la fuente de voltaje de referencia C2Vref.
- 0 - Entrada no invertida C2Vin+ está conectada al pin C2IN+.
C2CH1, C2CH0 Comparator C2 Channel Select bit (bit de selección de canal del comparador C2)
C2CH1 |
C2CH0 |
ENTRADA C2VIN- DEL COMPARADOR |
0 |
0 |
Entrada C2Vin- está conectada al pin C12IN0- |
0 |
1 |
Entrada C2Vin- está conectada al pin C12IN1- |
1 |
0 |
Entrada C2Vin- está conectada al pin C12IN2- |
1 |
1 |
Entrada C2Vin- está conectada al pin C12IN3- |
Registro CM2CON1
MC1OUT Mirror Copy of C1OUT bit es una copia del bit C1OUT
MC2OUT Mirror Copy of C2OUT bit es una copia del bit C2OUT
C1RSEL Comparator C1 Reference Select bit (bit de selección de la fuente de voltaje de referencia del comparador C1)
- 1 - Voltaje seleccionable CVref se utiliza en la fuente de voltaje de referencia C1Vref.
- 0 - Voltaje de referencia fijo de 0,6V se utiliza en la fuente de voltaje de referencia C1Vref.
C2RSEL - Comparator C2 Reference Select bit (bit de selección de la fuente de voltaje de referencia del comparador C2)
- 1 - Voltaje seleccionable CVref se utiliza en la fuente de voltaje de referencia C2Vref.
- 0 - Voltaje de referencia fijo de 0,6V se utiliza en la fuente de voltaje de referencia C2Vref.
T1GSS - Timer1 Gate Source Select bit (bit de selección de la fuente de la compuerta del temporizador Timer1)
- 1 - Compuerta del temporizador Timer1 utiliza señal del pin T1G.
- 0 - Compuerta del temporizador Timer1 utiliza señal SYNCC2OUT.
C2SYNC - Comparator C2 Output Synchronization bit (bit de sincronización de salida del comparador C2)
- 1 - Salida del comparador C2 está sincronizada con un flanco ascendente de señal de reloj del temporizador Timer1
- 0 - Salida del comparador es una señal asíncrona.
Registro VRCON
VREN Comparator C1 Voltage Reference Enable bit (bit de habilitación de la fuente de voltaje de referencia del comparador C1)
- 1 - Fuente de voltaje de referencia CVref está encendido.
- 0 - Fuente de voltaje de referencia CVref está apagado.
VROE Comparator C2 Voltage Reference Enable bit (bit de habilitación de la fuente de voltaje de referencia del comparador C2)
- 1 - Fuente de voltaje de referencia CVref está conectada al pin.
- 0 - Fuente de voltaje de referencia CVref no está conectada al pin.
VRR - CVref Range Selection bit (bit de selección de gama de voltaje de referencia Vref)
- 1 - Fuente de voltaje de referencia se ajusta a producir baja gama de voltaje.
- 0 - Fuente de voltaje de referencia se ajusta a producir alta gama de voltaje.
VRSS - Comparator Vref Range selection bit (bit de selección de gama de voltaje de referencia Vref del comparador)
- 1 - Voltaje de referencia está en la gama de Vref+ a Vref-.
- 0 - Voltaje de referencia está en la gama de Vdd a Vss. (voltaje de alimentación).
VR3 - VR0 CVref Value Selection (selección de valor de voltaje de referencia)
If VRR = 1 (gama baja)
El voltaje de referencia se calcula por medio de la fórmula: CVref = ([VR3:VR0]/24)Vdd.
If VRR = 0 (gama alta)
El voltaje de referencia se calcula por medio de la fórmula CVref = Vdd/4 + ([VR3:VR0]/32)Vdd.
Pasos a seguir para utilizar apropiadamente los comparadores integrados:
Paso 1 - Configuración del módulo:
- Para seleccionar el modo apropiado, se deben configurar los estados de los bits de los registros CM1CON0 y CM2CON0. La interrupción debe estar deshabilitada durante el cambio de modo.
Paso 2 - Configurar la fuente de voltaje de referencia Vref interna (sólo si se utiliza). En el registro VRCON es necesario realizar lo siguiente:
- Seleccionar una de dos gamas de voltaje por medio del bit VRR.
- Configurar el voltaje de referencia Vref necesario por medio de los bits VR3 - VR0.
- Poner a uno el bit VROE si es necesario.
- Habilitar la fuente de voltaje de referencia Vref al poner a uno el bit VREN.
Fórmula utilizada para calcular el voltaje de referencia
VRR = 1 (gama baja)
CVref = ([VR3:VR0]/24)VLADDER
VRR = 0 (gama alta)
CVref = (VLADDER/4) + ([VR3:VR0]VLADDER/32)
Vladder = Vdd or ([Vref+] - [Vref-]) or Vref+
Paso 3 - Inicio del funcionamiento:
- Habilitar una interrupción al poner a uno los bits CMIE (registro PIE), PEIE y GIE (registro INTCON ).
- Leer los bits C1OUT y C2OUT del registro CMCON.
- Leer la bandera de bit CMIF del registro PIR. Después de haber sido puesto a uno, este bit se pone a cero por software.
Para sincronizar todos los procesos que se llevan a cabo dentro del microcontrolador, se debe utilizar una señal de reloj, mientras que para generar una señal de reloj, se debe utilizar un oscilador. Así de simple. El microcontrolador dispone de varios osciladores capaces de funcionar en modos diferentes. Y aquí es donde viene lo interesante...