Помоги пожалуйста справиться с АЦП микроконтроллера ATmega328p
Идея такая.
Устройство работает от батарейки. Необходимо периодически проверять её заряд.
Поискав в интернете нашел статью и сообщение на форуме РадоКота
В целом все понятно. Единственное (для тестирования кода) на вывод AREF повесил переменный резистор чтобы менять напряжение (Сам МК пока запитан от 5в).
Но загвоздка в том что значение АЦП не меняется. Все время 1023...
Вот код. Может я что то в коде не так написал?
Код: Выделить всё
int main(void)
{
init_USART();
ADCSRA|=(1<<ADEN); //Включить АЦП
ADMUX=(1<<MUX3)|(1<<MUX2)|(1<<MUX1); //Подключаем внутренний источник напряжение в качестве измеряемого.
while(1)
{
uint32_t adc=0;
ADCSRA|=(1<<ADSC); //Старт АЦП
while(!(ADCSRA & (1<<ADSC))); //Ожидаем конец АЦП
adc=ADCW; //Сохраняем результат АЦП
printf("adc=%d\n", adc); //Печать значения АЦП
float VCC=0;
VCC=(1.3*1024)/adc; //Расчет напряжения
printf("VCC=%d.%d\n", (uint8_t)VCC,(uint8_t)(VCC*10)%10); //Печать напряжения
_delay_ms(1000);
}
}



