El conversor Análogo Digital ADC

 Un poco de teoría:

El conversor análogo digital se utiliza para convertir señales análogas provenientes de sensores conectados a la entrada del microcontrolador en señales digitales para ser mostradas en indicadores tal como una pantalla lcd.

 

El microcontrolador PIC19F886 como la mayoría de los microcontroladores de la gama media cuenta un modulo conversor análogo digital de 8 a 10 bits selecionables por el programador.

La tensión de entrada puede variar entre  0 a 5volts si utilizamos el adc en el modo de 10bits significa que tenemos 10 bits para representar digitalmente la señal analógica de entrada, como 2^10=1024, tendremos los valores de entre 0 a 1024 para representar las tensiones de 0 a 5v.

para calcular la resolución usamos la siguiente formula:


Si consideramos una tensión de entrada Vin de 5v y 10bits tendremos:
 de este modo si la el valor leído es 511 511*0.0048 nos da un voltaje de 2.49v.


Configuración del ADC

EN CCS para controlar el conversor ADC se debe hacer mediante las siguientes instrucciones:

#device ADC= 10:
 Selecciona la cantidad de bits que usara el conversor (8 o 10).

SETUP_ADC(mode):
  Esta función configura el reloj del conversor, los parámetros que acepta son:
ADC_CLOCK_DIV_2
ADC_CLOCK_DIV_8
ADC_CLOCK_DIV_32
ADC_CLOCK_INTERNAL 

SETUP_ADC_PORTS(value):
  Esta función configura cuales pines del ADC serán analógicos y cuales digitales o alguna
combinación de ambos. Las constantes usadas son diferentes para cada chip. se debe revisar el archivo .h, ejemplo.
AN0_AN1_AN3   pines RA0, RA1 y RA3 analógicos y los restantes digitales.
ALL_ANALOG y NO_ANALOGS, estas constantes son válidas para todos los chips.

SET_ADC_CHANNEL(channel:
  Especifica el canal a utilizar por la función READ_ADC(). El número de canal empieza en 0. Es preciso esperar un corto espacio de tiempo después de cambiar el canal de adquisición, antes de que se puedan obtener lecturas de datos válidos.Ejemplo:
set_adc_channel(2); 



PROYECTO: Probar el funcionamiento del conversor análogo digital utilizando un potenciómetro que simula un sensor a la entrada del pin AN0 del PIC y visualizar la salida digital en un LCD.

Montaje en Proteus:

Codigo CCS: 
#include <16F886.h>
#device adc=10                               //10bits
#fuses nowdt
#use delay(clock=20000000)
#define LCD_DATA_PORT getenv("SFR:PORTC")    //lcd conectado al puerto C.
#include <lcd.c>

void main()
{
   int16 q;
   float p;
   setup_adc_ports(sAN0);              //AN0 en otros microcontroladores.
   setup_adc(adc_clock_internal);      //reloj interno.
   lcd_init();                         //inicializar el lcd.
   
   while(true)
   {
   set_adc_channel(0);                //canal 0.
   delay_us(20); 
   lcd_gotoxy(1,1);
   q=read_adc();
   p=(5.0*q)/1024.0;
   printf(lcd_putc," ADC = %ld",q);
   printf(lcd_putc,"\nVoltaje=%1.2fv",p);
   }
}

2 comentarios: