mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC vom ATmega16 liefert immer 0x3FF


Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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:
void init_vsupervisor()
{
  //Initialize ADC with Vcc as Vref and internal 1.22V on ch. 30
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(ADLAR);
  ADMUX |= _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);

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

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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. evtl. versehentlich Pullups am PORTA eingeschaltet?
2. min. 40µs Pause nach Umschalten des MUX vor der Messung?
3. Spannungsteiler i.O.? Messung mit Multimeter am Pin?

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die interne Referenz benutzt wird muss doch ein 100nF-Kerko gegen 
Masse an den Uref-Pin, oder?

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist _BV(ADSC) ?

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und mit 'left-adjusted' willst du nur 8 bit (ADCH) auslesen, sehe ich 
das richtig?

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sonic:

Ich bin eben nicht sicher, ob es den wirklich braucht. Aber kann ich 
nachher mal ausprobieren. Ausserdem will ich nur die oberen 8 Bit 
auslesen, ja.

@David:

Das mache ich alle 10ms in einer anderen Funktion.

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jep, hab' ihn schonmal gewechselt, genau gleiches Problem.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes:

Schon klar, dass das REFS1 weg muss, das hatte ich auch nur zum Testen 
drin um zu sehen, ob am ARef-Pin überhaupt irgendwas dran ist. Dem war 
nicht so.

Mach dir nur keinen Stress wegen dem Stepper, es eilt ja nicht ;)

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, es hat sich erledigt. Ich... ähm... naja... hatte eine Verbindung 
zwischen ARef und GND schäm
Verbindung entfernt und alles funktioniert :)

Trotzdem besten Dank an alle und noch ein schöner Rest vom Sonntag!
Philipp

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.