Forum: Mikrocontroller und Digitale Elektronik AD Wandler abgleichen ATMEL MEGA8


von Bernd Sarotti (Gast)


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

von johnny.m (Gast)


Lesenswert?

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

von Bernd Sarotti (Gast)


Lesenswert?

5 Volt

von Bernd Sarotti (Gast)


Lesenswert?

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

von johnny.m (Gast)


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

von Bernd Sarotti (Gast)


Lesenswert?

Sorry, meinte natürlich Spannungsteiler

von johnny.m (Gast)


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

von Fraekle (Gast)


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

von Ingo (Gast)


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.

von Bernd Sarotti (Gast)


Lesenswert?

Hallo,

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

von Bernd Sarotti (Gast)


Lesenswert?

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

Bernd

von johnny.m (Gast)


Lesenswert?

BASCOM? Tut mir leid, da muss ich passen...

von papa_of_t (Gast)


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!

von GMB (Gast)


Lesenswert?

Ich rechne da auch mit "Singles" und sowas rum... ;-)

von Hagen (Gast)


Lesenswert?

Dann rechne mal statt

U_mess = (ADC_Wert / 1024) * 5 einfach mit

U_mess = (ADC_Wert * 5) / 1024

Gruß Hagen

von Bernd Sarotti (Gast)


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.

von johnny.m (Gast)


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

von Bernd Sarotti (Gast)


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

von micha b (Gast)


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! ;-)

von Bernd Sarotti (Gast)


Lesenswert?

Danke,

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

Danke

bernd

von micha b (Gast)


Lesenswert?

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

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.