Você está na página 1de 13

ADC

81

7 CONVERTIDOR ANALGICO DIGITAL


La familia PIC18 USB posee un convertidor Analgico Digital de 10 bits con 10 entradas en dispositivos de 28 pines y 13 entradas en dispositivos de 40/44 pines. Los siguientes pasos se deben seguir para realizar una conversin A/D: 1. Configurar el mdulo: Configurar pines analgicos. Configurar voltajes de referencia. Seleccionar el canal a muestrear: Canal0(AN0) a Canal12(AN12). Ajustar el reloj de conversin (TAD). Ajustar el tiempo de adquisicin. Activar el mdulo A/D.

2. Configurar la interrupcin A/D (opcional). 3. Iniciar la conversin. 4. Esperar a que termine de convertir, ya sea: Por medio de sondeo del bit GO/DONE. Esperando que se genere una interrupcin.

5. Leer el resultado del A/D 6. Repetir el procedimiento para la siguiente conversin.

Veamos ms a detalle cada uno de estos pasos.

7.1 Configurar el mdulo


7.1.1 Configurar pines analgicos
Como ya se explic anteriormente, los pines denominados ANx, pueden ser analgicos o pueden ser digitales. Si queremos usar un pin ANx como canal del ADC debemos configurarlo como entrada en su respectivo pin TRIS y como analgico usando los bits PCFG del registro ADCON1 (Figura 7-1), de acuerdo a la Figura 7-2.

M.C. Juan Ramon Terven Salinas

ADC

82

Figura 7-1. Registro ADCON1 [8]

Por ejemplo si queremos usar solo el Canal0 (AN0) podemos configurarlo como analgico de la siguiente manera: ADCON1bits |= 14;

Figura 7-2. Configuracin de pines ANx [8]

M.C. Juan Ramon Terven Salinas

ADC

83

7.1.2 Configurar voltajes de referencia


Una conversin A/D siempre se hace usando un voltaje como referencia. Los PIC18 permiten seleccionar entre 2 voltajes de referencia distintos: 1. La alimentacin positiva y negativa (VDD y VSS). 2. El voltaje en los pines VREF+ (RA3/AN3) y VREF-(RA2/AN2). Esta seleccin se hace por medio de los bits VCFG del registro ADCON1 (Figura 7-1), de acuerdo a la Figura 7-3.

Figura 7-3. Voltajes de referencia

Por ejemplo si se desean usar los pines VREF+ y VREF- como voltajes de referencia y el canal 0 como entrada analgica se puede hacer de la siguiente manera: ADCON1bits = 0x3E;

7.1.3 Seleccionar el canal a muestrear


El ADC tiene hasta 13 entradas analgicas pero solamente una se puede usar a la vez, entonces debemos especificar que Canal vamos a digitalizar. Para configurar esto, se usan los bits CHS3-CHS0 del registro ADCON0 como se muestra en la Figura 7-4. Siguiendo con el ejemplo anterior, si queremos digitalizar el canal0 (previamente ya se configur como entrada analgica AN0) podemos configurarlo de la siguiente manera: ADCON0 = 0; En la Figura 7-5 se muestra un diagrama del mdulo ADC resaltando los canales de entrada. M.C. Juan Ramon Terven Salinas

ADC

84

Figura 7-4. Seleccin del canal a muestrear [8]

Figura 7-5. Modulo ADC [8]

M.C. Juan Ramon Terven Salinas

ADC

85

7.1.4 Ajustar el reloj de conversin (TAD)


El proceso completo de digitalizacin de un voltaje analgico consiste de 2 pasos: la adquisicin (muestreo) y la conversin. La adquisicin toma un tiempo para que se cargue un capacitor que mantiene el voltaje constante durante el proceso de conversin. El proceso de conversin tiene una duracin de 11 periodos del ADC denominados TAD, de acuerdo al fabricante TAD debe durar mnimo 0.7s y mximo 25s. Esta duracin debe ser especificada en el programa. La duracin de TAD se configura en los bits ADCS2-ADCS0 del registro ADCON2, vea la Figura 7-6. Para una frecuencia de oscilacin de 48MHz configurar los bits ADCS2-ADCS0 en
48 10 6 FOSC/64 para dar un TAD de 64
1

