Estoy tratando de medir el voltaje de la batería de 30 V utilizando el ADC de un AVR Atmega8, el AVCC está conectado a 5 V.
He conectado un divisor de voltaje adecuado: R1 es 270k, R2 es 10k. El resultado que obtengo es incorrecto en absoluto, a 30V obtengo 23V.
La ecuación que uso es batteryvoltage = 5*1023/adcReading
.
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
unsigned int adcReading = 0;
adcReading = read_adc(0);
batteryVoltage = 5*1023/adcReading;