L Convertidor Anlogo-Digital tiene 10
entradas anlogas para los dispositivos de
28 patas y 13 para dispositivos de 40/44 patas.
El modulo permite convertir de una entrada
anloga a un valor digital de 10-bit.
A veces es de mucha ayuda
tener un ADC en nuestros
proyectos ya que proporciona
un enlace entre un sensor que
mide una seal fsica y despus
procesarla en modo digital ya
que lo nico que entiende
cualquier computadora es
estados ceros y unos , despus
de tener estos valores se pueden enviar a una
computadora para monitorear el estado fsico
que mide tal sensor, esto puede ser enviado por
puertos en serie, paralelo o incluso por USB
este ltimo es mas preferible ya que todas las
maquinas ya tiene por default todas las PC.
El modulo ADC funciona de la siguiente manera:
Si tenemos en una entrada anloga, un voltaje
de entrada de 2.5 volts, y si nuestro convertidor
de anlogo-digital es de 10-bit, lo que vamos a
tener es un valor digital de 512, con la formula
siguiente se puede entender mucho mejor
(formula 1).
El Compilador Hi-Tech nos ofrece las libreras
listas para el uso del ADC, esta es una gran
ventaja ya que nos ahorrara mucho tiempo en
hacer la librera correspondiente del Modulo.
A continuacin se explicara cada funcin para el
uso del ADC:
char BusyADC(void);
Regresa el estado del ADC.
Regresa 1 si el convertidor est ocupado.
Regresa 0 si ya ha terminado la conversin.
void CloseADC(void);
Cierra el canal ADC por complete
void ConvertADC(void);
Empieza la Conversion de A/D
void OpenADC(unsigned char config, unsigned char config2,
unsigned char portconfig);
A veces es necesario transformar seales fsicas a elctricas para despus ser procesadas en la computadora, usando el Convertidor Anlogo-Digital del Microcontrolador PIC18F2550 podemos adquirir la variacin que hace un potencimetro y despus enviarla va serial hacia la computadora.
Formula 1:
Volts=Entrada de voltaje
Ref=Valor de referencia +positivo
Bits de conversin= 8 o 10 bits
MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Pgina 38
config: Une varias configuraciones usando el operador AND
A/D Frecuencia
ADC_FOSC_2 Fosc/2 ADC_FOSC_4 Hasta ADC_FOSC_64 Fosc/64 ADC_FOSC_RC Oscilador Interno
A/D Justificacion del resultado
ADC_RIGHT_JUST El resultado es de los bits de menor peso ADC_LEFT_JUST El resultado es de los bits de mayor peso
A/D Selector de Tiempo de Adquisicion
ADC_0_TAD 0 Tad ADC_2_TAD 2 Tad ADC_4_TAD 4 Tad ADC_6_TAD 6 Tad ADC_8_TAD 8 Tad ADC_12_TAD 12 Tad ADC_16_TAD 16 Tad ADC_20_TAD 20 Tad
config2: Une varias configuraciones usando el operador AND.
Canal: ADC_CH0 canal 0 hasta ADC_CH15 canal 15
A/D Interrupciones ADC_INT_ON ADC_INT_OFF
A/D Configuracion del Voltaje De referencia.
ADC_VREFPLUS_VDD VREF+ = AVDD ADC_VREFPLUS_EXT VREF+ = external ADC_VREFMINUS_VDD VREF- = AVDD ADC_VREFMINUS_EXT VREF- = external
Portconfig El valor del portconfig es cualquier valor desde 0 a 127 inclusive para PIC18F1220/1320 Y DE 0 a 15 para otros dispositivos.
unsigned int ReadADC(void);
Regresa el valor de ADC este valor es de 10-bit por default.
SetChanADC(unsigned int channel);
Establece el canal a leer
Un ejemplo prctico para configurar el
convertidor, es el siguiente:
Para la realizacin de nuestra primera prctica
usando el ADC de un microcontrolador
PIC18F2550, se har lo siguiente:
1. Configuraremos el ADC usando nada
ms la entrada AN0 como entrada
anloga.
2. Configuraremos el USART a 19200
baud.
3. Al empezar el ciclo perpetuo, se enviara
la funcin de empezar conversin.
4. Esperar hasta que termine la
conversin.
5. Leer el resultado y lo guardamos en
una variable.
6. Enviaremos el resultado a imprimir por
el serial.
El circuito a manejar en esta prctica es el
siguiente:
OpenADC(ADC_FOSC_RC &//Internal Oscilador Interno ADC_RIGHT_JUST&//Justificacion a la derecha ADC_20_TAD, //Tiempo de Adquisicion (TAD) ADC_CH0 &//CANAL 0 analogo ADC_INT_OFF &//Interrupcin por ADC APAGDO ADC_REF_VDD_VSS, //V+ref=VCC,V-ref=GND 1); //AN0=analogo,resto digitales
Configuracion Basica para uso del ADC
MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Pgina 39
Como vemos en nuestro circuito est conectado a un MAX232 para adaptar los niveles rs232 a TTL.
En la entrada RA0/AN0 que es la primera entrada anloga que contiene el microcontrolador hemos
conectado un POT de 10Kohm, si usted desea cambiar este componente no hay problema, mientras la
resistencia en el pin MCLR/vpp evita el reset del microcontrolador por hardware.
El pin VUSB puede ir conectado a masa directamente ya que no usaremos el regulador interno de 3.3 v
que contiene el pic.
Procure inicializar entradas y salidas de los PUERTOS
C Y A, ya que como es una entrada anloga, se debe
de configurar como entrada en el registro TRISA,
mientras que en el PUERTO C la entrada RC7/RX esta
recibiendo datos entonces se debe de configurar el
registro TRISC y poner como entrada tal pin.
Al tener todo conectado correctamente abrimos
cualquier programa que se pueda comunicar va
serial, estos programas pueden ser el Terminal.exe
o hercules_3-2-1.exe, solo conecte el COM
correcto y mismos BAUDIOS con los que se puso en
el Microcontrolador y listo.
MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Pgina 40
El programa del Microcontrolador se presenta a continuacin:
//////////////////////////////////////////////////////// // USO DEL ADC Y USART //// //Autor: george.manson.69 //// //Lugar: Mexico //// //Compilador: HI TECH PIC18 (LITE MODE) //// //////////////////////////////////////////////////////// #include #include ///////////////////////////////////////////////////////////// //Configuracion para trabajar Con oscilador interno de 8Mhz __CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC); ///////////////////////////////////////////////////////////// __CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K); __CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN); __CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS); __CONFIG(5,UNPROTECT); __CONFIG(6,UNPROTECT); __CONFIG(7,UNPROTECT); ////////////////////////////// //Frecuencia FOSC 8Mhz ////////////////////////////// #define _XTAL_FREQ 8000000 ////////////////////////////// //Variable Globales // ////////////////////////////// unsigned int result; ////////////////////////////// //FUNCION DE 1 SEG // ////////////////////////////// void DELAY1S(void){ unsigned char time; for(time=0;time
MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Pgina 41
////////////////////////////////////////////////////////////////////// // Configuracion de Puertos /// ////////////////////////////////////////////////////////////////////// TRISA=0x01; TRISC=0x80; /*---------------------Fin de Conf. Puertos-------------------------*/ ////////////////////////////////////////////////////////////////////// // Configuracion de ADC /// ////////////////////////////////////////////////////////////////////// OpenADC(ADC_FOSC_RC &//Internal Oscilador Interno ADC_RIGHT_JUST &//Justificacion a la derecha (10-bit) ADC_20_TAD, //Tiempo de Adquisicion (TAD) ADC_CH0 &//CANAL 0 analogo ADC_INT_OFF &//Interrupcion por ADC APAGDO ADC_REF_VDD_VSS, //V+ref=VCC,V-ref=GND 1); //AN0=analogo,resto digitales /*---------------------Fin de Conf. ADC------------------------------*/ ///////////////////////////////////////////////////////////////////////// Configuracion del USART /// /////////////////////////////////////////////////////////////////////// OpenUSART(USART_TX_INT_OFF &//Interrupcion por Transmision apagado USART_RX_INT_OFF &//Interrupcion por Recepcion Apagado USART_ASYNCH_MODE &//Modo Asincronico USART_EIGHT_BIT &//8-bit de transmision USART_CONT_RX &//Recepcin Continua USART_BRGH_HIGH, //Alta velocidad de baudios 25); //para alta Velocidad: // FOSC / (16 * (spbrg + 1)) // spbrg=(FOS/baud*16)-1 //Para baja Velocidad: // FOSC / (64 * (spbrg + 1)) /*---------------------Fin de Conf. USART----------------------------*/ /////////////////////////////////////////////////////////////////////// // FUNCION PRINCIPAL /// /////////////////////////////////////////////////////////////////////// while(1){ DELAY1S(); //espera 1 segundo ConvertADC(); //Empieza Conversion while(BusyADC()); //Espera a terminar result=ReadADC(); //lee resultado printf("V= %u\r\n",result); //Imprime } } /*-------------------------------Fin-----------------------------------*/
Nota: Nota: Nota: Nota:
Siempre use el Circuito MAX232 para
adaptar niveles RS232 a TTL, ya que el
protocolo de comunicacin RS232
contiene voltaje ms de +10 a -10 y si se
conectara directo quemara por completo
el microcontrolador.
Al conectar el MAX232 cambia esos
voltajes a niveles de 0 a +5 volts
perfecto para poder trabajar.