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?
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
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.
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.
Gibt es einen Softwaresimulator, der auch den A/D-Wandler im Mega8 berücksichtigt? Weiss hier jemand was. Das wäre sehr nützlich.
Einen Software Simulator der den A/D-Wandler komplett nachbildet ist bei den Standard Entwicklungsumgebungen nicht enthalten.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.