Первое, что сразу бросается в глаза, у Вас не сбрасывается флаг
ADCSRA_ADIF, поэтому
while() пролетает насквозь при первом же заходе и вообще получается каша.
Ну, у ATmega16 он сбрасывался, так как команда
sbi для выполнения
ADCSRA_ADSC = 1; у старых AVR была RMW со всем байтом IO-регистра и
ADIF сбрасывался обратной записью прочитанной из него единицы.
Цитата(Документация на ATmega16, раздел I/O memory)
Some of the Status Flags are cleared by writing a logical one to them. Note that the CBI and SBI instructions will operate on all bits in the I/O Register, writing a one back into any flag read as set, thus clearing the flag.
А у tiny44A, как у всех новых, не сбрасывается:
Цитата(Документация на ATtiny44A, раздел I/O memory)
Some of the Status Flags are cleared by writing a logical one to them. Note that CBI and SBI instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags.
Во вторых, читать только младший байт
ADCL вроде как нельзя (я просто не пробовал

)
Цитата(Документация на ATtiny44A, раздел ADCL and ADCH – ADC Data Register)
When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently, if the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read ADCH. Otherwise, ADCL must be read first, then ADCH.
Т.е. если читать только
ADCL, то АЦП-то там может что-то и делает, но результат в пару
ADCH:ADCL не переносится.
Это актуально и для других AVR, что ставит под сомнение достаточную степень «подобности» исходника, работавшего на ATmega16.