in deiner Schleife rufst du zwar adc_read auf, aber du weist das Ergenis deiner Variablen adc_wert nicht zu, der Wert wird nur VOR der Schleife einmal belegt und bleibt dann unberührt! Da du außerdem beim ersten adc_read die interrupts noch abgeschaltet hast, wird vermutlich auch kein Messergebnis entstehen, was die 0 erklären würde!
wofür zum Geier brauchst du das "overflowzahl" ? Der dürfte dir theoretisch niemals antworten! Da du die Bedingung if (overflowzahl==1) nie erfüllen kannst!!!
Außerdem kannst du dir das lesen des ADC-Wertes in deiner Init sparen!!! Der wert wird nur DANN nicht aktualisiert, wenn du das High- ohne das Lowbyte liest! Also erst ADCH dann ADCL und nicht andersrum! Wenn du garnichts liest intressiert das nicht, nur durch das lesen des Highbytes wird das Lowbyte gesperrt und das Lowbyte durch lesen desselbigen wieder freigegeben!
Das ADCSRA |=(1<<ADEN); im adc_read ist auch überflüssig, wenn der ADC einmal an ist, geht er nicht wieder aus bis du das Flag explizit löschst.
und dein Kanalwählen ist so auch nciht richtig: ADMUX = (ADMUX & 0b11000000) | (channel & 0b00111111);
denn Bit 7 und 6 bestimmen deine Analog-Referenz und dürfen nicht durch die Kanalwahl verändert werden!!!! Deswegen erst die Bits 0 bis 5 löschen und dann die channel Variable maskieren und abschließend ver-oder-n
Lesezeichen