ADC-Ergebnis immer rund +35 AD-Werte zu hoch

Gast #346281
Lesenswert?

Vielleicht kann mir jemand weiter helfen, ich weiß nicht mehr weiter.
Mein AD-Wandler spielt verrückt. Er zeigt immer ein um rund +35
AD-Werte zu hohes Ergebnis an.
Prozessor: ATMega16
AVref: extern 2,56 (intern hat zu sehr gerauscht)
AVcc: 5,02 V
Conversion-Time: 8MHz:64 => 125kHz

Spule und Kondensatoren wie im Datenblatt auch vorhanden.
Beispiel: Spannung am AD-Eingang PortA0: 1,639Volt
Anzeige: AD-Wert 692
Nach meinen Berechnungen müsste aber der AD-Wert((1,639V*1024)/2,56)
656 sein.

Hat irgendjemand eine Idee woran das liegen könnte oder ähnliche
Erfahrungen gemacht?
Danke schon mal für eure Tipps...
Gast #346283
Lesenswert?

Wechselst Du zwischendurch die A/D-Eingänge? Ist Deine Eingangsspannung
niederohmig genug? Die interne Referenz rauscht nicht, konnte ich
jedenfalls noch nicht feststellen. Sie ist lediglich recht weit
toleriert, dabei aber ziemlich genau und auch stabil.
Gast #346284
Lesenswert?

als ich die interne Vref angeschlossen habe, hatte ich nicht berechnet
was theoretisch herauskommen müsste. Da ist mir nur aufgefallen, dass
der AD-WErt +/- 5 geschwankt hat, obwohl ich eine konstante Spannung am
Eingang angelegt habe.
Deswegen bin ich auf extern umgestiegen und der Wert ist jetzt auch
sehr viel stabiler: +/-2
Gast #346285
Lesenswert?

Hab jetzt noch mal die interne Vref 2,56 Volt ausprobiert. Ergebnis ist
jetzt ca 10 AD-Werte zu niedrig. Wäre allerdings immer noch besser als
30 zu viel. Kann ich mir aber immer noch nicht den Grund dafür erkären.
Vielleicht hat ja jemand noch eine Idee...
Gast #346289
Lesenswert?

Wie genau ist denn Deine externe VRef, mit welchen Meßmöglichkeiten
arbeitest Du, mit denen Du den Ausgabewert des ADCs vergleichst? Hast
Du an VRef mal einen 100nF-Kondensator nach Analog-Masse angeschlossen,
so wie´s im Datenblatt steht? Genau so einen Kondensator mal vom
ADC-Eingang nach Analog-Masse angeschlossen?
Gast #346290
Lesenswert?

Meine externe Referenzspannung erzeuge ich mir durch einen
LDO-Regler(LF33CV) 3,3V und einem nachgeschalteten Poti(5k) auf genau
2,56 Volt. Meine Messmittel sollten schon ausreichen, vernünftiges
Multimeter und Oszilloskop sind vorhanden.Vref hab ich mit 100n und 1n
auf Analogmasse schon beschaltet. Allerdings den Eingang nicht mit
100n. Aber spielen die anderen Eingänge wirklich eine Rolle?
Schließlich multiplexe ich die Kanäle doch nicht, sondern benutze immer
nur den einen(PortA0)!
Gast #346291
Lesenswert?

Hmm, das ist nicht wirkl. genau. Man sollte beim Multimeter nicht darauf
bauen, dass die 2.stelle hinterm komma so exakt stimmt. Desweiteren hat
der adc auch nen eigenen drift. Und Spannungsquelle aus regler und poti
ist schon gar nicht. Da hat der Regler nen eigene drift + rauschen. Das
Poti hat je nach temperatur nen drift.

Also lieber die interne oder eine gescheite externe.
Mfg Flo
Gast #346293
Lesenswert?

Du musst auch bedenken, dass beim Messen durch den Innenwiderstand des
Messgerätes eine Belastung entsteht.
30 ADCs sind ja nicht gerade sooo viel, 75mV.
Dem Eingang unbedingt auch einen C spendieren. Auch die Wandelrate
spielt eine Rolle, mach sie mal langsamer.

