mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC-Ergebnis immer rund +35 AD-Werte zu hoch


Autor: Makke (Gast)
Datum:

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

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"AVref: extern 2,56 (intern hat zu sehr gerauscht)" ???

wieso denn das?

und wie ist das ergebnis mit dem internen AVref?

Autor: TravelRec. (Gast)
Datum:

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

Autor: Makke (Gast)
Datum:

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

Autor: Makke (Gast)
Datum:

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

Autor: Mika (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sind die nicht verwendeten AD Eingänge auf Masse ?
Das hilft meistens.

Autor: Makke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, die sind offen. In der Software hab ich sie als Eingänge definiert
und die internen Pullup aktiviert. Ist es sinnvoller sie als Ausgänge zu
definieren?

Autor: Mika (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal als Eingang und dann fest auf Masse klemmen.

Autor: TravelRec. (Gast)
Datum:

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

Autor: Makke (Gast)
Datum:

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

Autor: Flo (Gast)
Datum:

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

Autor: Gast ein Anderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo Flo seh ich auch so.
und im Datenblatt steht zur internen Ref.: Vint 2,3V ... 2,9 V !

Autor: Profi (Gast)
Datum:

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

Autor: Makke (Gast)
Datum:

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

Autor: Dennis Kleine-Beck (Gast)
Datum:
Angehängte Dateien:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seite 298 im Mega16 Datasheet(10/04)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Auf welcher Seite des Datenblatt steht denn...

Datenblatt Seite 298 (ADC Characteristics), Internal Voltage Reference

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

Bewertung
0 lesenswert
nicht lesenswert
Ich  mache ja gar keine Umschaltung der Kanäle...ich wandle immer nur
PORTA0!
Im Anhang findet ihr meinen Code!

Autor: johnny.m (Gast)
Datum:

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

Autor: Makke (Gast)
Datum:

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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

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

Autor: Dennis Kleine-Beck (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

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.