Hi Leute,
wann genau soll der erste Wert des ADC verworfen werden?
Im Datenblatt steht, dass wenn ich die Referenzspannung umstelle, der
erste Wert nicht verwendet werden soll. Selbiges gilt wohl für den
ersten Wert, nachdem das Modul eingeschaltet wurde (ADEN=1). Aber wie
sieht es aus, wenn ich den Channel umstelle oder den gewählten Eingang
von I/O auf ADC umstelle?
Jörg schrieb:> erste Wert nicht verwendet werden soll. Selbiges gilt wohl für den> ersten Wert, nachdem das Modul eingeschaltet wurde (ADEN=1).
Nein, es dauert nur länger.
> Aber wie sieht es aus, wenn ich den Channel umstelle oder den> gewählten Eingang von I/O auf ADC umstelle?
Erst wird die laufende Messung beendet, dann wird umgeschaltet.
Falls du mit INT arbeitest, wird der erste INT nach dem Umschalten
noch für den alten Kanal gelten. Die folgenden INTs sind gültig.
In Free Running Mode - Warten, bis die neue Messung angefangen hat,
Kanal wechseln, erste Messung ist für altes Kanal, verwerfen, nächste
Messung ist gültig.
Das hängt von dem uC ab, aber die Terminologie weist auf AVRs hin.
Nach allem, was ich aus den Datenblättern weiß, muss die erste Wandlung
verworfen werden, weil die Referenz sich möglicherweise noch nicht
stabilisiert hat. Analoges gilt für eine externe Referenz. Hingegen
wirken die Multiplexer für den Kanal bzw. für die I/O-Buffer umstellung
sich nicht auf die Referenz aus.
Daraus folgt, dass dabei die erste Wandlung nicht verworfen werden muss.
So etwas steht auch nicht im Datenblatt. Ich habe nochmal im Datenblatt
vom ATMega88 nachgeschaut.
Da es verschiedene Varianten der AVRs gibt sollte man sicherheitshalber
nochmal in dem entsprechenden Datenblatt und Errata nachschauen, denke
ich.
Aus Application Note: Atmel AVR126: ADC of megaAVR in Single Ended Mode
It is recommended to discard the first conversion result (like whenever
there is a change in ADC configuration like voltage reference / ADC
channel change)
Also auch nach Kanalwechsel empfohlen.
gürteltier schrieb:> It is recommended to discard the first conversion result (like whenever> there is a change in ADC configuration like voltage reference / ADC> channel change)>> Also auch nach Kanalwechsel empfohlen.
Bei wechseln der Voltage Reference ist der erste Wert ungenau, soll
deswegen verworfen werden.
Bei Kanalwechsel kann es sich um Wert für vorigen Kanal handeln,
deswegen und nur deswegen soll dieser Wert verworfen werden.
Beim Umstellen von I/O auf ADC dauert nur die erste Messung länger
aber der Wert ist gültig.
gürteltier schrieb:> Also auch nach Kanalwechsel empfohlen.
Kann ich bestätigen! Ich wollte mehrere Kanäle quasi parallel auswerten
und bin fast verzweifelt...
Die ersten 1-2 Samples waren soweit daneben das selbst ein Mittelwert
über 32 Samples noch deutlich falsch war.
Hatte dann ziemliche Probleme die geforderte Geschwindigkeit zu
schaffen.
gürteltier schrieb:> Aus Application Note: Atmel AVR126: ADC of megaAVR in Single Ended Mode>> It is recommended to discard the first conversion result (like whenever> there is a change in ADC configuration like voltage reference / ADC> channel change)>> Also auch nach Kanalwechsel empfohlen.
Danke für den Hinweis. Ich habe glatt vergessen, dass ich das gelesen
hatte. Naja. Es kommt darauf an, denke ich.
Ich habe schon den Kanal gewechselt, ohne die erste Wandlung danach zu
verwerfen und habe damit keine Probleme gehabt. Aber man sollte das wohl
lieber nicht machen ohne den Effekt genauer abzuschätzen.
Ich hatte das mal anhand der Daten von Quelle und interner Schaltung
abgeschätzt und es schien mir immer OK zu sein.
Es wird wohl keinen eigentlichen Zusammenhang zur Stabilisierung der
Referenz geben (die ändert sich ja nicht, wenn der Kanal gewechselt
wird) aber vermutlich haben die das in die selbe Schublade geworfen, wie
das Ent- oder Hochladen des Sampe&Hold Kondensators, falls die Spannung
am neuen Kanal anders ist als die am vorherigen. Für meine Begriffe eher
eine "Angst-Empfehlung", aber vielleicht gibt es da auch andere
Meinungen.
Wenn du die Referenz umschaltest und ggf. ein Kerko an ARef hängt,
dauert es deutlich länger, bis neue Messwerte korrekt sind! Da ist es
nicht mit nur einer Dummy-Messung getan.
Rt schrieb:> Die ersten 1-2 Samples waren soweit daneben das selbst ein Mittelwert> über 32 Samples noch deutlich falsch war.
Dann bist aber so ziemlich der einzige mit diesem Problem.
Rt schrieb:> Die ersten 1-2 Samples waren soweit daneben das selbst ein Mittelwert> über 32 Samples noch deutlich falsch war.
Dss spricht dafür, das deine Quellen recht hochohmig waren und deswegen
den internen S&H Kondensator nicht schnell genug umgeladen haben. Das
gleiche Problem sieht man auch bei offenen oder hochohmig getriebenen
ADC Kanälen, die dann einen 'Mit-Zieh-Effekt' durch Nachbarkanäle haben.
Nicht umsonst möchte Atmel gerne Quellen mit weniger als 10k
Innenwiderstand am ADC sehen. Das gilt nicht für den ADC mit internem
OpAmp, aber den gibts ja nicht in jedem AVR.
Hosenmatz schrieb:> Ich habe schon den Kanal gewechselt, ohne die erste Wandlung danach zu> verwerfen und habe damit keine Probleme gehabt.
Ich mache das auch immer so, wenn mehrere Kanäle zu messen sind.
Ein Übersprechen tritt nicht auf, d.h. der erste Meßwert ist stabil. Die
Referenz schalte ich nicht um.
Im ADC-Interrupt wird der letzte Wandlungswert gelesen, der MUX einen
Kanal weitergeschaltet und dann die Messung gestartet.
Man kann aber auch statt des ADC-Interrupt einen Timerinterrupt nehmen,
um eine bestimmte Abtastrate zu erzielen.
Eine Ausnahme bildet die interne Bandgap (1,1V), um damit z.B. die
eigene VCC zu messen. Die ist sehr hochohmig und dann verwerfe ich sogar
15 Wandlungen.
Matthias S. schrieb:> Dss spricht dafür, das deine Quellen recht hochohmig waren und deswegen> den internen S&H Kondensator nicht schnell genug umgeladen haben.
Bei hochohmigen Quellen schalte ich einen 100nF an den ADC-Eingang, der
bildet einen genügend großen Puffer um den S&H Kondensator umzuladen.
Man kann dann noch zwischen den Wandlungen längere Zeiträume lassen.
Ein Rail-to-Rail-OPV ginge auch, aber dann braucht man noch eine
negative Versorgung, da die nicht bis 0V runter messen können.
Rail-to-Rail ist eigentlich gelogen, man hat immer noch 50..100mV
Totbereich zu GND bzw. VCC.
Aber in der Regel kennt man doch die Impedanz der Referenz und kann die
der Quelle zumindest grob schätzen, oder? Und damit lässt sich dann die
Wartezeit vor der ersten Messung und die Konvertierungsdauer jeder
weiteren Messung ausrechnen. Die eingangsimpedanz vom ADC Pin kennt man
ja auch.
Schon klar, das Timing lässt sich wenn man keinen Timer verwenden mag am
einfachsten über eine definierte Anzahl Dummy Messungen machen, aber die
Anzahl der dabei zu ignorierenden Samples sollte doch anhand der obigen
Zusammenhänge klar zu bestimmen sein, oder?
Hmm... schrieb:> Die eingangsimpedanz vom ADC Pin kennt man> ja auch.
Die Unbekannte in der Rechnung ist dann noch der Widerstand des
AVR-internen Kanalmultiplexers, der als RC Tiefpass mit dem S&H
Kondensator zusammenwirkt. Darüber findet man in den Datenblättern wenig
bis nix.
Peter D. schrieb:> Im ADC-Interrupt wird der letzte Wandlungswert gelesen, der MUX einen> Kanal weitergeschaltet und dann die Messung gestartet.
So mache ich das auch immer. Die Abtastrate lässt sich dann mit dem
Vorteiler des ADC festlegen und sinnvollerweise wählt man die so, das
sie innerhalb der Grenzen des ADC bleibt und so langsam wie möglich ist
und so schnell wie nötig.
Ein beliebter Anfängerfehler ist es ja, den ADC viel zu hoch zu takten
und sich dann über die merkwürdigen Ergebnisse zu wundern.