Microcontroladores
Microcontroladores
Conversión Analógico-Digital
Un convertidor A/D produce un código digital de salida que es función del voltaje analógico de entrada y
del voltaje de referencia. El proceso de conversión A/D suele tomar un cierto tiempo y es generalmente
más complejo y largo que el proceso de conversión D/A. Existe una infinidad de métodos de conversión
A/D.
Un convertidor A/D o ADC (Analog to Digital Converter) tiene la forma general de la figura siguiente.
Diagrama en bloques de un convertidor digital analógico genérico
El voltaje de referencia Vref=Vref+-Vref- determina el fondo de escala. Además de la entrada analógica y la
salida digital, observamos dos señales importantes:
SC: Señal de inicio de conversión (Start Conversion). Cuando ésta se activa se inicia el proceso de
conversión de la señal de entrada. El ADC por lo tanto empieza a funcionar.
EOC: Señal de fin de conversión (End Of Conversion). Cuando el ADC ha finalizado de transformar el valor
analógico en uno digital, genera un pulso notificando que se ha finalizado el proceso. Justo después de
este pulso el ADC entra en un proceso inactivo.
El tiempo que toma el ADC para efectuar la conversión es el que necesita desde que se le da la orden de
inicio de conversión hasta que el dato está disponible a la salida y se le denomina tiempo de conversión
(tc). Este tiempo es propio de cada tipo de ADC, no existiendo un valor típico.
En la figura a continuación vemos como se relacionan las señales de inicio y final de conversión, el tiempo
de conversión y el dato digital de salida.
Cronograma básico de funcionamiento de un ADC
El pulso de inicio de conversión SC indica al ADC que inicie el proceso, poniéndolo en estado de actividad.
Al concluir la conversión, el ADC emite el pulso EOC indicando que ha concluido su labor y transfiere al
exterior el dato digital recién convertido.
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
Convertidor Analógico-Digital (ADC) del PIC18F2550
EL ADC del PIC18F2550 tiene la siguiente estructura:
Observamos que tiene 10 líneas de entrada analógica (el PIC18F4550 cuenta además con los pines AN5,
AN6 y AN7) multiplexadas, es decir, hay un solo ADC para todas las líneas. Esto significa que solo una línea
puede convertirse a la vez.
Se trata de un ADC de aproximaciones sucesivas con una resolución de 10 bits, es decir, las señales
analógicas de entrada se convierten en números binarios de 10 bits.
El ADC tiene asociados 5 registros:
ADRESH:ADRESL -> Resultado de la conversión (necesita dos registros de 8 bits)
ADCON0, ADCON1, ADCON2 -> Registros de control
Registro ADCON0:
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
Registro ADCON1:
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
Registro ADCON2:
Función de transferencia del ADC
Voltaje de referencia
El voltaje de referencia se puede seleccionar entre las líneas positiva y negativa del voltaje de alimentación
(VDD y VSS) o el voltaje en los pines RA3/AN3/VREF+ y RA2/AN2/VREF-/CVREF.
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
El ADC después de un reset
Si se produce un reset durante una conversión, todos los registros vuelven a su estado de reset y el ADC
se apaga, abandonando la conversión que estaba en marcha. Después de un reset, los registros
ADRESH:ADRESL contienen datos indeterminados.
El ADC en modo de bajo consumo (sleep)
El ADC puede funcionar mientras el microcontrolador está en modo de bajo consumo, para lo cual el reloj
de conversión debe obtenerse del oscilador RC interno del ADC.
Configuración de los pines analógicos
Todos los pines asociados al ADC pueden configurarse como entrada analógica o como pin de E/S digital.
Un pin configurado como entrada analógica debe tener su correspondiente bit TRIS como entrada; si se
deja como salida, el ADC convertirá el voltaje de salida presente en dicho pin (VOH o VOL). La operación del
ADC es independiente del canal seleccionado y de los bits TRIS.
A tener en cuenta:
- Cuando se lee los registros PORT, los pines configurados como canales de entrada analógicos se leen
como ceros.
- Si se aplica voltajes analógicos a un pin configurado como entrada digital, se puede producir un consumo
excesivo de corriente.
- El bit de configuración PBADEN en el registro de configuración 3H configura automáticamente los pines
del puerto B como analógicos o digitales después de un reset controlando cómo se comportan los bits
PCFG0 en el registro ADCON1 después de un reset.
Tiempo de adquisición
A la entrada del ADC hay un circuito de muestreo y retención (sample & hold) que lee el voltaje de la línea
seleccionada y lo ingresa al convertidor. Como en todo ADC, el circuito de entrada primero debe adquirir
adecuadamente el voltaje a convertir, por lo que después de configurar el ADC, es necesario habilitar el
tiempo necesario de adquisición antes de iniciar la conversión. El PIC18F2550 permite programar un
tiempo de adquisición desde el momento que se inicia el proceso de conversión con el bit GO/#DONE
hasta que se inicia el verdadero proceso de conversión. Cuando se concluye la conversión, el resultado se
almacena en el par de registros ADRESH:ADRESL, el bit GO/#DONE del registro ADCON0 se pone a cero y
el flag de interrupción ADIF se pone a 1. En el diagrama a continuación se puede observar la estructura de
una entrada analógica:
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
El tiempo de adquisición es necesario para que el capacitor de entrada CHOLD se cargue completamente
hasta el valor del voltaje presente en el canal de entrada analógico. La impedancia de fuente (RS) y la
impedancia del switch interno de muestreo (RSS) afectan el tiempo de adquisición. Se recomienda una
impedancia de fuente máxima de 2,5 kΩ.
Cada vez que se selecciona o cambia un canal analógico, éste debe ser muestreado por al menos el tiempo
mínimo de adquisición antes de iniciar la conversión. Para una impedancia de fuente RS=2,5kΩ a
temperatura ambiente el tiempo mínimo de adquisición aproximado es de 2,45 µs; se aconseja habilitar
un tiempo mayor a dicho mínimo para realizar una correcta adquisición. Cuando se inicia la conversión, el
capacitor CHOLD se desconecta del pin de entrada.
Selección y configuración del tiempo de adquisición
El tiempo de adquisición permite configurar si se utilizará un tiempo de adquisición predeterminado y
seleccionar dicho tiempo entre algunas opciones preestablecidas. En el registro ADCON2:
Los tiempos relativos al funcionamiento del ADC se miden en una unidad denominada TAD. Un TAD es el
tiempo necesario para convertir un bit del resultado. Por ejemplo, una vez iniciada, la conversión
analógico-digital para obtener el resultado de 10 bis tarda un total de 11 TAD.
El tiempo de adquisición se determina con los bits ACQT2:ACQT0 (ADCON2<5:3>) desde 2 TAD hasta 20
TAD.
Después de configurar el ADC, se pone a 1 el bit GO/#DONE para iniciar la conversión y entonces el ADC
continúa muestreando el voltaje de entrada por el tiempo de adquisición seleccionado y luego
automáticamente inicia la conversión.
Si se selecciona un tiempo de 0 TAD, el ADC interrumpirá el muestreo en cuanto se ponga a 1 el bit
GO/#DONE y el proceso de conversión iniciará inmediatamente, por lo que el usuario debe habilitar
manualmente un tiempo de adquisición desde que se selecciona el canal de entrada analógico hasta la
activación del bit GO/#DONE. Esta es la opción por defecto del ADC.
En cualquier caso, al concluir la conversión, el bit GO/#DONE se pone a 0, el flag de interrupción ADIF se
pone a 1 y el ADC empieza a muestrear el canal seleccionado nuevamente.
Selección del reloj de conversión (TAD)
La duración del TAD se puede seleccionar entre siete opciones:
• 2 TOSC
• 4 TOSC
• 8 TOSC
• 16 TOSC
• 32 TOSC
• 64 TOSC
• Oscilador RC interno del ADC
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
El tiempo TOSC es el período del oscilador del microcontrolador. Por ejemplo, para una f OSC=8 MHz, el
TOSC es de 1/8 MHz = 0,125 µs.
Para que la conversión A/D se realice correctamente, el TAD debe ser el menor posible pero mayor que el
TAD mínimo del dispositivo que para el PIC18F2550 es de aproximadamente 0,7 µs.
Pasos para realizar la conversión A/D con el PIC18F2550
1. Configurar el convertidor A/D:
- Configurar los pines analógicos y la referencia de voltaje (ADCON1)
- Configurar el tiempo de adquisición del ADC (ADCON2)
- Configurar el reloj de conversión TAD del ADC (ADCON2)
- Configurar la justificación del resultado (ADCON2)
2. Configurar la interrupción por ADC si se necesita:
- Borrar el flag ADIF
- Habilitar la interrupción por ADC (bit ADIE)
- Habilitar las interrupciones por periféricos (bit PEIE)
- Habilitar las interrupciones (bit GIE)
3. Realizar la conversión:
- Encender el convertidor A/D
- Seleccionar el canal analógico a convertir (ADCON0)
- Esperar el tiempo de adquisición adecuado si es que se ha seleccionado la opción manual.
- Iniciar la conversión poniendo a 1 el bit GO/#DONE (ADCON0)
4. Esperar la conclusión de la conversión:
- Esperando a que el bit GO/DONE se ponga a cero o
- Esperando la interrupción por ADC
5. Leer el resultado de la conversión ADRES=ADRESH:ADRESL y borrar el flag ADIF si fuera necesario.
6. Para una conversión subsecuente, volver al paso 1 o 2 según se requiera. Se necesita un tiempo mínimo
de 3 TAD antes de empezar la siguiente adquisición.
Proceso de conversión A/D
Las figuras siguientes muestran lo que ocurre después de poner a 1 el bit GO/#DONE. En la primera figura
se observa que pasa cuando se selecciona un tiempo de adquisición de 0 TAD. La conversión se inicia
después de la siguiente instrucción (luego de poner a 1 el bit GO/#DONE) para permitir que se pueda entrar
en modo de bajo consumo (Sleep) antes de empezar la conversión.
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
En esta segunda figura se observa lo que ocurre cuando se selecciona un tiempo de adquisición de 4 TAD.
Si el bit GO/#DONE se pone a 0 en medio de una conversión, ésta es abortada y el par de registros
ADRESH:ADRESL no serán alterados respecto del valor que contenían después de la última conversión
correcta. Después de que se completa o se aborta una conversión, se requiere esperar al menos 3 TAD
para iniciar la siguiente adquisición. Después de ese tiempo, la adquisición del canal seleccionado se inicia
automáticamente.
En ambas figuras se observa que hay un ciclo TAD para la descarga del capacitor de muestreo. Esto
garantiza una óptima adquisición para la siguiente conversión.
ADC con mikroC
mikroC ofrece la librería ADC que contiene las siguientes funciones:
ADC_Init(): Inicializa el ADC para funcionar con el reloj RC.
ADC_Init() enciende el ADC, configura los pines RA4:RA0 como analógicos, selecciona justificación a la
derecha, tiempo de adquisición manual (se debe hacer en programa) y configura el TAD para ser derivado
a partir del oscilador RC del propio ADC.
ADC_Init_Advanced: Inicializa el ADC para funcionar con un voltaje de referencia definido por el usuario.
Incluye las siguientes opciones:
_ADC_INTERNAL_REF: Ambas referencias a los valores internos VDD y VSS
_ADC__EXTERNAL_REF: Ambas referencias de voltaje conectadas a los pines Vref+ y Vref-.
_ADC__EXTERNAL_VREFL: Voltaje de referencia bajo conectado al pin Vref-.
_ADC__EXTERNAL_VREFH: Voltaje de referencia alto conectado al pin Vref+.
_ADC__INTERNAL_VREFL: Voltaje de referencia bajo conectado internamente a VSS.
Universidad Continental Microcontroladores Ing. Juan L. Merlo G
Microcontroladores
Microcontroladores
_ADC__INTERNAL_VREFH: Voltaje de referencia alto conectado internamente a VDD.
Aplicables a otros microcontroladores con capacidad de generar voltajes de referencia internos:
_ADC_INTERNAL_FVRH1: Voltaje de referencia alto fijado a 1,024V.
_ADC_INTERNAL_FVRH2: Voltaje de referencia alto fijado a 2,048V
_ADC_INTERNAL_FVRH4: Voltaje de referencia alto fijado a 4,096V
_ADC__INTERNAL_FVR: Voltajes de referencia conectados internamente a 4,096V y 2,048V
respectivamente.
_ADC_INTERNAL_FVRL2: Voltaje de referencia bajo conectado internamente a 2,048V.
_ADC_INTERNAL_FVRH3: Voltaje de referencia alto conectado internamente a 3,072V.
Ejemplo:
ADC_Init_Advanced(_ADC_EXTERNAL_VREFL | _ADC_INTERNAL_FVRH4);
ADC_Get_Sample(): Lee y devuelve el valor analógico del canal especificado. Lleva como argumento el
canal a leer en formato unsigned char.
Ejemplo:
DatoADC=ADC_Get_Sample(3); // Leer el valor analógico del canal 3 y guardar el resultado.
ADC_Read(): Inicializa el módulo ADC para funcionar con el reloj RC y luego lee y devuelve el valor
analógico del canal especificado. Lleva como argumento el canal a leer en formato unsigned char.
Ejemplo:
DatoADC=ADC_Read(0); // Configura el ADC y lee el valor analógico del canal 0.
Universidad Continental Microcontroladores Ing. Juan L. Merlo G