Ich weiss nicht was nicht funktioniert, aber das hier macht keinen Sinn, das Ergebnis wird immer 0 sein.
Code:
 buffer = ADCL | (ADCH<<8);       												// oder einfacher
        buffer = ADC;
Versuche mit Interrupt zu arbeiten, das ist einfacher als es aussieht.

Und für buffer wäre uint sinnvoller.