Forum: Mikrocontroller und Digitale Elektronik AD-Wandler mit 10Bit eichen


von Lucas (Gast)


Lesenswert?

Hallo,

ich habe einen Atmega8 mit 10-Bit AD-Wandler. Uref=2,55V.

Muss ich diese Spannung durch 1023 oder 1024 teilen um später die genaue 
Spannung auszurechnen.

Lucas

von Tom M. (tomm) Benutzerseite


Lesenswert?

Mit "eichen" hat deine Frage aber nix zu tun...

Was ist denn die Auflösung des ADC, 1023 Stufen oder 1024? :)

Hast du schon ins Datenblatt geguggt, da gibt's ein schönes Kapitel zum 
ADC, und auch diese Frage wird mit Formel beantwortet - nebst der Fragen 
nach Genauigkeit.

von spess53 (Gast)


Lesenswert?

Hi

Datenblatt: ADC Conversion Result

MfG Spess

von Falk B. (falk)


Lesenswert?


von Joe (Gast)


Lesenswert?

Mit 10 Bit hast du 1024 mögliche Messwerte, also 1023 Intervalle.

Die Breite eines Intervalls ist dann Uref/1023 = 0,00249267 Volt pro 
Bit.

Ist dein ADC-Wert nun 1023, eingrößerer Wert ist nicht möglich, so ist 
deine gemessene Spannung 1023 * Uref/1023 = Uref, so wie es sein soll.
Hättest du durch 1024 dividiert, dann ergäbe sich als maximaler Messwert 
1023 * Uref/1024 < Uref. Das kann nicht richtig sein.

Wenn dein Digitalwert nun 500 beträgt, dann ist die Spannung 
500*0,00249267 = 1,246335V erreicht oder geringfügig überschritten.
Die Eingangsspannung des ADC ist noch etwas kleiner als 501*0,00249267 = 
1,248827V. Die Differenz pro Bit liegt bei rund 2,5mV.

Der Hinweis in dem von Falk genannten Artikel ist falsch!

Joe

von Karl H. (kbuchegg)


Lesenswert?

Joe schrieb:
> Mit 10 Bit hast du 1024 mögliche Messwerte, also 1023 Intervalle.
Nope. Du hast 1024 Intervalle, aber der größte Wert der vorkommen kann 
ist 1023

2 Bit und Referenzspannung sei 4V (= maximal mögliche Spannung)

   00     0V - 1V
   01     1V - 2V
   10     2V - 3V
   11     3V - 4V

4 Intervalle, jedes Intervall ist 1V gross.

> Der Hinweis in dem von Falk genannten Artikel ist falsch!

Ist er nicht.
Wenn der ADC 11 (also 3) liefert, kann die Spannung irgendwo im Bereich 
3V bis 4V sein. Nur weil der ADC den höchstmöglichen Wert liefert, heißt 
das nicht, dass da 4V am Eingang anliegen. Es können genausogut auch 
3.0001V sein. Genauso in der anderen Richtung: Nur weil der ADC 00 
liefert, heißt das noch lange nicht, dass am Eingang genau 0V anliegen. 
Es können genausogut auch 0.9999V sein.

von Timm T. (Gast)


Lesenswert?

Leute, nochmal: Es hängt vom verwendeten ADC ab. Und dazu schaut bitte 
ins Datenblatt. Die Intervalle können nämlich genauso bei

   00     0V - 0.5V
   01     0.5V - 1.5V
   10     1.5V - 2.5V
   11     2.5V - 3V

mit 3V Referenz (als anschauliches Beispiel) sein.

Ausserdem würde ich bei 10 bit im AVR lässig durch 1024 teilen, weil das 
mit paar Shifts machbar ist, während durch 1023 eine zeit- und 
codeaufwändige Softwaredivision erfordert. Der Fehler ist 
vernachlässigbar und wird durch die Fehler des AVR (Vref, 
Steigungsfehler) locker überdeckt.

von Ralf G. (ralg)


Lesenswert?

Timm Thaler schrieb:
> Ausserdem würde ich bei 10 bit im AVR lässig durch 1024 teilen

Naja, vielleicht nicht gerade durch 1024. Aber, wenn's im oberen 
Spannungsbereich genauer sein soll, kann man zum Messwert noch eins 
addieren. Dann hat man bei max. Spannungswert 1024 = 100% (da kann man 
auf jeden Fall besser weiterrechnen), bei Spannung null eben 1.

von Εrnst B. (ernst)


Lesenswert?

Timm Thaler schrieb:
> Leute, nochmal: Es hängt vom verwendeten ADC ab. Und dazu schaut bitte
> ins Datenblatt. Die Intervalle können nämlich genauso bei
>
>    00     0V - 0.5V
>    01     0.5V - 1.5V
>    10     1.5V - 2.5V
>    11     2.5V - 3V
>
> mit 3V Referenz (als anschauliches Beispiel) sein.

Beim AVR (um den es in der Ursprungsfrage geht) ist das nicht so. Und 
auch sonst wüsst ich jetzt keinen ADC, der nicht zumindest versucht, 
seine Schaltpunkte gleichmäßig zu verteilen.

Vielleicht hast du ja ein Beispiel für so einen Sonderling.

Timm Thaler schrieb:
> Ausserdem würde ich bei 10 bit im AVR lässig durch 1024 teilen, weil das
> mit paar Shifts machbar ist, während durch 1023 eine zeit- und
> codeaufwändige Softwaredivision erfordert. Der Fehler ist
> vernachlässigbar und wird durch die Fehler des AVR (Vref,
> Steigungsfehler) locker überdeckt.

Andersherum wir ein Schuh draus:

Man teilt durch 1024, weil das richtig ist.
Man teilt nicht durch 1023, weil das a) langsam ist, und b) falsch ist.

von Walter (Gast)


Lesenswert?

Timm Thaler schrieb:
> Ausserdem würde ich bei 10 bit im AVR lässig durch 1024 teilen, weil das
> mit paar Shifts machbar ist, während durch 1023 eine zeit- und
> codeaufwändige Softwaredivision erfordert. Der Fehler ist
> vernachlässigbar und wird durch die Fehler des AVR (Vref,
> Steigungsfehler) locker überdeckt.

wurde zwar schon mehrmals gesagt, aber das mit 1023 ist FALSCH!
Richtig ist U = ADC-Wert*Uref/1024   !!!!

von Εrnst B. (ernst)


Lesenswert?

Walter schrieb:
> Richtig ist U = ADC-Wert*Uref/1024

oder "Richtiger™":
U liegt irgendwo zwischen
ADC-Wert*Uref/1024
und
(ADC-Wert+1)*Uref/1024

Als Mittelwert zum weiterrechnen könnte man
(ADC-Wert+0.5)*Uref/1024.0
nehmen, oder etwas wie:
(ADC-Wert*2+1)*Uref/2048

Aber auf das halbe LSB kommt es meist eh nicht an, weil der ADC da 
sowieso rumwackelt.

von Falk B. (falk)


Lesenswert?

Das steht alles schon mehrfach beschrieben und durchgekaut im Artikel 
AD-Wandler und den Links im Artikel.

http://www.mikrocontroller.net/articles/AD-Wandler#Negative_Spannungen_messen

Beitrag "Re: Berechnung zur Auflösung ADC - wie richtig?"

So, Popo abgewischt.

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.