Moin moin!
Ich kaempfe immer noch mit dem ADC. Irgendwie beeinflussen sich die Kanaele untereinander. Wenn ich an drei ADCs gleichzeitig verschiedene Werte anlege, bekomme ich auf zweien den gleichen Wert, je einen der beiden erwarteten. Also zum Beispiel ist
ADC0=522,
ADC1=470,
ADC2=1023.
Das kommt raus, wenn ich nur den jeweiligen Block im Code benutze und den Rest auskommentiere. So wie es unten steht, kommt aber dann raus:
ADC0=522,
ADC1=1023,
ADC2=1023.
Ich krieg einfach nicht raus, wieso. Der Code unten muesste doch stimmen, oder? Kann vielleicht mal jemand seinen funktionierenden Code fuer das Auslesen von mehreren ADCs posten???
Danke,
Nils
Code:
void read_inputs(void) {
ADMUX = 0x02; // Kanal 0 auswaehlen
ADCSRA |= (1<<ADSC); // Messung starten
while(!(ADCSRA & (1<<ADIF))); // Warten bis ADSC==0
ADCSRA |= (1<<ADIF); // ADIF auf Null setzen !?!
rohsollwert = ADCL+ADCH*256; // Ergebnis auslesen
sollwert = rohsollwert/1023.0*100; // In Prozent umrechnen
ADMUX = 0x01; // Kanal 1 auswaehlen
ADCSRA |= (1<<ADSC); // Messung starten
while(!(ADCSRA & (1<<ADIF))); // Warten bis ADSC==0
ADCSRA |= (1<<ADIF); // ADIF auf Null setzen !?!
rohistwertx = ADCL+ADCH*256; // Ergebnis auslesen
istwertx = rohistwertx/1023.0*100; // In Prozent umrechnen
ADMUX = 0x00; // Kanal 2 auswaehlen
ADCSRA |= (1<<ADSC); // Messung starten
while(!(ADCSRA & (1<<ADIF))); // Warten bis ADSC==0
ADCSRA |= (1<<ADIF); // ADIF auf Null setzen !?!
rohistwerty = ADCL+ADCH*256; // Ergebnis auslesen
istwerty = rohistwerty/1023.0*100; // In Prozent umrechnen
}
Lesezeichen