Hallo LC-HC,
wenn ich das richtig sehe, dann benötigst du nur eine 8-Bit-Auflösung vom Wandler (Du lässt die beiden untersten Bits weg). Aus diesem Grund hast du in der adc_init()-Funktion ja auch richtigerweise das Bit ADLAR im Register MUX gesetzt und liesst nur aus ADCH.

Nun setzt du in der Funktion adc_data(..) das Register ADMUX aber am Anfang vom case-1-Fall und am Ende vom case-2-Fall komplett auf 0 und löschst damit das Bit ADLAR.
Ich könnte mir vorstellen, dass dies merkwürdige Effekte gibt, da du ja nun nur noch die höchsten 2 Bit bei den nächsten Messungen in ADCH bekommst. (Ich bin mir sicher, dass die Bits 7 bis 2 in ADCH immer gelöscht werden, wenn ADLAR nicht gesetzt ist.)
Somit bekommst du dann immer nur sehr kleine Werte zurück.

Ein weiteres Problem in der Funktion scheint mir dein switch zu sein.
Ich schreib mal 'gekürzten' Code um zu zeigen was ich meine:
Code:
switch (channel)
{
case 1:
   tu dies hier wenn channel = 1 ist;
case 2:
   tu dies hier wenn channel = 2 ist;
   tu es aber auch wenn channel = 1 ist, da vor case 2 kein "break;" steht;
case default:
   break;
}
Es müsste eigendlich eher so aussehen:
Code:
switch (channel)
{
case 1:
   tu dies hier wenn channel = 1 ist;
   break;
case 2:
   tu dies hier wenn channel = 2 ist;
   break;
case default:
   break;
}
Um nur Bits in ADMUX zur Auswahl des ADC-Kanals zu setzten geht folgender Code:

char_variable = ADMUX;
char_variable &= ~0x0F; // Löscht die 4 rechten Bits (Kanalauswahl)
char_variable |= channel; // setzt die channel-Bits hinzu
ADMUX = char_variable;

oder ohne Variable:

ADMUX = (ADMUX & ~0x0F) | channel;

Ich hoffe, dass dir das erst einmal weiter helfen kann.