PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Analog Kanal 8-16 bei Atmega 2560



xrzr
01.09.2015, 14:04
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:


#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:


Variable = ReadAnalog("KANAL-NR");

BMS
01.09.2015, 14:41
Hallo,
erste Anlaufstelle ist immer das Datenblatt http://pdf.datasheetcatalog.com/datasheets2/30/3055029_1.pdf
Im Kapitel Analog to Digital Converter - ab Seite 274ff - schauen wir uns die Registerdefinition von ADMUX und ADCSRB an, auf Seite 287f.
Genaugenommen sollte die Table 126 alle deine Fragen beantworten ;)
Wie die Bits für ADC-Kanal 8...15 eingestellt werden müssen (Single Ended) steht auf Seite 289.
Du musst also für diese Kanäle noch im ADCSRB das MUX5-Bit setzen ; und von "kanal" 8 abziehen, bevor auf ADMUX geschrieben wird.
Na dann noch gutes Gelingen beim Programmieren ;)
Grüße, Bernhard

xrzr
01.09.2015, 16:12
Es war zwar nicht ganz einfach (als halber Anfänger), aber konnte mir die Lösung iwie zusammen suchen aus den entsprechenden Seiten und anhand eines ähnlichen Beispiel.