Bernhard S. schrieb:
> Mehrere ADC-Eingände sollen nacheinander gemessen werden.
>
> Nach der Kanal-Umschaltung ist vermutlich eine längere Pause (ca.1ms)
> nötig, bis sich die interne ADC-Umschaltung beruhigt hat.
>
> Ist das korrekt, muss das so sein?
Nein. Solange du die Referenz nicht ändern musst und das MUX-Register im
korrekten Zeitfenster beschreibst, kannst du jeden ADC-Zyklus sinnvoll
verwenden.
Die Beschreibung des Zeitfensters zum sinnvolen Setzen der neuen
Einstellung für ADMUX steht (wer hätte es gedacht...) im Datenblatt.
Was die Einstellung der Referenz betrifft, kann es allerdings
(mindestens beim M1284P) entgegen der DB-Angaben (die hier dasselbe
versprechen wie bezüglich der Quellenumschaltung) zu Problemen an völlig
unerwarteter Stelle kommen, nämlich beim BOD.
Das ist ein echter Hardware-Bug, der von mir bereits vor über zwei
Jahren an den Atmel-Support gemeldet wurde, aber scheinbar haben die
Inder den Kram einfach verschlampt. Ich hatte schon bei der
Kommunikation das Gefühl, dass der Typ auf der anderen Seite einfach
nicht verstanden hat, worum es eigentlich geht. Mein Englisch ist zwar
zugegebenermaßen nicht so superprächtig (das typische DB-Englisch halt),
aber andererseits nun auch wieder nicht so dermaßen Scheiße, dass ein
wirklich interessierter Leser nicht hätte deuten können, was ich
schrieb. Also wollte der wohl einfach nicht verstehen, warum auch immer.
Vermutlich hätte er dadurch eine unbezahlte Mehrarbeit zu leisten
gehabt...
Der Kern der Sache ist jedenfalls, dass der BOD eine der eingebauten
Referenzen als Bezugspotential benutzt. Beim Umschalten der
Referenz-Quellen via ADMUX entstehen offensichtlich kurzzeitig
"Querverbindungen" zur zuletzt benutzten Referenz, die diese interne
Referenz dann kurzzeitig stören. Da der BOD bereits nach 1..2ns auslöst,
führt das genau dann zu einem ungewollten Reset, wenn der Pegel der
zuletzt genutzten Referenz deutlich über der vom BOD benutzten Referenz
liegt und das Ziel der Umschaltung eben diese Referenz ist, denn dann
"sieht" der BOD die Vorsorgungsspannung kurzzeitig (aber leider eben
lange genug) als zu gering.
Workaround: Umschalten der Referenz auf die vom BOD benutzte immer in
zwei Etappen, jedenfalls wenn die ursprüngliche Referenzspannung
deutlich höher war.
Leider gibt es ohne Kenntnis der Beschaltung von AREF in der konkreten
Applikation keine Möglichkeit, einen gleichzeitig optimalen und
universellen Workaround für das Problem zu implementieren.