Hallo,
ich irgendwie erhalte ich von meinem Atmega 2560 nicht die Analogen Werte, die er eigentlich messen sollte.
Hatte ursprünglich das Programm auf einen ATMEGA 1684P laufen. Habe jetzt entsprechend etwas angepasst, vermute aber das ich was vergssen habe, was ich nicht selber sehe.

Habe für den ADC folgenden Quelltext:
Code:
#define wandlungen 3
void adcstart(void);
void adcstop(void);
uint16_t ReadAnalog(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 ReadAnalog(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;

}

Aufrufen führe ich dann wie folgt durch:
Code:
Variable = ReadAnalog("KANAL-NR");