mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD Wandler abgleichen ATMEL MEGA8


Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Signal zwischen 0 und 5 Volt am Eingang des AD Wandlers
liegen und rechne die Spannung durch Division durch 1024 auf 2 Stellen
aus. Leider ist die Abweichung zwischen der gemessenen angelegten
Spannung und der Spannungsausgabe des µM mit zunehmender Spannung sehr
hoch (bis 0,5 Volt). Was muß man tun um die Genauigkeit hinzubekommen
oder den AD-Wandler abzugleichen ?

Danke für jede Hilfe

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'Abgleichen' kann man den AD-Wandler nicht. Was für eine
Referenzspannung benutzt Du denn?

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
5 Volt

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht es vielleicht Sinn die Eingangspannung über einen Spannungswandler
runterzurechnen und anschließen wieder hoch ?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spannungswandler? ist das denn keine Gleichspannung? Wenn Du es genau
willst, solltest Du vielleicht einen Spannungsteiler nehmen und die
interne Referenz von 2,56V benutzen. Die von Dir angesprochene
Differenz von bis zu 0,5V ist bei mir bisher nie aufgetreten!
Schaltungsfehler?

Gruß

Johnny

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, meinte natürlich Spannungsteiler

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs mir fast gedacht. Aber wie gesagt, ich hab hier grad ne Schaltung
laufen (zwar mit nem Mega16, aber das sollte sich bei nem Mega8 ähnlich
verhalten), die mir sauber den kompletten Wertebereich wandelt (bei
externer Referenzspannung VREF = VCC und einem Poti zwischen VCC und
GND am Analog-Eingang). Eine Differenz von 10% ist mir noch nicht
untergekommen.

Ist an Deiner Berechnung vielleicht was falsch? Rein informativ:

U_mess = (U_ref / 1024) * ADC

wobei ADC der Wert im Datenregister vom AD-Wandler ist...

Übrigens: Wenn Du mit floats rechnest und nicht aufpasst, kann alles
Mögliche rauskommen.

Gruß

Johnny

Autor: Fraekle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe auch noch nie dermaßen große Abweichungen gehabt, habe mit meinen
LM335 z.B. eine Abweichung von vielleicht 2°C, das entspricht ca.
20mV!! Also bei dem 10Bit A/D-Wandler dann in etwa 4 / 1024, also so
ca. 0,4%

Ist ganz OK für die einfache Schaltung die ich habe...

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls Du AVcc als Referenz nimmst musst Du auf folgendes achten:
Zwischen Vcc und AVcc ein 10uH bis 47uH Spule
Zwischen AVcc und GND einen 100nF keramischen Kondensator
Zwischen VRef und GND einen 100nF keramischen Kondensator

Damit erziele ich sehr gute Ergebnisse.

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Hilfestellung. Werde noch einmal meinen Aufbau
kontrollieren.

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich nicht mit FLOATS rechnen:  Mit welchem Datenformat soll ich
rechnen (BASCOM).

Bernd

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BASCOM? Tut mir leid, da muss ich passen...

Autor: papa_of_t (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schreib doch mal, wie Du rechnest. Es ist nicht ganz klar, wie Du den
Wert ausrechnest auf 2 Stellen: Wenn 5 Volt anliegen, sollte ca. 1024
bei der Wandlung 'rauskommen. geteilt durch 1024 gibt 1, nicht 5?

Schalte doch einfach mal ein Poti an den A/D - Eingang, dreh es hoch
und wieder 'runter und laß Dir in einer Schleife die Werte von der
Wandlung (ohne Umrechnung) anzeigen, um einzugrenzen, ob es an Deiner
Rechnung oder an der Wandlung liegt..

Viel Spaß beim Basteln!

Autor: GMB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich rechne da auch mit "Singles" und sowas rum... ;-)

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann rechne mal statt

U_mess = (ADC_Wert / 1024) * 5 einfach mit

U_mess = (ADC_Wert * 5) / 1024

Gruß Hagen

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also,

U_mess = adc_wert * 5
U_mess = U_mess /1024

Die Abweichung its im mittleren Spannungsbereich vorhanden. 5 Volt
kommen vom ADC 1024 und bei 0 Volt kommen auch 0.

Keine Ahnung warum ich so hohe Abweichungen bekomme.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gehe mal davon aus, dass U_mess bei Dir als float deklariert ist??? Du
könntest es alternativ mal mit einem ausreichend bemessenen Integer
versuchen, und zwar die Ausgabe nicht in Volt sondern in Millivolt
machen, also nicht adc_wert  5 sondern adc_wert  5000. Dann dürfte
auch bei einer Division durch 1024 was sinnvolleres rauskommen.

Gruß

Johnny

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja U_mess ist als float deklariert. Werde heute den mV Ansatz mal
versuchen. Nur aus meiner Sicht handelt es sich nicht um einen
Rechenfehler, da wenn ich den ADC Wert per Hand umrechne genauso eine
hohe Abweichung erhalte. Sprich: Der ADC-Wert ist schon zu hoch.

Gruss

BS

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So funktionierts unter Bascom:

'#### Variablen
Dim Spg_result As Long 'der gemessene Wert 0...1023
Dim Spg_wert As Single ' errechneter Spg-Wert
Dim Spg_reference As Single 'z.B. 5Volt
Dim LCD_String as String*22

Start Adc
Adchannel = 1
Spg_result = Getadc(1)
Spg_wert = Spg_result * Spg_reference
Spg_wert = Spg_wert / 1024
Lcd_string = Fusing(spg_wert , "#.#") 'runden auf eine
Nachkommastelle
Stop Adc

Funktioniert ziemlich genau! ;-)

Autor: Bernd Sarotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,

den mittleren Teil habe ich genauso. Nur den Befehl Adchannel = 1
nicht. Werde ich mir heute abend noch einmal anschauen.

Danke

bernd

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Ganze war geschrieben für nen ATMega 128 mit mehreren AD-Eingängen,
der "Adchannel" selektiert nur jeweils den entsprechenden Eingang.

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.