mal mein senf:

*adc auslesen mit result = ADC; damit du keine probleme mit den 16bit hast.
* result = ADCL;
result += (ADCH<<;
setzt den adcl auf den aktuellen wert. also kein aufaddieren. somitkannst du keinen mittelwert bilden. verwende besser:
result += ADC; ist eine einzige zeile, funktioniert und ist eleganter.
* while(ADCSRA & (1<<ADSC)); wird wegoptimiert. da sie ja nix tut. du kannst das wegoptimieren mit:
while(ADCSRA & (1<<ADSC)) { ; } verhindern.