Forum: Mikrocontroller und Digitale Elektronik ADC Kanalwechsel bei 1MHz


von MaBl (Gast)


Angehängte Dateien:

Lesenswert?

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

von Floh (Gast)


Lesenswert?

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).
:-)

von MaBl (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Lutz (Gast)


Lesenswert?

Die main wäre auch wichtig zu sehen (wie die Funktionen aufgerufen 
werden).

von Floh (Gast)


Lesenswert?

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?

von MaBl (Gast)


Lesenswert?

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.

von MaBl (Gast)


Lesenswert?

@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.

von Anja (Gast)


Lesenswert?

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

von MaBl (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.