= 1.33s

7.1.5 Seleccionar el tiempo de adquisicin


El tiempo de adquisicin tambin se debe configurar en funcin de TAD, el fabricante especifica que el tiempo de adquisicin debe ser mnimo 2.45s. Este tiempo de adquisicin se configura en los bits ACQT2-ACQT0 del registro ADCON2 (Figura 7-6). Por ejemplo para que la adquisicin dure 2 TAD y configuramos TAD como se menciona en el tema anterior, sera:

ADCON2 = 0x8E;
El ltimo bit del registro ADCON2 (ADFM) se usa para configurar la alineacin del resultado. Como el resultado de la digitalizacin es de 10 bits, este se almacena en 2 registros: ADRESL (parte baja) y ADRESH (parte alta), de tal manera que con el bit ADFM configuramos si queremos que el resultado quede justificado a la izquierda o justificado a la derecha.

M.C. Juan Ramon Terven Salinas

ADC

86

7.1.6 Activar el mdulo A/D


El mdulo ADC se activa por medio del bit ADON del registro ADCON0:
ADCON0bits.ADON = 1; // mdulo activado, listo para iniciar

Figura 7-6. Registro ADCON2 [8]

7.2 Funciones para uso del ADC


El lenguaje C18 de Microchip proporciona las funciones necesarias para la configuracin y el uso del ADC de los PIC18. En la Tabla 7-1 se muestran estas funciones y una breve descripcin.

M.C. Juan Ramon Terven Salinas

ADC
Tabla 7-1. Funciones de la librera adc.h [7]

87

La funcin BusyADC regresa un valor entero indicando si el ADC est ocupado realizando una conversin (regresa 1) o si no est ocupado (regresa 0).

La funcin CloseADC se usa para deshabilitar el mdulo ADC y la interrupcin asociada.

La funcin ConvertADC inicia una conversin, previamente se debe activar y configurar el mdulo por medio de la funcin OpenADC. Para saber si ya termino de convertir, podemos usar la funcin BusyADC o bien esperar que se genere una interrupcin.

La funcin ReadADC regresa el valor digital resultado de la conversin en un tipo int.

La funcin SetChanADC se usa para seleccionar o cambiar el canal de entrada a digitalizar. Ejemplo:
SetChanADC( ADC_CH0 );

7.2.1 Funcin OpenADC


Esta funcin es la ms compleja, ya que recibe muchos parmetros de entrada para configurar todo lo antes explicado. La Figura 7-7 muestra el prototipo y los argumentos de la funcin OpenADC.

M.C. Juan Ramon Terven Salinas

ADC

88

Figura 7-7. Funcin OpenADC [7]

M.C. Juan Ramon Terven Salinas

ADC

89

Ejemplo 7-1. Uso de ADC


El siguiente ejemplo demuestra el uso del mdulo ADC. En este ejemplo se realizan conversiones del canal 0 cada 100ms y se muestra el valor digital en el display LCD. Este cdigo lo puede probar con el diagrama de la Error! No se encuentra el origen de la referencia..

Figura 7-8. Prueba de ADC /* Uso del mdulo ADC * Se programa el Timer0 para producir una interrupcin cada 100ms * en la cual se realiza una conversin del ADC y se muestra en LCD */ #include <p18cxxx.h> #include <timers.h> #include <adc.h> #include <stdlib.h> #include "lcd.h" /** REMAPEO PARA BOOTLOADER **/ extern void _startup (void); #pragma code REMAPPED_RESET_VECTOR = 0x1000 void _reset (void) { _asm goto _startup _endasm

M.C. Juan Ramon Terven Salinas

ADC
} **/

90

// Prototipos de funcin de interrupcin void rsi_tmr0(void); // Variables Globales #pragma udata int valorADC; char strADC[7]; char strClean[] = "

