Auch nach dem sorgfältigen und aufmerksamen Durchlesen von Datenblättern
sind immer noch nicht alle Unklarheit ausgeräumt.
Es ist mir immer noch nicht vollständig klar, welche Aufgaben von der
Hardware übernommen werden, und was im Programmcode unbedingt
berücksichtigt werden muss.
Z.B. beim Umschalten von ADC-Kanälen:
1
ADC0.MUXPOS=ADC_MUXPOS_AIN7_gc;// select AIN7 (PA7) as ADC Input
Georg M. schrieb:> Es ist mir immer noch nicht vollständig klar, welche Aufgaben von der> Hardware übernommen werden
Das ist doch im Datenblatt Deines AVR eindeutig beschrieben.
So eine Umwandlung kann man z.B. einmalig anstoßen oder permanent
ausführen lassen.
> und was im Programmcode unbedingt> berücksichtigt werden muss
- die Initialisierung des ADC
- die Quellen-Umschaltung
- ggf. Start der Umwandlung anstoßen
Ralf schrieb:> - die Quellen-Umschaltung> - ggf. Start der Umwandlung anstoßen
- die Quellen-Umschaltung
- ( delay??? )
- ggf. Start der Umwandlung anstoßen
Das war meine Frage. Verstanden?
wenn du es "händisch" startest machst du also single conversion?!
Sample&Hold erfolgt 1,5 ADC-Takte nach deinem Conc-Start.
(erstmaliges S&H nach der Aktivierung des ADC erst später)
Ob du zwischen Mux und Start noch zusätzlich warten muss hängt von
deiner Quellimpedanz ab: Der Sample-Kondensator muss auf den Endwert
geladen worden sein.
z.B. in
https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf
steht das in
26.6.1 Analog Input Circuitry
Harry R. schrieb:> wenn du es "händisch" startest machst du also single conversion?!
Nein, Burst Accumulation Mode.
Harry R. schrieb:> Ob du zwischen Mux und Start noch zusätzlich warten muss hängt von> deiner Quellimpedanz ab
Meine Impedanz ist sehr niedrig:
Ein 100nF Kondensator ist direkt angeschlossen, und seine Spannung
(50...500mV) wird direkt gemessen. Kein Widerstand meinerseits.
Georg M. schrieb:> Ralf schrieb:>> - die Quellen-Umschaltung>> - ggf. Start der Umwandlung anstoßen>> - die Quellen-Umschaltung> - ( delay??? )> - ggf. Start der Umwandlung anstoßen>>> Das war meine Frage. Verstanden?
Wenn du die Quelle umschaltest soll man die erste Messung verwerfen da
man nicht sicher sein kann, dass das erste Wandlerergebnis korrekt ist.
Ein Delay hilft da nicht soweit ich weiß.
Das kann man eigendlich nur probieren. Mit der Umschaltung wird etwas
Ladung von dem vorherigen Pin auf dem zu messenden übertragen. Wäre der
offen reichen auch 3 Messungen nicht bis er wieder 0 ist.
Delays stören eigendlich den Programmablauf. Wie wäre es das Ergebnis
direkt nach der Konvertierung ab zu holen und sofort den Mux zu setzen
dann sollte reichlich Zeit sein bevor der nächste Burst kommt?
M. K. schrieb:>> Das war meine Frage. Verstanden?>> Wenn du die Quelle umschaltest soll man die erste Messung verwerfen da> man nicht sicher sein kann, dass das erste Wandlerergebnis korrekt ist.
FALSCH!!! Das gilt nur, wenn man die Referenzspannung umschaltet!
> Ein Delay hilft da nicht soweit ich weiß.
Zwischen dem Umschalten des MUX um dem Start der Messung braucht es
KEINE zusätzliche Wartezeit, neudeutsch "delay".
A. H. schrieb:> Das kann man eigendlich nur probieren. Mit der Umschaltung wird etwas> Ladung von dem vorherigen Pin auf dem zu messenden übertragen.
Nein! Nicht, wenn die Eingangsschaltung was taugt.
Gefunden:
Beitrag "Settling Time ADC Atmega 4808"A. H. schrieb:> Delays stören eigendlich den Programmablauf. Wie wäre es das Ergebnis> direkt nach der Konvertierung ab zu holen und sofort den Mux zu setzen> dann sollte reichlich Zeit sein bevor der nächste Burst kommt?
Ja, das wäre auch eine Lösung.
Falk B. schrieb:> Das gilt nur, wenn man die Referenzspannung umschaltet!
Genau das meinte ich mit Quelle (Referenzspannungsquelle). Da hab ich
mich Kacke ausgedrückt.
M. K. schrieb:> Wenn du die Quelle umschaltest soll man die erste Messung verwerfen da> man nicht sicher sein kann, dass das erste Wandlerergebnis korrekt ist.
Nein
A. H. schrieb:> Das kann man eigendlich nur probieren.
Nein.
Zu Beginn jeder Messung wird intern ein Kondensator mit der
Eingangsspannung geladen. Der Multiplexer wählt dabei einen
Eingang/Kanal aus. Danach wird der Eingang wieder getrennt und der ADC
misst die Spannung am seinem internen Kondensator.
Die Sample Phase (das Laden des Kondensators) wird durch gleichzeitiges
Umkonfigurieren des Multiplexers nicht beeinträchtigt, weil die
Umschaltung in der Hardware ggf. verzögert stattfindet. Das steht
irgendwo im Datenblatt oder in einer Application Note.
Das Ergebnis des ADC kommt immer von dem Eingang, der unmittelbar vor
der Messung durch den Multiplexer ausgewählt war.
Die Konsequenz daraus ist, dass bei einer Umschaltung des Kanal während
einer laufenden Messung erst das übernächste Ergebnis zum gewählten
Kanal gehört.
Im Freilaufenden Modus kann man in jedem IRQ
a) das Ergebnis der vorherigen abgeschlossenen Messung auslesen und
b) während schon die nächste Messung läuft
c) den Kanal für die übernächste Messung einstellen
Es ist also durchaus möglich, alle Kanäle abwechselnd mit maximaler
Geschwindigkeit zu messen ohne auch nur ein einziges Messergebnis
verwerfen zu müssen.
Zur Referenzspannung:
Die interne Referenzquelle ist recht hochohmig. Wenn man diese auf eine
andere Spannung umstellt, dauert es eine Weile, bis sie sich
stabilisiert hat. Wie lange das dauert, hängt hauptsächlich davon ab,
wie viel Kapazität am Aref Pin hängt. Ohne Stützkondensator gehen viele
Entwickler von der Dauer einer ADC Messung aus. Aber das hängt ja auch
wieder von der Taktfrequenz des ADC ab.
Das hast Du gut erklärt, Stefan!
Also: Obacht nur bei Änderung der Referenzspannung.
Da sollte man etwas Wartezeit einplanen.
Dabei hatte ich schon die merkwürdigsten Effekte.
Mit den neuen AVRs und vergleichsweise zahmen Anforderungen an die
Messungen schalte ich mir im freilaufenden Modus die Eingänge in einem
Timer-Interrupt regelmäßig um und nutze die maximalmögliche
Aufsummierung (Sample Accumulation) für einen guten Mittelwert. Das
klappt prima und neuerdings mit 12 Bit Auflösung :)
Stefan F. schrieb:> Ohne Stützkondensator gehen viele> Entwickler von der Dauer einer ADC Messung aus.
Ich zitiere aus dem Datenblatt des Atmega328P
> If no external voltage is applied to the AREF pin, the user may switch> between AVCC and 1.1V as reference selection. The first ADC conversion> result after switching reference voltage source may be inaccurate, and> the user is advised to discard this result.
Da muss ich also als Entwickler nicht von irgend etwas ausgehen, da muss
ich nur mal das Datenblatt lesen ;)
M. K. schrieb:> Stefan F. schrieb:>> Ohne Stützkondensator gehen viele>> Entwickler von der Dauer einer ADC Messung aus.>> Ich zitiere aus dem Datenblatt des Atmega328P>>> If no external voltage is applied to the AREF pin, the user may switch>> between AVCC and 1.1V as reference selection. The first ADC conversion>> result after switching reference voltage source may be inaccurate, and>> the user is advised to discard this result.>> Da muss ich also als Entwickler nicht von irgend etwas ausgehen, da muss> ich nur mal das Datenblatt lesen ;)
Das Datenblatt berücksichtigt bei dieser Aussage NICHT eine eventuelle
(ja im Datenblatt soger empfohlene) Stützkapazität an AREF.
Wenn man bei einem Atmega328P von AVCC auf 1.1V als ADC-Referenz
umschaltet, so kann es mit dem üblichen 100nF-Kondensator zwischen AREF
und GND sehr lange dauern, WESENTLICH LÄNGER als die Dauer einer
Messung, bis sich AREF stabilisiert hat, weil die internen 1.1V, wie
Stefan oben schon beschrieben hat, recht hochohmig ist.
Wir haben das in einem früheren Thread schon mal en detail durchgekaut
-> Beitrag "AVR AREF intern: 100n zu GND wirklich hilfreich?". Ich benutze seitdem
standardmäßig nur noch 10nF als Stützkapazität an AREF.
LG, Sebastian
Sebastian W. schrieb:> Wir haben das in einem früheren Thread schon mal en detail durchgekaut> -> Beitrag "AVR AREF intern: 100n zu GND wirklich hilfreich?". Ich> benutze seitdem> standardmäßig nur noch 10nF als Stützkapazität an AREF.
Und wozu? Wie oft und wie schnell must du denn die Referenz umschalten?
Das ist wohl eher die Ausnahme. 90% und mehr aller Anwendungen des ADC
schalten einmal die Referenz ein und gut.
Falk B. schrieb:> Und wozu? Wie oft und wie schnell must du denn die Referenz umschalten?> Das ist wohl eher die Ausnahme. 90% und mehr aller Anwendungen des ADC> schalten einmal die Referenz ein und gut.
Das ist ja mal wieder das typische Statement eines Schmalspur-Denkers
ohne umfangreiche Erfahrung.
Natürlich kann es bei einer entsprechenden Anwendung vorkommen, dass man
tatsächlich schnell mehrere Kanäle mit unterschiedlichen Referenzen
messen muss. Kommt z.B. regelmäßig vor, wenn man nur einen einzigen(!)
Messwert über einen sehr großen Dynamikbereich möglichst genau erfassen
muss.
Aber solchen Schmalspur-Denkern ist ja sogar verwehrt, für sowas ein
Konzept zu entwickeln. Weil: könnten sie es, würden sie verstehen, warum
es sinnvoll sein kann auch schnell zwischen verschiedenen
Referenzspannungen wechseln zu können...
Und das ist nur eine von vielen Anwendungen, wo das nötig sein kann.
Man denke z.B. nur an die (möglichst zeitgleiche) parallele Erfassung
von Spannung und Strom. Auch hier ist es oft mehr als nötig, die
Referenz schnell schalten zu können, um die Shunts für die Strommessung
möglichst klein halten zu können.
Das waren jetzt schon zwei typische Anwendungsfälle. Es gibt aber noch
viel mehr...
Sprich: du hast keine Ahnung.
Es reicht doch schon, unterschiedliche Sensoren abzufragen. Der eine
wird gegen VCC gemessen, der andere gegen eine stabile Referenz. Schon
muss man umschalten.
Ein batteriebetriebenes Thermometer zum Beispiel.
Stefan F. schrieb:> Schon muss man umschalten.
Bei einer dieser Umschaltungen hatte ich in unerfahreneren Jahren mal
ein großes Problem, welches sich als Programm-Reset äußerte. Ich glaube
da war die Ursache eine bestimmte Referenzspannung, die (leicht) über
der Betriebsspannung lag.
Ralf schrieb:> Bei einer dieser Umschaltungen hatte ich in unerfahreneren Jahren mal> ein großes Problem, welches sich als Programm-Reset äußerte. Ich glaube> da war die Ursache eine bestimmte Referenzspannung, die (leicht) über> der Betriebsspannung lag.
Das dürfte das Problem mit der auch vom BOD benutzten 1.1V-Referenz bei
vielen neueren ATMegas sein. Das Problem habe ich vor Jahren schon
geposted (damals konkret zum Mega1284P) , aber nur den Hohn der hiesigen
Vollidioten geerntet...
Der Wirkungsmechanismus ist dabei so: Man mißt irgendwas mit einer
relativ hohen Referenzspannung (z.B. Vcc), schaltet dann um auf die
interne 1.1V-Quelle und hat außen an ARef einen "fetten" Bypass (der
braucht garnicht so sehr fett zu sein, um den Effekt auszulösen).
Dadurch sieht der BOD kurzzeitig (aber locker lang genug, denn er ist
sehr schnell) ein viel zu hohe Referenzspannung, was ihn natürlich zu
der Annahme bringt, dass sein Messwert, nämlich Vcc, zu gering wäre. Und
dann tut er das, was er tun muss, nämlich einen Reset auslösen...
Stefan F. schrieb:> Es ist also durchaus möglich, alle Kanäle abwechselnd mit maximaler> Geschwindigkeit zu messen ohne auch nur ein einziges Messergebnis> verwerfen zu müssen.
Vielleicht doch mal ausprobieren um zu erkennen das das recht ungenaue
Ergebnisse bringt. Stark abhängig von dem was am vorherigen Pin hängt.
A. H. schrieb:> Vielleicht doch mal ausprobieren
Habe ich, ist lange her.
> um zu erkennen das das recht ungenaue> Ergebnisse bringt. Stark abhängig von dem was am vorherigen Pin hängt.
Das Problem hast du nur, wenn deine Quelle zu hochohmig ist. Der ADC
erreicht die versprochene Genauigkeit, wenn man sich an die Bedingungen
hält. In diesem Fall muss die Quelle einen Ausgangswiderstand kleiner
als 10 kΩ haben, soweit ich mich erinnere.