Estoy intentando leer un valor analógico utilizando el ADC de un microcontrolador ATSAM4E. El problema que tengo es que siempre lee 2047 o 2046 cuando el pin está conectado a GND y 4096 cuando está conectado a VCC. No lo tengo configurado en modo diferencial.
Aquí está el código para ello:
void adc_init(void){
struct afec_config afec_cfg;
afec_enable(AFEC0);
afec_get_config_defaults(&afec_cfg);
afec_init(AFEC0, &afec_cfg);
afec_set_trigger(AFEC0, AFEC_TRIG_SW);
afec_channel_enable(AFEC0, AFEC_CHANNEL_0);
}
//every 100ms
printf("CHANNEL 0: %d\r\n\n", afec_channel_get_value(AFEC0, AFEC_CHANNEL_0));
afec_start_software_conversion(AFEC0);
No sé cuál es el problema. El reloj ADC es de 6MHz, por lo tanto, esperar 100 ms entre conversiones debería ser suficiente para asegurar que esté terminado.
Es un poco sospechoso que el valor esté siempre tan cerca de la mitad. Lo menos que obtuve fue en 1790, pero estos valores "más pequeños" ocurren después de desconectar el pin de VCC.
¿Alguien tiene alguna idea de lo que podría ser?