";

// Inicio de programa #pragma code void main() { char cadena[] = "Probando ADC"; // configura LCD OpenLCD( FOUR_BIT & LINES_5X7); //Envia cadena "Probando LCD" putsLCD(cadena); // Activa timer0 de 16 bits, conteo de Tcy con prescaler de 1:64 OpenTimer0 (TIMER_INT_ON & T0_SOURCE_INT & T0_16BIT & T0_PS_1_64); WriteTimer0(0xB6C2); // Configura y activa el mdulo ADC OpenADC( ADC_FOSC_64 & // TAD = FOSC/64 ADC_RIGHT_JUST & // Resultado justificado a la derecha ADC_2_TAD, // Tiempo de adq 2 TAD ADC_CH0 & // Selecciona Canal0 (AN0) ADC_INT_OFF & // Sin interrupcin de ADC ADC_VREFPLUS_VDD & // Referencia+ VDD ADC_VREFMINUS_VSS, // Referencia- VSS 14 ); // AN0 como pin analgico // Habilitacin global de interrupciones INTCONbits.GIE = 1; while(1) { } }

// Vector de Interrupcin #pragma code high_vector=0x1008 void high_interrupt (void) { _asm GOTO rsi_tmr0 _endasm }

M.C. Juan Ramon Terven Salinas

ADC

91

#pragma code /****** RSI de TIMER0 *****/ #pragma interrupt rsi_tmr0 void rsi_tmr0 (void) { ConvertADC(); // Inicia conversin // Espera a que termine de convertir while(BusyADC()); valorADC = ReadADC(); // Lee resultado de ADC // Convierte resultado a cadena itoa(valorADC,strADC); // Envia cadena a display LCD SetDDRamAddr(0x40); putsLCD(strADC); putsLCD(strClean); // Reinicia el Timer0 WriteTimer0(0xB6C2); // Limpia la bandera de interrupcin INTCONbits.TMR0IF = 0; } Programa 7-1. Uso de ADC

M.C. Juan Ramon Terven Salinas

ADC

92

7.3 Sensor de Temperatura


Un sensor de temperatura es un dispositivo diseado para responder a cambios en temperatura o medir temperatura absoluta. Actualmente se usan 5 tipos de sensores de temperatura cuyas salidas pueden ser medidas elctricamente: 1. Termopares. 2. RTDs (resistance temperature detectors). 3. Termistores. 4. Sensores integrados. 5. Sensores infrarrojos.

7.3.1.1 Sensor LM35


En este curso usaremos el sensor LM35, el cual es un sensor de temperatura integrado con una precisin calibrada de 1C. Puede medir temperaturas en el rango que abarca desde -55 a + 150C. La salida es lineal y cada grado centgrado equivale a 10 mV en la salida. Caractersticas

Precisin de ~1,5C (en el peor caso), 0.5C garantizados a 25C. No linealidad de ~0,5C (peor caso). Baja corriente de alimentacin (60uA). Amplio rango de funcionamiento (desde -55 a + 150C). Bajo costo. Baja impedancia de salida.

El voltaje de salida es proporcional a la temperatura, en la escala Celsius. No necesita calibracin externa y es de bajo costo. Funciona en el rango de alimentacin comprendido entre 4 y 20 voltios.

M.C. Juan Ramon Terven Salinas

ADC

93

Como ventaja adicional, el LM35 no requiere de circuitos adicionales para su calibracin externa cuando se desea obtener una precisin del orden de 0.25 C a temperatura ambiente, y 0.75 C en un rango de temperatura desde 55 a 150 C. La baja impedancia de salida, su salida lineal y su precisa calibracin inherente hace posible una fcil instalacin en un circuito de control.

Figura 7-9. LM35

PRCTICA 6. Termmetro Digital con display LCD


Disee un termmetro digital que obtenga la temperatura de un LM35 y la muestre en grados centgrados y grados Farenheit en un display LCD.

M.C. Juan Ramon Terven Salinas

Você também pode gostar