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");
Lesezeichen