atmega8 adc4 problem

Gast #2191151
Lesenswert?

Hallo,

ich habe hier einen atmega8 und möchte ADC0 bis ADC4 benutzen.
ADC0 bis ADC3 liefern mir bereits gute und brauchbare Werte, aber wenn 
ich an ADC4 Ad-Wandeln will, passiert irgendwie nichts...

TWEN hab ich auf 0 gesetzt, daher sollte SDA vom TWI nicht mehr 
aktiviert sein...
TWCR &= ~(1<<TWEN);

ADC initialisieren:

ADCSRA |= (1<<ADEN); // ADC enable
ADCSRA = 0x86; // ADC enabled; no Free Running; no Interrupt; 
Clock-Prescaler: 64
ADMUX = 0xE0; // Referenz: AVcc; Left Adjusted; Channel 0

ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC)) {}
result = ADCH;

wenn ich jetzt z.B. so etwas mache...

ADMUX = (ADMUX & 0xE0) | (0x03 & 0x1F); // channel 3 (ADC4)
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC)) {}
result = ADCH; // hier steht richtiger Wert drin

ADMUX = (ADMUX & 0xE0) | (0x04 & 0x1F); // channel 4 (ADC4)
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC)) {}
result = ADCH; // hier steht immer der Wert von channel 3 drin...

...wird irgendwie bei channel 4 nicht gewandelt.

Weiß jemand wo mein Fehler liegt? Was ist da falsch?

ADMUX hab ich schon geprüft nachdem ich den entsprechenden Wert ins 
Register geschrieben hab... das passt auch!

Wäre über jeden sinnvollen Vorschlag dankbar!

Gruß vogael
Angehängte Dateien:
Gast #2191536
Lesenswert?

Warum hast Du Pullup Widerstände am ADC?
So misst Du nur 5V = 1023.

Warum liegt dein AREF-Pin an 5V? Normalerweise geht der über nen 
Kondensator an Masse.
Schau Dir mal die beiden Bilder an im Anhang.
Da siehtst Du wie man es richtig anschließt.
Die "Extended" Version sollte dabei bessere Werte liefern, durch den 
Tiefpass 2.Ordnung am Eingang der Referenz-Spannung.

Grüße
Angehängte Dateien:
Gast #2191664
Lesenswert?

funktioniert jetzt...
aus unerklärlichen Gründen hats heute morgen funktioniert!

Hab dann nochmal getestet, zwischen 4,5 V und 5 V läuft auch adc4 
problemlos, sobald die Spannung weiter sinkt tritt genau das oben 
beschriebene Verhalten auf. Bin mir eigentlich sicher das ich gestern 
ca. 5V dran hatte.

Egal, danke für eure Hilfe, aber am Code lags nicht...

Die Pull-Up-Widerstände sind dran weil ich jeweils einen CNY70 Sensor an 
den ADC-Pins habe und der gegen Masse zieht.

AREF hatte ich erst so wie auf deinen Bildern, aber da kam immer 1023 
raus! Hab dann versuchsweise mal AREF auf 5 V gelegt und dann 
funktionierte es wunderbar. Und die Extended Version steht so glaub ich 
auch im Datenblatt aber die ist hier garnicht nötig, die Sensoren müssen 
nur schwarz / weiß unterscheiden können, zwischenwerte sind mir relativ 
egal...

Aber danke für deine kritischen Fragen!

Gruß vogael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren