-
Hi,
sollte eigentlich so stimmen. Versuch doch mal das ganze folgendermaßen zu ändern:
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; // Ergebnis auslesen
rohsollwert |= (ADCH<<8);
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; // Ergebnis auslesen
rohistwertx |= (ADCH<<8);
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; // Ergebnis auslesen
rohistwerty |= (ADCH<<8);
istwerty = rohistwerty/1023.0*100; // In Prozent umrechnen
}
Ansonsten hätte ich auch keine Idee woran es liegen könnte...
MfG Kjion
-
Kann es vielleicht mit der Schaltung zusammenhaengen? Einer der drei Eingaenge ist der Mittelabgriff eines Potis an 5V, also fast ohne Fehlerquellen. Der kommt auch immer durch. Die anderen beiden sind die beiden Kanaele eines ADXL202. Und es ist immer immer einer der beiden ADXL-Kanaele, der sich "einem anderen Kanal anschliesst", anstatt seinen eigenen Wert durchzugeben...
Kann es sein, dass der ADC zum Beispiel einen zu geringen Eingangswiderstand hat und der ADXL dann Mist macht? Ist der empfindlich gegenueber sowas? Andererseits messe ich ja nacheinander, da sollte das eigentlich nix ausmachen...
Nils
-
ich denke nicht dass die ADC-Ports zu geringe Eingangswiderstände haben...
Versuch doch mal mit einem Voltmeter nachzumessen welche Spannungen die ADXL liefern ...
mfg
-
Hab ich schon gemacht, die Spannungen am ADXL sind so, wie sie sein sollen. Das muss irgendwie am AVR liegen. Hab bloss keine Ahnung wie...
Nils