pasos para conversion con interrupcion

6

Click here to load reader

Upload: fedesob

Post on 25-Jun-2015

718 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Pasos Para Conversion Con Interrupcion

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 33

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. 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. La tensión de referencia puede implementarse con la tensión interna de alimentación VDD, o bien, con una externa que se introduce a través de los pines RA3/AN3/Vref+ y /o RA2/AN2/Vref- 6.1. Registros asociados al conversor A/D

• ADRESH : Registro alto del resultado de la conversión A/D. • ADRESL : Registro bajo del resultado del la conversión A/D. • ADCON0 : Controla la operación del conversor A/D. • ADCON1 : Configura los Pines de E/S del conversor A/D.

Figura 6.1. Esquema electrónico equivalente de la entrada de un canal del convertidor A/D del PIC16F876.

Fuente: Fuente: Tomado de www.mikroe.com

Son dos los registros más importantes involucrados en la conversión A/D. el ADCON0 y el ADCON1. Como se explicó en capítulos anteriores, si se desea realizar una 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 configuración de los registros internos del microcontrolador, en este caso, el ADCON0 y el ADCON1. Básicamente la idea de la conversión analógica – digital es la digitalizar una señal de entrada al pin del microcontrolador, la señal puede ser AC, DC ó AC+DC pero de tensión 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.

Page 2: Pasos Para Conversion Con Interrupcion

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 34

Existen limitaciones teóricas y prácticas en cuanto a la máxima frecuencia de 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. Fuente: Manual técnico del PC16F876.

6.3. El Registro ADCON1 (detalle de sus bits)

Figura 6.3. Descripción de los bits que conforman el registro ADCON1 del convertidor A/D del PIC16F876.

Fuente: Manual técnico del PC16F876.

Page 3: Pasos Para Conversion Con Interrupcion

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 35

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 representa la lógica de funcionamiento de un PIC16F887 en vez de un PIC16F876, sin embargo, estos microcontroladores comparten más de un 95% de características comunes.

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 desconecte el capacitor de “Hold” de la entrada analógica.

Luego arranca el proceso de conversión por aproximaciones sucesivas, se consume un próximo TAD que no producirá resultados en la conversión y luego los 10 TAD necesarios para la digitalización de la señal. Una vez transcurridos los 12 TAD, el 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.6. Proceso de conversión A/D en base a aproximaciones sucesivas. Fuente: Manual técnico del PC16F876.

Page 4: Pasos Para Conversion Con Interrupcion

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 36

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

Figura 6.6. Registros asociados a la conversión A/D y al puerto de entrada – salida A. Fuente: Manual técnico del PC16F876.

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.

PIR1: Registro asociado a las interrupciones. ADIF bandera de ocurrencia de una interrupción por conversión A/D.

PIE1: Registro asociado a las interrupciones. ADIE bit de habilitación de la interrupción por conversión A/D.

ADRESH, ADRESL: Registros donde se almacena el valor de la conversión A/D.

ADCON0, ADCN1: Registros de configuración general asociados a la conversión A/D.

TRISA: Registro de configuración del puerto A como entrada ó salida digital.

PORTA: Como Salida, Registro que configura el valor lógico de los pines del puerto A. Como Entrada, Registro que almacena el valor de entrada al puerto A. 6.6. Otras Consideraciones importantes al realizar una conversión A/D

1. La máxima impedancia de entrada recomendada de la fuente analógica, a fin de no afectar la exactitud de la conversión, no deberá ser mayor de 10 KΩ.

2. Después de cada conversión de deberá esperar un mínimo de tiempo equivalente a 2 ٠TAD, durante este tiempo el condensador interno de “Hold” no estará conectado a la fuente analógica de entrada.

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 conversor. Existen cuatro pines de entrada analógica, son: AN0, AN1, AN2 y AN3.

Otros ajustes necesarios por el convertidor A/D, se realizan a través de las declaraciones: DECLARE ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC … 2_FOSC: rápido (oscilador/2) 8_FOSC: medio (oscilador/8) 32_FOSC: lento (oscilador/32) 64_FOSC: basado en el oscilador interno, valor por defecto = 64_FOSC. DECLARE ADIN_RES 8, 10, 12. Bits de resolución, valor por defecto = 10

DECLARE ADIN_STIME (0 .. 65535) ms. Tiempo para la carga y descarga del capacitor de HOLD. Valor por defecto = 50

Nota: El voltaje máximo sobre cualquier pin del PIC® no deberá exceder nunca los 5 Vdc. El comando ADIN, convierte un voltaje (0 a 5 Vdc) aplicado a un pin, en un valor digital entre (0 y 1023) aplicado a una variable. La entrada puede ser en todo momento escalada si se utiliza un voltaje de referencia externo Vref sobre el pin AN3. Si el voltaje de referencia aplicado al pin es de 2.5 VDC, se obtendrá el doble de resolución para el mismo conteo de (0 a 1023). El rango permitido de voltajes de referencia deberá estar entre (1 y 5) Vdc, el cual, siempre deberá ser aplicado sobre el pin AN3.

Page 5: Pasos Para Conversion Con Interrupcion

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 37

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 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.9. Menú de selección del IDE Serial Comuicator.

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

Page 6: Pasos Para Conversion Con Interrupcion

Sistema de desarrollo para microcontroladores PIC®, iBOARD III. 38

6.8. Pasos a realizar para una conversión A/D con interrupciones 1) Configurar el módulo Conversor A/D

• Configurar los pines que actuarán como entradas analógicas, las que trabajan como E/S digitales y las usadas para la tensión de referencia a través del registro ADCON1

• Seleccionar el reloj de la conversión a través del registro ADCON0 • Seleccionar el canal de entrada A/D a través del registro ADCON0 • Activar el módulo A/D a través del registro ADCON0

2) Activar, si se desea la interrupción, escribiendo sobre los registros PIE1 y PIR1

• Borrar la bandera de interrupción por conversión A/D ADIF. • Habilitar la interrupción por conversión A/D, poner a 1 el bit ADlE. • Habilitar la interrupción global y la interrupción por periféricos, poner a 1 los bits

habilitadores GIE y PEIE. 3) Tiempo de espera para que transcurra el tiempo de adquisición 4) Inicio de la conversión

• Poner a 1 el bit GO/DONE# a través del registro ADCON0. 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 valer 0.

• Esperando a que se produzca la interrupción si se ha programado, al finalizar la conversión.

• Aunque no se permita interrupción, el señalizador ADIF se pondrá a 1 al finalizar la conversión.

6) Leer el resultado en los 10 bits válidos de los registros ADRESH:L y borrar el flag ó

bandera de interrupción ADIF. 7) Para una nueva conversión regresar al paso 1) y 2).

• El tiempo de conversión por bit está definido por TAD. Se exige esperar un mínimo de 2 ٠ TAD para reiniciar una nueva conversión.

Figura 6.11. Visualización de la ejecución del programa CAP_06_Ejemplo_02.bas a través del IDE Serial Comunicator. Nota. Debe producir

los mismos resultados que produjo el programa CAP_06_Ejemplo_01.bas

CAP_06_Ejemplo_02 (Conversión A/D utilizando Interrupciones).

'CAP_06_Ejemplo_02.bas ' Ejemplo básico de utilización del conv. A/D con interrupciones ' ------------------------------------------------------------------- Device = 16F876 ' Define el microcontrolador utilizado XTAL = 20 ' Define la velocidad del resonador ADCON1 = %10000000 ' Configura PORTA como analógico ADCON0 = %11000001 ' justificar el resultado a la derecha y ' F_OSC/32, AN0, ADC -> Activo. Symbol GIE = INTCON.7 ' Bit habilit. interrupciones globales Symbol ADIE = PIE1.6 ' Bit habilit. interrupciones por ADC Symbol ADIF = PIR1.6 ' Bit flag interrupciones por ADC Symbol PEIE = INTCON.6 ' Bit habilit. interrupciones perifer. Symbol GO = ADCON0.2 ' Bit GO_/DONE del ADC Dim Valor As Word ' Variable de uso general On Interrupt GoTo ADC_INT ' Cuando ocurre una interrupción va a la ' subrrutina "ADC_INT" ' PROGRAMA PRINCIPAL. ' ------------------------------------------------------------------- Main: ADIF = 0 ' Limpia el Flag de int. del ADC GIE = 1 ' Habilita interrupciones globales 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 ' 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 End Disable ' Esta instrucción debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupción. ' SUB_RUTINA DE INTERRUPCIÓN ' ----------------------------------------------------------------- ADC_INT: 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 ADIE = 1 ' Habilita la interrupción por ADC GO = 1 ' Arranca de nuevo la conversión ADC Resume