Ist der Fehler konstant oder linear mit der Eingangsspannung?
Welche Impedanz hat die Mess-Quelle?
Gast #346294
Lesenswert?

Auf welcher Seite des Datenblatt steht denn, dass die interne
Referenzspannung von 2,3...2,9V reicht? Und welche externe sinnvolle
Referenzspannung baut ihr denn auf, die keine Drift und Rauschen hat?
Mit der Wandelrate hab ich auch schon experimentiert, aber ohne erfolg.
Habe sämtliche Wandelraten zwischen 50 und 200kHz erzeugt.
@Profi
der Fehler ist konstant mit der Eingangspannung des ADC

wie gesagt, ich weiß auch nicht mehr weiter
Gast #346295
Lesenswert?

Hallo,

poste doch mal deinen Code. Evtl. gibst Du dem ADC nicht genug Zeit zum
Stabilisieren, nach Umschalten des ADC-Kanals? Ich warte nach Umschalten
erst immer etwa 200 Clocks, mache dann eine einzelne "Dummy"
ADC-Register-Lesung und lese erst dann 8 gültige ADC-Werte, die
anschließend gemittelt werden. Damit steht der Wert bombenfest und gibt
auch das, was ich als Wert erwarten würde (z.B. bei
Versorgungsspannung-Messungen, kontrolliert mit Multimeter).

Im Anhang der C-Source.

Gruß,
Dennis
Angehängte Dateien:
Gast #346299
Lesenswert?

> adwert=((ADCH<<8)+ADCL);  //ADC-Wert berechnen

Dass da Murks rauskommt ist u.U. vorprogrammiert. Es sollte mich
wundern, wenn der ADC nicht immer den selben Wert ausgibt. Das Auslesen
der ADC-Datenregister muss unbedingt in der richtigen Reihenfolge
geschehen, und zwar erst ADCL und dann ADCH. Sonst wird das Register
nicht wieder freigegeben und Du kriegst bei jedem Auslesen denselben
Wert! Schreib doch einfach
adwert=ADC; //Einlesen 16-Bit-Register
Dafür hat Dein Compiler extra die 16-Bit-Zugriffe, damit Du Dir um die
Reihenfolge keinen Kopf machen musst.
Gast #346300
Lesenswert?

Ist das nicht eine Anweisung die von rechts nach links gelesen werden
muss? Dann wäre es doch genau richtig! Außerdem gibt mir der AD-Wandler
ja eben nicht immer den gleichen Wert aus, aber ich werde es gleich mal
ausprobieren, ob sich was verändert!
#346301
Lesenswert?

> Ist das nicht eine Anweisung die von rechts nach links gelesen
> werden muss?

Wenn schon, dann wäre es logisch dass die Abarbeitung von
links nach rechts erfolgen würde, so wie wir das normalerweise
lesen. Aber auch diese Garantie hast du nicht, der C-Compiler
kann das machen wie er will.
Gast #346302
Lesenswert?

> Schreib doch einfach adwert=ADC; //Einlesen 16-Bit-Register

Ja, kann ich mich nur anschließen. Komischerweise taucht genau dies
min. 1 / Woche hier auf ;-)

Also, ADC einschalten, direkt auslesen und wieder ausschalten wird -
ohne Zeit zum Stabilisieren - nicht klappen. Evtl einmal initialisieren
und dann einfach immer aktiv lassen. Die höhere Stromaufnahme fällt
nicht wirklich ins Gewicht.

Dennis
Gast #346303
Lesenswert?

Ich weiß jetzt nicht, was für Signale Du einlesen willst, aber wenns
nicht auf Geschwindigkeit ankommt (also Signale erfasst werden sollen,
deren Änderungsgeschwindigkeit wesentlich langsamer ist als die
Wandlungsrate des ADC), sollte man sowieso mehrere Wandlungen machen
und dann eine Mittelwertbildung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren