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:
- Registro ADCON0 Activar
la conversión Inciar la conversión, seleccionar el canal y en
concjunto con el ADCON1 setear la frecuencia de operacion
- Registro ADCON1,
Pernite en conjunto con el adcon setera la frecuencia de operacion, configurar
los canales analogicos y la referencia, justificar la data digital.
- El Registro TRISA se deben configiurar
los pines respectivos como entrada.
El procedimiento para
la inicializar el ADC es el siguiente:
- Definitr entradas
analógias y tesion de referencia
- Seleccionar
el reloj de la conversión
- Seleccionar
canal de conversion
- Encender
el conversor
- Configurar
el registro A como entrada
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);
}
}