Все никак не мог найти минимальный простой код работы с АЦП в 10-и битном режиме. Пришлось взять максимально близкое и подправить.
Вот оно:
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Set ADC prescalar
ADMUX |= (1 << REFS0); // Set ADC reference to AVCC
// no left ajustment needed in 10 bit mode!
//ADMUX |= (1 << ADLAR); // Left adjust ADC result to allow easy 8 bit reading
// No MUX values needed to be changed to use ADC0
ADCSRA |= (1 << ADFR); // Set ADC to Free-Running Mode
ADCSRA |= (1 << ADEN); // Enable ADC
ADCSRA |= (1 << ADSC); // Start A2D Conversions
for(;;) {
if (ADCSRA&(1<<ADIF)){
//conversion is ready
// reset converstion complete flag
ADCSRA|=(1<<ADIF);
// read data, ADCL - first
t=ADCL;
r=ADCH;
r=(r<<8)+t;;
// now we have the result in 16 bit var 'r'
// output result
//itoa(r, buf,10);
//my44780_command_clear(&disp1);
//my44780_send_string(&disp1,buf);
_delay_ms(200);
}
}
Число в переменной r будет равно (или близко к) 1023, если измеряемое напряжением близко к AREF, и будет равно 0 при напряжении GND.
Расчет вольтажа прост. Например, AREF – 5В.
Тогда на единицу замера приходится: 5/1024=0.004883 В
Если мы получили число 512, то значит напряжение = 0,004883*512=2.5В
Например, подключив сенсор температуры и получив значение 95, что означает 0.46В, можно получить температуру по даташиту. Для моего сенсора температуры TMP37FT9 это указывает на температуру в 23 градуса С. Но на самом деле у меня в комнате 25.5 и эта погрешность может связана или с браком самого сенсора, или с тем, что я никак не защитил от помех все компоненты (ни одного конденсатора для защиты от помех) или, потому что я сначала перепутал полюса у сенсора, он разогрелся за далеко за 100 градусов, я обжог палец и возможно, в итоге, теперь он кривой.
Есть еще одна тонкость. На измерение влияет включен или выключен pull-up резистор на ноге! И если пул-ап включен, то возникает дополнительное напряжение, которое подтягивает измеряемое напряжение повыше. У меня пул-ап дает примерно 10 делений.

а для АЦП и линейного датчика необходимы коэффициенты типа таких y=kx+b где к тангенс b смещение.
Но, иногда и диод - вполне себе датчик!
ADIF is cleared by writing a logical one to the flag."
ADCSRA|=(0<<ADIF) не имеет смысла так как
N or 0 = всегда N