Hallo zusammen, ich möchte an meinem mega128 (16MHz) den ADC in der möglichen maximalen Taktrate von 1MHz nutzen. Messe ich nur einen Kanal funktioniert alles bestens. Sobald ich allerdings zwischen zwei Kanälen wechsel, erhalte ich keine sinnvollen Werte mehr. Der Fehler tritt bei single conversion als auch im free running mode auf. Veringert man die Taktrate auf 0.5 MHz funktioniert wieder alles wie erwartet. Hat jemand einen Vorschlag wie ich trotzdem möglichst hohe Samplingraten erhalten kann? Im Datenblatt habe ich dazu keine Einschränkungen gefunden. Es wäre echt super, wenn ich um einen externen ADC herumkommen würde. Matthias
kein freerunning benutzen! messung ist fertig (von mir aus interrupt), dann ADMUX ändern und dann erst die neue Messung starten. Denn wenn du während der Messung den Kanal änderst, sind die Daten korrupt (siehe DB). :-)
Hallo Floh, laut Datenblatt ist ADMUX (zumindest beim Mega128) gepuffert, sollte also keinen Einfluss auf die Messung haben? Ich habe es auch schon im single conversion modus probiert, da will es leider auch nicht. Die dafür angepasste Datei ist im Anhang.
Die main wäre auch wichtig zu sehen (wie die Funktionen aufgerufen werden).
MaBl schrieb: > Ich habe es auch schon im single conversion modus probiert, da will es > leider auch nicht. Die dafür angepasste Datei ist im Anhang. ok, n Versuch wars wert :-) Was spuckt der ADC den für Werte aus? Gibts eine gegenseitige Beeinflussung? Was hängt eigentlich genau für ein Sensor dran?
Hallo Lutz, der Code außen herum ist etwas länglich. Es sei dir aber versichert, dass im Main-loop nur ein
1 | |
2 | for (;;) { |
3 | timer_handle(); |
4 | |
5 | }
|
läuft. Also die timing Funktionen die dann auch zur Ausgabe genutzt wird. Diese Module sind aber schon sehr intensiv getestet. Das Problem tritt ja auch nur bei 1MHz Takt am ADC auf. Die Frage ist, ob das normal ist, denn 1MHz ist ja schon am oberen Ende der Wandlergeschwindigkeit.
@Floh: Es soll mal ein spezieller induktiver Näherungsschalter dran hängen. In ermangelung diesem, nutze ich gerade nur die internen 1.247V und 0 Volt Pegel. Eine Beinflussung kann man also ziemlich ausschließen. Normale Funktion sollte also die Ausgabe "ADC0: 64 ADC1:0" lauten (was auch sehr stabil bei 0.5MHz geht). Bei hoher Taktung erhalte ich aber:
1 | ADC0: 20 ADC1: 0 No: 58824 |
2 | ADC0: 29 ADC1: 0 No: 117674 |
3 | ADC0: 29 ADC1: 0 No: 176524 |
4 | ADC0: 22 ADC1: 0 No: 235373 |
5 | ADC0: 25 ADC1: 0 No: 294225 |
Im Prinzip wollte ich einfach nur testen wie schnell ich werde (denn es muss schnellstmöglich sein). Habe mich dann schon gefreut als bei 1MHz die Werte bei 8-Bit sehr stabil waren. Die Ernüchterung kam dann beim Kanalwechsel... Naja gut, meine bessere Hälfte treibt mich jetzt ins Bett (wo sie recht hat..) Hoffentlich klappt das morgen irgendwie noch.
Hallo, ich würde beim single conversion mode damit die Sample-Time maximal wird mehr Abstand zwischen Auswahl Mux-Register und Start der Wandlung lassen. (also z.B. XOR auf MUX-Register außerhalb switch case zum toggeln der MUX-Bits). Außerdem mußt du bei hohen Abtastraten darauf achten daß die Quellimpedanz des Sensors möglichst niederohmig ist. Da funktionieren die üblichen <= 10kOhm nicht mehr. Die interne Referenzsspannung ist auf stromsparen getrimmt, daher wohl zu hochohmig. Gruß Anja
Hallo Anja, du hast mich gerettet! Es lag tatsächlich daran, dass die Referenzspannung zu niederohmig war! Ich hatte dies zwar im Datenblatt gelesen, aber nicht daran gedacht, dass dies für eine interne Spannung der Fall sein kann. Vielen Dank für eure Hilfe, das Forum ist echt einsame Klasse Matthias
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.