Hallo,

hab jetzt nur mal überflogen,
was mir auffällt, ist die Zeile
i = ADCH
das ADC-Register ist ein 16-Bit Register, d.H. man muss immer beide auslesen, in der richtigen Reihenfolge, denn sonst kommen die Registerwerte duchreinander beim nächsten Auslesen !
Also am besten gleich einen Integer Wert verwenden.

Und ich denke die Pullups sollten in diesem Fall nicht aktiviert werden.