1. L Convertidor Análogo-Digital tiene 10
entradas análogas para los dispositivos de
28 patas y 13 para dispositivos de 40/44 patas.
El modulo permite convertir de una entrada
análoga 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 señal física y después
procesarla en modo digital ya
que lo único que entiende
cualquier computadora es
estados ceros y unos , después
de tener estos valores se pueden enviar a una
computadora para monitorear el estado físico
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 análoga, un voltaje
de entrada de 2.5 volts, y si nuestro convertidor
de análogo-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 librerías
listas para el uso del ADC, esta es una gran
ventaja ya que nos ahorrara mucho tiempo en
hacer la librería correspondiente del Modulo.
A continuación se explicara cada función 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
conversión.
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 señales físicas a
eléctricas para después ser procesadas en la computadora,
usando el Convertidor Análogo-Digital del Microcontrolador
PIC18F2550 podemos adquirir la variación que hace un
potenciómetro y después enviarla vía serial hacia la
computadora.
ܽ݀ܿ ൌ
ݏݐ݈ݒ ∗ ݂݁ݎ
ܾ݅ݏݐ ݀݁ ܿ݊݅ݏݎ݁ݒ݊
Formula 1:
Volts=Entrada de voltaje
Ref=Valor de referencia +positivo
Bits de conversión= 8 o 10 bits
2. MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Página 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 práctico para configurar el
convertidor, es el siguiente:
Para la realización de nuestra primera práctica
usando el ADC de un microcontrolador
PIC18F2550, se hará lo siguiente:
1. Configuraremos el ADC usando nada
más la entrada AN0 como entrada
análoga.
2. Configuraremos el USART a 19200
baud.
3. Al empezar el ciclo perpetuo, se enviara
la función de empezar conversión.
4. Esperar hasta que termine la
conversión.
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 práctica 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 &//Interrupción por ADC APAGDO
ADC_REF_VDD_VSS, //V+ref=VCC,V-ref=GND
1); //AN0=analogo,resto digitales
Configuracion Basica para uso del ADC
3. MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Página 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 análoga 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 análoga, 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 vía
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.
4. MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Página 40
El programa del Microcontrolador se presenta a continuación:
////////////////////////////////////////////////////////
// USO DEL ADC Y USART ////
//Autor: george.manson.69 ////
//Lugar: Mexico ////
//Compilador: HI TECH PIC18 (LITE MODE) ////
////////////////////////////////////////////////////////
#include<htc.h>
#include<stdio.h>
/////////////////////////////////////////////////////////////
//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<100;time++){
__delay_ms(10);
}
}
//////////////////////////////////////////////
//Para usar el printf
//////////////////////////////////////////////
void putch(unsigned char byte) {
/* Salida de un byte */
while(!TXIF) /* Estbalece que el regitro esta vacio*/
continue;
TXREG = byte;
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
//////////////////////////////
//FUNCION PRINCIPAL
//////////////////////////////
void main(void){
OSCCON=0x70;
NOP();NOP();NOP();NOP();
5. MODULO CONVERTIDOR ANALOGO-DIGITAL
Curso de Hi tech Compiler for PIC18 Página 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 &//Recepción 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= %urn",result); //Imprime
}
}
/*-------------------------------Fin-----------------------------------*/
Nota:Nota:Nota:Nota:
Siempre use el Circuito MAX232 para
adaptar niveles RS232 a TTL, ya que el
protocolo de comunicación RS232
contiene voltaje más 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.