ADC vom ATmega16 liefert immer 0x3FF

OP #470683
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe ein merkwürdiges Problem mit dem ADC meines ATmega16. Ich 
möchte ihn verwenden, um die Versorgungsspannung zu überwachen. Dazu 
schalte ich AREF intern auf AVcc und verwende Kanal 30 (Interne 1.22V 
Referenz). Bei einem ATmega8, bei dem ich sowas kürzlich gemacht hatte, 
funktionierte das bestens, aber hier lese ich immer nur 0x3FF, also alle 
Bits gesetzt. Ich habe an ARef keinen Kondensator, aber eigentlich 
sollte der ja nur das Rauschen unterdrücken, oder? Jedenfalls nehme ich 
später eh den Mittelwert von 256 Messungen, da kann der rauschen so viel 
er will. Allerdings müsste ich dazu erstmal ein gescheites Signal 
rausbekommen.
Ich schätze mal, dass ich irgendwo einen blöden Fehler gemacht habe, 
aber ich komm' nicht drauf...
Hier meine Initialisierung des ADCs:
1
void init_vsupervisor()
2
{
3
  //Initialize ADC with Vcc as Vref and internal 1.22V on ch. 30
4
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(ADLAR);
5
  ADMUX |= _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
6

7
  ADCSRA = _BV(ADEN) | _BV(ADIE);
8
  ADCSRA |= _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
9
}

Was ebenfalls komisch ist: Die Referenz ist weder AVcc (Wenn ich REFS1 
rausnehme), noch 2.56V mit obigem Code. Ausserdem habe ich auch mal an 
Kanal 0 gemessen. Das Ergebnis war das Selbe, was mich aber sehr 
verwundert: An PA0 (Bzw. am ganzen PortA) hängt ein Eingang von einem 
74AC138 und das funktioniert alles wunderbar weiter...
Was kann das sein?!

Wäre froh, wenn mir jemand helfen könnte. Danke im Voraus!

Grüsse
Philipp
OP #470826
Lesenswert?
• ▲
▼
Also:
1. PORTA ist komplett auf Ausgang geschaltet. Damit will ich ja auch nix 
messen, nur an Kanal 30, also an der internen 1.22V Referenz.
2. Ich habe es nicht gemessen, aber die Wandlung wird alle 10ms 
angekickt, die erste müsste eigentlich auch schon eine ordentliche 
Verzögerung haben. Kann ich aber nochmal überprüfen.
3. Spannungsteiler? Wie gesagt, ich messe ja die INTERNE Referenz. Was 
mir aber mehr Sorgen bereitet ist, dass der ARef-Pin dauernd offen ist, 
auch wenn ich ihn mit obigem Code intern auf AVcc hänge...
Gast #470845
Lesenswert?
• ▲
▼
Nunja, vielleicht hat's der ADC auch hinter sich? Haste 'n zweiten 
(neuen) zum Testen da? hatte auch mal das Problem dass er hin war, 
obwohl ich den µC im Gerät gelassen habe und nur neu programmiert.
#470865
Lesenswert?
• ▲
▼
Das Messen der Bandgap-Referenz gegen die interne Referenz zum Zwecke 
des Batterietests macht keinen Sinn, man muss schon gegen AVcc messen. 
REFS1 sollte also aus sein.

Mit Mega16 habe ich das noch nicht gemacht, da halte ich mich also 
zurück.

Hannes

P.S.: Bin noch nicht fertig mit den Tests zu Stepper und StepUp, dauert 
noch...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.