Sei sulla pagina 1di 6

CAPÍTULO 6

CONVERSIÓN ANALÓGICA A DIGITAL

Introducción. Los microcontroladores PIC16F876 poseen un conversor A/D de 10 bits


de resolución y 5 canales de entrada (puerto A). La conversión A/D se realiza por el
método de aproximaciones sucesivas. La resolución que tiene cada bit procedente de la
conversión tiene un valor que es función de la tensión de referencia Vref, de acuerdo con
la siguiente fórmula:

Resolución = (Vref+ - Vref-) /1.024 = Vref /1.024


Si la Vref+ = 5 VDC y la Vref- es tierra, la resolución es de 4,8 mV/bit, por lo tanto, a
la entrada analógica de 0V le corresponde un valor digital de 00 0000 0000 y para la de
5V un valor digital igual a 11 1111 1111. La tensión de referencia determina los límites
máximo y mínimo de la tensión analógica que se puede convertir. El voltaje diferencial
mínimo es de 2 V.
Figura 6.1. Esquema electrónico equivalente de la entrada de un canal
del convertidor A/D del PIC16F876.
En la figura 6.1. se muestra el esquema electrónico equivalente a la entrada de un
canal del convertidor A/D del PIC16F876. Se observa que a través del canal de entrada
seleccionado, se aplica la señal analógica a un condensador de captura y mantenimiento
(sample and hold) y luego se introduce al conversor, el cual, proporciona un resultado
digital de 10 bits. Sin embargo el proceso conlleva a que la señal de entrada sufra una
serie de modificaciones producto de la impedancia de entrada propia del convertidor. Por
ejemplo: a la entrada del pin de conversión A/D la capacitancia equivalente es de 5Pf, al
mismo tiempo, dos diodos de “clamping” generalmente de alta velocidad limitan la
tensión máxima de entrada a 5.5 VDC introduciendo pequeñas deformaciones no lineales
en la señal de entrada. La impedancia de entrada de un canal del convertidor aprox. de
10 KOhm y al mismo tiempo, el canal tiene una corriente de fuga de aprox. 0.5 ua. La
señal de entrada es muestreada por la unidad de muestreo y retención a una velocidad
que varía dependiendo de ajustes proporcionados por el usuario. Fuente: Fuente: Tomado de www.mikroe.com

La tensión de referencia puede implementarse con la tensión interna de alimentación Son dos los registros más importantes involucrados en la conversión A/D. el ADCON0
VDD, o bien, con una externa que se introduce a través de los pines RA3/AN3/Vref+ y /o y el ADCON1. Como se explicó en capítulos anteriores, si se desea realizar una
RA2/AN2/Vref- conversión analógica digital por un puerto del microcontrolador (generalmente el puerto
A en los PIC) ¿Cómo hacerlo?. La respuesta siempre será la misma. A través de la
6.1. Registros asociados al conversor A/D configuración de los registros internos del microcontrolador, en este caso, el ADCON0 y el
ADCON1.
• ADRESH : Registro alto del resultado de la conversión A/D.
• ADRESL : Registro bajo del resultado del la conversión A/D. Básicamente la idea de la conversión analógica – digital es la digitalizar una señal de
• ADCON0 : Controla la operación del conversor A/D. entrada al pin del microcontrolador, la señal puede ser AC, DC ó AC+DC pero de tensión
• ADCON1 : Configura los Pines de E/S del conversor A/D. sólo positiva, ya que, el convertidor A/D no tiene la capacidad de convertir señales de
valor negativa. Esta señal es muestreada y convertida a un valor digital equivalente.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


33
Existen limitaciones teóricas y prácticas en cuanto a la máxima frecuencia de 6.3. El Registro ADCON1 (detalle de sus bits)
conversión de la señal, atenuación, rápida variación en el tiempo y ruido. No serán
temas que se aborden en este manual, sin embargo, el autor ha publicado en Internet
tópicos relacionados a la instrumentación virtual donde si se explica en forma detallada
tópicos avanzados de la conversión A/D. Puede consultar esta información en: www.roso-
control.com, en el tab relacionado a las clases impartidas sobre instrumentación virtual.

