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 }







Zitieren

Lesezeichen