Hallo,

ich bastle gerade mit dem RN-Atmega2560 herum, bekomme es aber nicht hin die ADC Kanäle auszulesen, habe etwas Angst da einfach so was rumzuprogrammieren damit das ding nicht den Geist auf gibt.

Ich verwende folgende Funktion zum auslesen (hat bei einemATMEGA8 funktioniert).

Die Zeilen im Code wo die Fragezeichen dahinter stehen, hab ich selbst hinzugefügt. (im Datenblatt gefunden).

Die Funktion gibt jedoch immer den konstanten Wert 510 komischerweise.

Wäre toll wenn jemand hilft.


Code:
uint16_t GetAdc(uint8_t pin) {

	// min Prescaler = µC Frequ / 200 KHz & max Prescaler = µC Freq. / 50 khz = min 80 & max 320
	ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); 				 		// Prescalar = 128
	ADCSRB = (1<<ACME); //??????????
   DIDR0=0x03; //?????????
	
   uint8_t i;
   uint8_t ii;
   uint16_t result;
   uint16_t ergebnis;
   ergebnis = 0;
   //    +------------ Dummy-Check ------------+
   i = 5;                              // i x Dummy-Check
   while(i){
      ADMUX = pin;                      	// Kanal waehlen
      ADCSRA |= (1<<ADSC);               // eine Wandlung "single conversion"
      while(!(ADCSRA & (1<<ADIF)));     // auf Abschluss der Konvertierung warten (ADIF-bit)
      result = ADCL + (ADCH << 8);       // Wandlungsergebnisse erfassen
      result = 0;                        // Zurücksetzen
      i--;
   }
   //    +------------- Ermittlung ------------+
   i = 10;
   ii = i;                              // Schnitt aus i Ergebnissen
   while(i){
      ADMUX = pin;                        // Kanal waehlen
      ADCSRA |= (1<<ADSC);               // eine Wandlung "single conversion"
      while(!(ADCSRA & (1<<ADIF)));         // auf Abschluss der Konvertierung warten (ADIF-bit)
      result = ADCL + (ADCH << 8);         // Wandlungsergebnisse erfassen
      ergebnis = ergebnis + result;         // Aufaddieren
      i--;
   }
   //    +-------- Umrechnung & Ausgabe -------+
   ergebnis = ergebnis / ii ;
   return ergebnis;
}