www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Kanalwechsel bei 1MHz


Autor: MaBl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).
:-)

Autor: MaBl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Lutz (Gast)
Datum:

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

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: MaBl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lutz,

der Code außen herum ist etwas länglich. Es sei dir aber versichert, 
dass im Main-loop nur ein
  
  for (;;) {
    timer_handle();

  }

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.

Autor: MaBl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
ADC0: 20 ADC1: 0 No: 58824
ADC0: 29 ADC1: 0 No: 117674
ADC0: 29 ADC1: 0 No: 176524
ADC0: 22 ADC1: 0 No: 235373
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.

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MaBl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.