Forum: Mikrocontroller und Digitale Elektronik Probleme mit atmega644p ADC


von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Hi,

ich klemme grad am ADC eines m644p. Er misst zwar, aber nur nach einem 
Reset. Wenn ich zwischendrin die Spannung verstelle, ändert sich der 
Wert erst nach einem Reset.

Hier mal mein Code:
1
ADMUX &= ~(1<<REFS0)|~(1<<REFS1);  // clear bits REFS0, REFS1 == AREF, int Vref off
2
ADMUX &= ~(1<<MUX0)|~(1<<MUX1)|~(1<<MUX2)|~(1<<MUX3)|~(1<<MUX4);  // single ended input ADC0
3
ADCSRA |= (1<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);  // adc enable, prescaler 128 ==> 16mhz/128 = 0.125mhz sample rate
4
ADCSRA |= (1<<ADSC);  // start conversion
5
while(ADCSRA & (1<<ADSC));  // wait for conversion to complete
6
return ADCL;


Was mich auch wundert, ich habe vor dem ADC Eingang einen 1:10 
Spannugsteiler, AREF = 5V. 0xff bekomme ich bei 14,1V Am Eingang des 
Spannungsteilers heraus... Ist jetzt aber nich so wichtig, der ADC an 
sich sollte eher funktionieren :)

Ich hoffe, dass ihr mir hier helfen könnt.

von Thomas E. (thomase)


Lesenswert?

Nils S. schrieb:
> return ADCL;

Das ist ein 10-Bit Wandler. Der hat 2 Register, die ausgelesen werden 
müssen. Also: return ADC. Dann werden beide Register ausgelesen.

Wenn du die Register einzeln ausliest, musst du in der Reihenfolge ADCL, 
ADCH auslesen. ADCH muß immer gelesen werden, da damit der ADC wieder 
zurückgesetzt wird. Erst danachkannst du wieder neu messen. Deshalb 
misst er nur einmal bei dir.

mfg.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Aaaah, vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.