6.2. El Registro ADCON0 (detalle de sus bits)

Figura 6.2. Descripción de los bits que conforman el registro ADCON0


del convertidor A/D del PIC16F876. Figura 6.3. Descripción de los bits que conforman el registro ADCON1
Fuente: Manual técnico del PC16F876. del convertidor A/D del PIC16F876.
Fuente: Manual técnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


34
En la figura 6.4., se muestra la representación gráfica de las acciones que se realizan
en base a la configuración de los registros utilizados para la conversión A/D. La figura Luego arranca el proceso de conversión por aproximaciones sucesivas, se consume
representa la lógica de funcionamiento de un PIC16F887 en vez de un PIC16F876, sin un próximo TAD que no producirá resultados en la conversión y luego los 10 TAD
embargo, estos microcontroladores comparten más de un 95% de características necesarios para la digitalización de la señal. Una vez transcurridos los 12 TAD, el
comunes. resultado de la conversión A/D estará presente en los registros ADRESH y ADRESL.

Figura 6.5. Diferentes valores de conversión A/D en base a la Freq, del resonador.

Figura 6.4. Diagrama funcional para el módulo de conversión A/D de un PIC16F887.


Fuente: Fuente: Tomado de www.mikroe.com

6.4. Reloj para la conversión A/D

El tiempo de conversión A/D se define en unidades de TAD. El conversor A/D requiere


un mínimo de (12 ٠TAD) para una conversión de 10 bits, lo que equivale a 1.6 us. El reloj
para la conversión A/D se puede seleccionar a través del registro ADCON0 <7:6>.

La conversión A/D se realiza por el método de aproximaciones sucesivas, son en total


12 TAD, los tiempos de conversión necesarios para la obtención del resultado final. Como
de aprecia en la Figura 6.6. La conversión analógica – digital comienza con la activación
del bit de “GO” del registro ADCON0, allí se espera un primer TAD hasta que se
Figura 6.6. Proceso de conversión A/D en base a aproximaciones sucesivas.
desconecte el capacitor de “Hold” de la entrada analógica.
Fuente: Manual técnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


35
6.5. Resumen de Registros asociados a la conversión A/D

3. Se pueden realizar conversiones A/D a pesar de que el PIC este en modo


“SLEEP”, siempre y cuando, la selección del reloj para la conversión sea (RC).
4. Si sobre el microcontrolador se realiza una operación de ¨RESET¨, el conversor
A/D se apagará y la conversión será abortada, en ese momento todos los pines
del puerto A serán configurados como entradas analógicas.

6.7. Comandos en alto nivel para la conversión A/D

ADIN: Inicia la conversión analógica/digital por hardware y almacena el resultado de la


conversión en una variable. La resolución de la conversión es de 10 bits. Sintaxis:

variable = ADIN canal

Canal: variable o constante (0..3) que estable el pin analógico para uso como entrada al
Figura 6.6. Registros asociados a la conversión A/D y al puerto de entrada – salida A.
conversor. Existen cuatro pines de entrada analógica, son: AN0, AN1, AN2 y AN3.
Fuente: Manual técnico del PC16F876.
Otros ajustes necesarios por el convertidor A/D, se realizan a través de las declaraciones:
INTCON: Registro asociado a las interrupciones. GIE bit de habilitación de las
interrupciones globales. PEIE bit de habilitación de las interrupciones de los periféricos. DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC …

PIR1: Registro asociado a las interrupciones. ADIF bandera de ocurrencia de una 2_FOSC: rápido (oscilador/2)
interrupción por conversión A/D. 8_FOSC: medio (oscilador/8)
32_FOSC: lento (oscilador/32)
PIE1: Registro asociado a las interrupciones. ADIE bit de habilitación de la interrupción
64_FOSC: basado en el oscilador interno,
por conversión A/D.
valor por defecto = 64_FOSC.
ADRESH, ADRESL: Registros donde se almacena el valor de la conversión A/D.
DECLARE ADIN_RES 8, 10, 12. Bits de resolución,
ADCON0, ADCN1: Registros de configuración general asociados a la conversión A/D. valor por defecto = 10
TRISA: Registro de configuración del puerto A como entrada ó salida digital. DECLARE ADIN_STIME (0 .. 65535) ms. Tiempo para la
carga y descarga del capacitor de HOLD. Valor
PORTA: Como Salida, Registro que configura el valor lógico de los pines del puerto A.
por defecto = 50
Como Entrada, Registro que almacena el valor de entrada al puerto A.
Nota: El voltaje máximo sobre cualquier pin del PIC® no deberá exceder
nunca los 5 Vdc.
6.6. Otras Consideraciones importantes al realizar una conversión A/D
El comando ADIN, convierte un voltaje (0 a 5 Vdc) aplicado a un pin, en un valor
1. La máxima impedancia de entrada recomendada de la fuente analógica, a fin digital entre (0 y 1023) aplicado a una variable. La entrada puede ser en todo momento
de no afectar la exactitud de la conversión, no deberá ser mayor de 10 KΩ. escalada si se utiliza un voltaje de referencia externo Vref sobre el pin AN3. Si el voltaje
2. Después de cada conversión de deberá esperar un mínimo de tiempo de referencia aplicado al pin es de 2.5 VDC, se obtendrá el doble de resolución para el
equivalente a 2 ٠TAD, durante este tiempo el condensador interno de “Hold” no mismo conteo de (0 a 1023). El rango permitido de voltajes de referencia deberá estar
estará conectado a la fuente analógica de entrada. entre (1 y 5) Vdc, el cual, siempre deberá ser aplicado sobre el pin AN3.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


36
CAP_06_Ejemplo_01 (Conversión A/D utilizando comandos de alto nivel).

Utilizando el sistema de desarrollo iBOARD III, realice la conversión A/D utilizando el


canal 0 del convertidor (PORTA<0>) y el resultado muéstrelo en el IDE Serial
Comunicator del Compilador Basic® PROTON®. Este último es una utilidad del
compilador que permite visualizar datos enviados desde el microcontrolador. Más
adelante se describirá en detalles esta utilidad. Por ahora, nos concentraremos en la
conversión A/D. Para poder visualizar el valor de la conversión A/D, después de cargado
el programa en el microcontrolador PIC®, ver Figura 6.7., deberá seleccionar del menú
del compilador: View/Plugin tal como se muestra en la Figura 6.9.

' CAP_06_Ejemplo_01.bas
' Ejemplo básico de utilización del convertidor A/D
' ------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
XTAL = 20 ' Define la velocidad del resonador

TRISA = $FF ' Configura PORTA como Entradas


ADCON1 = $80 ' Configura PORTA<0> como ent. Analógica
Dim Valor As Word ' Variable de uso general
Declare ADIN_RES 10 ' Configura la resolución en 10 bits Figura 6.9. Menú de selección del IDE Serial Comuicator.
Declare ADIN_TAD 8_FOSC ' Configura la velocidad de conversión
Declare ADIN_STIME 50 ' Configura el tiempo de carga capacitor
' de hold del convertidor A/D
Main:
Valor = ADIn 0 ' Realiza la conversión A/D por el canal
' AN0, PORTA<0> y el resultado lo alma_
' cena en la variable valor.
' Envía la variable valor a través del puerto serial para que
' pueda ser visualizada por el IDE Serial comunicator...

HRSOut "Valor conv. A/D = ", Dec Valor, 13


DelayMS 1000
GoTo Main

Figura 6.7. Codificación del ejemplo básico de utilización del convertidor A/D.

Luego seleccione la velocidad de conexión del


puerto de comunicaciones a 2400 BAUD, esto se
muestra en la Figura 6.8. y presione sobre el
icono conectar. Deberá aparecer el resultado de
la conversión A/D como se muestra en la Figura
6.10.

<- Figura 6.8. Selección de la velocidad de


conexión entre el PIC y el
IDE Serial Comunicator. Figura 6.10. Visualización de la ejecución del programa CAP_06_Ejemplo_01.bas
a través del IDE Serial Comunicator.

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


37
6.8. Pasos a realizar para una conversión A/D con interrupciones CAP_06_Ejemplo_02 (Conversión A/D utilizando Interrupciones).
'CAP_06_Ejemplo_02.bas
1) Configurar el módulo Conversor A/D ' Ejemplo básico de utilización del conv. A/D con interrupciones
• Configurar los pines que actuarán como entradas analógicas, las que trabajan ' -------------------------------------------------------------------
Device = 16F876 ' Define el microcontrolador utilizado
como E/S digitales y las usadas para la tensión de referencia a través del XTAL = 20 ' Define la velocidad del resonador
registro ADCON1
• Seleccionar el reloj de la conversión a través del registro ADCON0 ADCON1 = %10000000 ' Configura PORTA como analógico
• Seleccionar el canal de entrada A/D a través del registro ADCON0 ADCON0 = %11000001 ' justificar el resultado a la derecha y
• Activar el módulo A/D a través del registro ADCON0 ' F_OSC/32, AN0, ADC -> Activo.
Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales
Symbol ADIE = PIE1.6 ' Bit habilit. interrupciones por ADC
2) Activar, si se desea la interrupción, escribiendo sobre los registros PIE1 y PIR1 Symbol ADIF = PIR1.6 ' Bit flag interrupciones por ADC
Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer.
• Borrar la bandera de interrupción por conversión A/D ADIF.
Symbol GO = ADCON0.2 ' Bit GO_/DONE del ADC
• Habilitar la interrupción por conversión A/D, poner a 1 el bit ADlE. Dim Valor As Word ' Variable de uso general
• Habilitar la interrupción global y la interrupción por periféricos, poner a 1 los bits On Interrupt GoTo ADC_INT ' Cuando ocurre una interrupción va a la
habilitadores GIE y PEIE. ' subrrutina "ADC_INT"
' PROGRAMA PRINCIPAL.
' -------------------------------------------------------------------
3) Tiempo de espera para que transcurra el tiempo de adquisición
Main:
ADIF = 0 ' Limpia el Flag de int. del ADC
4) Inicio de la conversión GIE = 1 ' Habilita interrupciones globales
• Poner a 1 el bit GO/DONE# a través del registro ADCON0. PEIE = 1 ' Habilita las int. de periféricos
ADIE = 1 ' Habilita la interrupción por ADC
GO = 1 ' Arranca la conversión A/D del ADC
5) Tiempo de espera para completar la conversión A/D y que puede detectarse:
• Por la exploración del bit GO/DONE#, que al completarse la conversión pasa a ' Envía la variable valor a través del puerto serial para que
valer 0. ' pueda ser visualizada por el IDE Serial comunicator...
• Esperando a que se produzca la interrupción si se ha programado, al finalizar la HRSOut "Valor conv. A/D = ", Dec Valor, 13
conversión. DelayMS 1000
• Aunque no se permita interrupción, el señalizador ADIF se pondrá a 1 al GoTo Main
finalizar la conversión. End

Disable ' Esta instrucción debe siempre ir al


6) Leer el resultado en los 10 bits válidos de los registros ADRESH:L y borrar el flag ó ' final del programa principal y antes
bandera de interrupción ADIF. ' de la sub_rutina de interrupción.

7) Para una nueva conversión regresar al paso 1) y 2). ' SUB_RUTINA DE INTERRUPCIÓN
' -----------------------------------------------------------------
• El tiempo de conversión por bit está definido por TAD. Se exige esperar un ADC_INT:
mínimo de 2 ٠ TAD para reiniciar una nueva conversión. ADIE = 0 ' Deshabilita la interrupción por ADC
Valor.LowByte = ADRESL ' Carga el valor de la conversión en la
Valor.HighByte = ADRESH ' Variable valor, byte alto y bajo.

ADIF = 0 ' Limpia el Flag de interrupción por ADC


DelayUS 50 ' Tiempo requerido para carga capacitor
Figura 6.11. Visualización de la ejecución del programa CAP_06_Ejemplo_02.bas ADIE = 1 ' Habilita la interrupción por ADC
a través del IDE Serial Comunicator. Nota. Debe producir GO = 1 ' Arranca de nuevo la conversión ADC
los mismos resultados que produjo el programa CAP_06_Ejemplo_01.bas Resume

Sistema de desarrollo para microcontroladores PIC®, iBOARD III.


38

Potrebbero piacerti anche