Forum: Mikrocontroller und Digitale Elektronik ADC Wandlung mit Timerinterrupt


von Hubert Papst (Gast)


Lesenswert?

Hallo,
Zielsetzung:
Einlesen von zwei AD-Kanälen in zeitlich definierten Abständen.
Vorgehensweise:
Tim0 wird mit Vorteiler (1024) frei laufend gestartet. In der 
Timer0OverFlow-Interrupt Routine wird der ADMUX auf Kanal0 gestellt und 
eine Single-A/D Wandlung gestartet. Nach Abfrage von ADIF Bits wird der 
Wert eingelesen und in den RAM gelegt. Anschließend wird ADMUX auf 
Kanal1 gestellt, auf ADIF gewartet und dann wieder Wert eingelesen und 
in den RAM geschreiben. Ende von INT-Routine.

Der Fehler, der dabei auftritt ist, das in beiden RAM-Plätzen die 
Wandlungswerte von ADKanal 1 sind und nicht wie erwartet im ersten 
RAM-Platz der Wert von Kanal 0.

Was ist an dieser Vorgehensweise falsch?

von Tilman Wenning (Gast)


Lesenswert?

Ich denke du hast einen AVR ? Beim 80C535 startest du einen 
Singel-Wandlungsvorgang durch beschreiben der Referenzspannungsmatrix.. 
(Keine Ahnung wie das Ding jetzt heißt, auswendig kenne ich es noch 
nicht)
Das ist ein 8 bit Register wo mit den unteren 4 bits die Referenznull 
angegben wird und mit den oberen 4 bit die Höhe der Referenzspannung 
eingestellt wird.
Und eben ein Beschreiben dieses Registers löst den eigentlichen 
Wandlungsvorgang aus.
Viellecht is des beim AVR genauso.

Bis denne,

Tilman

von Hubert Papst (Gast)


Lesenswert?

habe einen AVR Mega8 (hab vergessen dies zu erwähnen).
Ist beim AVR auch so ähnlich. Ist aber anscheinend nicht das Problem. 
Das Ding wandelt ja, nur immer den Kanal 1 und nicht wie gewünscht 
zuerst den Kanal 0 und dann den Kanal 1.

von Hubert Papst (Gast)


Lesenswert?

Bin jetzt draufgekommen, das nach dem auswählen des Kanals durch 
schreiben in das ADMUX-Register, der AD eine Zeit braucht, bis er den 
neuen Wert übernommen hat.
Warum weiss ich nicht. Laut Datenblatt müßte er den Wert sofort 
übernehmen.

von Hubert Papst (Gast)


Lesenswert?

Gibt es einen Softwaresimulator, der auch den A/D-Wandler im Mega8 
berücksichtigt? Weiss hier jemand was. Das wäre sehr nützlich.

von mikki merten (Gast)


Lesenswert?

Einen Software Simulator der den A/D-Wandler komplett nachbildet ist bei 
den Standard Entwicklungsumgebungen nicht enthalten.

von wolfram (Gast)


Lesenswert?

es gibt da noch einen free-run-modus das heisst die wandlung laeuft 
staendig und immer wenn ein wert da ist wird der interrupt 
ausgeloest,auf die auslesereihenfolge ist noch zu achten und das die 
naechst wandlung schon laeuft wenn der int laeuft also erst beim 
uebernachsten ist der wert nach der kanalumstellung da ,so war es 
zumindest beim 4433.

von thkaiser (Gast)


Lesenswert?

Ich hatte bereits das gleiche Problem. Irgendwie hinkt das Ergebnis des 
A/D-Wandlers hinterher, irgendwann habe ich es aufgegeben den Grund zu 
hinterfragen und habe per Software diesen "Versatz" einfach korrigiert.
Irgendwo in den Datenblättern stand auch etwas darüber, wenn ich mich 
noch recht erinnere -ist zu lange her.
Wenn jemand den wahren Grund nennen kann - interessiert mich auch.

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.