Programando el Conversor Análogo Digital

El ucontrolador posee un susbsistemas ADC (Analog to Digiltal Converter) que permite trasnaformar una señal analogica en un numero dogital de 10 bits. Para ello se deben programar los siguientes registros:

El procedimiento para la inicializar el ADC es el siguiente:

La programacion se puede hacer de varios modos, una es tomado los bit individuales o considerando..





uns16 test_ADC() {
    // Convierte Canal AN-0
    uns16 dato_ana;
    ADCON0= 0b10000001;
    while(1)
     {
      GO=1;
      while(GO);
      dato_ana.high8 = ADRESH;
      dato_ana.low8 = ADRESL;
      return(dato_ana);
     }
}



void main()
{
   uns16 dato;
   init_adc();
   dato=test_ADC();
}




 Una Función más completa puede ser la siguiente

/*


*/


void init_ADC()
{

ADCS0=0;
ADCS1=1;

ADCS2=0;  //fosc/32
ADFM=1; // just a la Derecha
PCFG3=0; // Todos los canales de PORTA como analogicos
PCFG2=0;
PCFG1=0;
PCFG0=0;
}


/*
    Se le pasa el numero de canal y retorna un entero de 16 bit con el dato
    el canal va de 0 a 7   
*/

uns16 read_ADC(char canal)
{

    ADON=1;
    CHS0=canal.0;
    CHS1=
canal.1;
    CHS2=canal.2;
    while(1)
     {
      GO=1;
      while(GO);
      dato_ana.high8 = ADRESH;
      dato_ana.low8 = ADRESL;
      return(dato_ana);
     }
 
}


void main()
{
 uns16 dato;

 while(1)
 {
   init_ADC();
   dato=read_ADC(0);
 }
}