Also was auf jeden fall besser wäre, wär wenn du "ergebnis = ADC" schreibst da das auselsen von 16bi registern nicht so einfach ist.

while(i){ ... wird nie gehen. sondern: ist auch eleganter
while((i--)>0) {
...
}
ich machs anders.

ergebnis = ergebnis / ii ; //Enelegant

(ADIF-bit) //was bedeutet das?
es reicht eine dummy zum warmlaufen und es reichen 3 wandlungen zum mittelwert bilden. sonst wartest ja so lange bis der wert da ist und dan stimmt er erst wieder nicht.

So schauts bei mir aus.
Code:
/*************************************************

AUTHOR: Thomas Grübler
Version: 0.1
Beschreibung: Erfasst werte am ADC Port

Beispielfunkton zum auslesen der Werte:
void beispiel(void)
{
  uint16_t adcval;
  adcstart();
  adcval = adcget(0); // MUX-Bits auf 0b0000 -> Channel 0 
  adcval = adcget(2); // MUX-Bits auf 0b0010 -> Channel 2 
  adcstop();
}

*************************************************/

#include <avr/io.h>
#include "adc.h"
#include "usart.h"
#include "nuetzliches.h"
#define wandlungen 3

void adcstart(void);
void adcstop(void);
uint16_t adcget(uint8_t kanal);

void adcstart(void) {
   ADCSRA |= ((1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2) | (1<<ADEN));//ADPS0-2(Vorteiler 128), ADEN (Enable)

   ADMUX = 0;
   ADMUX |= (1<<REFS1) | (1<<REFS0);
   
   ADCSRA |= (1<<ADSC);      // eine ADC-Wandlung als Dummy zum warmlaufen
   while ( ADCSRA & (1<<ADSC) ) {
   ;                    // auf Abschluss der Konvertierung warten
   }
}

void adcstop(void) {
	ADCSRA &= ~(1<<ADEN);
}

uint16_t adcget(uint8_t kanal) {
   uint8_t i = 0;
   uint16_t ergebnis = 0;

   ADMUX = kanal;                  // Kanal waehlen
   ADMUX |= (1<<REFS1) | (1<<REFS0);   // interne Referenzspannung nutzen

   while (i!=wandlungen) {		//Mehrere wandlungen und durchschnittswert ermitteln
   	ADCSRA |= (1<<ADSC);         // eine Wandlung "single conversion"
   	while ( ADCSRA & (1<<ADSC) ) {
   	;                  // auf Abschluss der Konvertierung warten
	}
	i++;
	ergebnis += ADC;
   }
   ergebnis = ergebnis/wandlungen;	//Durchschnittswert bilden

   return ergebnis;

}