Umrechnen von analog to digital

#1444571
Lesenswert?

Wenn man bei 1 zu zählen beginnt, wie es der Mensch nun mal tut, dann 
ist 1024 richtig.
Wenn man aber wie der Controller bei 0 zu zählen anfängt ist die höchste 
Zahl die 1023.

Deswegen fallen auch ständig Leute über den Fallstrick ein Array mit [5] 
Feldern zu initialisieren, aber das letzte Feld nicht mit [4] sondern 
mit verbotenen [5] anzusprechen und ins leere zu treten. Ich in der 
Vergangenheit übrigens auch, mehr als oft genug...
#1444771
Lesenswert?

Andreas Klepmeir schrieb:
> Schon klar, der Wert im ADC wird aber nie größer als 1023.

Das ist schon richtig.
Aber ein Wert von 1023 sagt ja auch nicht aus, dass am ADC exakt die 
Referenzspannung anliegt. Genausowenig wie ein ADC Wert von 0 exakt 0 
Volt entspricht.

Der ADC liefert 1024 Spannungsbereiche. Jeder ADC Wert steht für einen 
Bereich in dem die tatsächliche Spannung war. Liefert der ADC 1023, dann 
war die gemessene Spannung irgendwo im Bereich (Referenzspannung - 
1/1024 der Referenzspannung) und der Referenzspannung selber.

Mit kleineren Zahlen sieht man das besser.
Angenommen der ADC kann nur 2 Bit auflösen (also 4 verschiedene Werte 
liefern) und die Referenzspannung sei 10V gewesen (damit sichs leichter 
rechnet).

    ADC Wert      Spannung
                      0
       0
                      2.5
       1
                      5
       2
                      7.5
       3
                      10


Ein ADC Wert von 2 bedeutet, dass die gemessene Spannung irgendwo 
zwichen 5 und 7.5V war.
Auch wenn der höchste ADC Wert 3 ist, so liefert der ADC trotzdem die 
Information, in welchem von 4 Spannungsbereichen die Messspannung lag.
Moderator (Firma: Titel) Persönliche Seite #1445097
Lesenswert?

> ich trau der 1023 nicht
Ich auch nicht. Aber die Zahl steht (offenbar) im Datenblatt, und da 
sollte man sich fragen: Warum?

Evtl. nur deshalb, damit auch bei 5,0V Vref und 5,0V am Eingang mit 
ADWert=1023 in der Software auch wieder 5V herauskommen?
Weil die kontrollierten Werte sind (allzu menschlich) idR. 0V und 
Fullscale. Und bei ADC=0 kommt (egal ob mit 1024 oder 1023) der Wert Vin 
= ADC*Vref/1023 = 0V sowieso richtig heraus.
Aber bei Fullscale kommen einmal Vin = ADC*Vref/1023 = 1023*5V/1023 = 
5V, und das andere mal Vin = ADC*Vref/1024 = 1023*5V/1024 = 4,995V 
heraus. Und das könnte so manchen Ingenieur (und/oder Programmierer 
und/oder Datenblattschreiber) verwirren... :-/

Also wird im Datenblatt einfach eine Formel mit 1 Promille Fehler 
angegeben, was eigentlich nicht schlimm ist, weil der ADC sowieso 1/2 
bis 1 Bit nichtlinear ist... ;-)

@  gast (Gast)
Welcher ADC ist das?
Kannst du einen Link zum Datenblatt posten?
#1445176
Lesenswert?

Lothar Miller schrieb:

> Also wird im Datenblatt einfach eine Formel mit 1 Promille Fehler
> angegeben, was eigentlich nicht schlimm ist, weil der ADC sowieso 1/2
> bis 1 Bit nichtlinear ist... ;-)

Na ja.
Eigentlich ist es ja auch kein Fehler in dem Sinne.
Mit der Division durch 1023 ensteht ja eine Zahl, die im tatsächlichen 
Bereich liegt.

Wieder am Beispiel des 2 Bit ADC von oben.

Der ADC meldet 2. Wir wissen, das damit die Messspannung irgendwo im 
Bereich 5 bis 7.5V war.

    2 * 10 / 3 = 7

7 ist ein gültiges Ergebnis, denn die Aussage war ja: im Bereich 5 bis 
7.5

Wie ist das bei 1

    1 * 10 / 3 = 3

auch das ist im Grunde korrekt, den der Messbereich war ja 2.5 bis 5 und 
3 liegt in diesem Bereich.

Das einzige 'Problematische': kleine ADC Werte liefern Spannungswerte, 
die im unteren Bereich des jeweiligen Spannungsintervalls angesiedelt 
sind, große ADC Werte machen das genaue Gegenteil: sie liefern einen 
Spannungswert, der am oberen Ende angesiedelt ist. Dahingehend ist die 
Division durch 1024 fairer, wenn auch für einen Benutzer 
zugegebenermassen verwirrender, da der Endwert nie erreicht wird.
Gast #1445227
Lesenswert?

@kbuchegg
1023 ist dennoch richtiger!
Die Nichtlinearität bzw. ungenauigkeit realer Wandler will ich hier 
nicht betrachten.
Um bei Zahlenbeispielen zu bleiben: Um bei einem 10 Bit A/D-Wandler 
nicht umrechnen zu müssen, sollte die Referenzspannung 1,023 Volt 
betragen. Dann ist der ermittelte Wert die Eingangsspannung in 
Millivolt!
Eine Skalierung mit 1024 bringt damit Fehler, denn ein Bit entspricht 
einem 1023stel der Referenzspannung.
Gast #1445280
Lesenswert?

Jaaa, bei Atmel! Das war jedoch nicht die ursprüngliche Frage.
Die "Treppenkurve" hat aber immer nur 1023 Stufen. Je nach 
Funktionsweise des Wandlers (und sicher auch je nach Abgleich) schneidet 
diese Treppenkurve sich mit der Geraden an unterschiedlichen Punkten. 
Daher kommt ja auch der prinzipielle Messfehler aller digitalen 
Verfahren von +/- 1 Digit.
#1445322
Lesenswert?

Route_66 schrieb:
> Weil aber Spannung kein absoluter Wert ist sondern die Differenz
> zwischen zwei Potentialen darstellt, musst Du nicht die Standflächen
> zählen, sondern die Höhenunterschiede. Das sind bei Deiner Zeichnung
> drei!

Du liegst falsch.

Die Potentialdifferenz zwischen zwei Punkten auf gleichem Potential ist 
null. Also zählt die nullte Stufe auch dazu.

Schließlich will man auch die Aussage "Das Potential ist gleich" 
bekommen können.

Nicht die Sprünge, sondern die Stufen zählen. Die Sprünge sind nur die 
Punkte, an denen eine winzige Spannungsänderung den Wechsel auf die 
nächste Stufe auslöst.
Gast #1445705
Lesenswert?

Der Einfachheit halber nehme ich an, dass jede Stufe 1V hat:

3         +---  3V
2      +--+     2V
1   +--+        1V
0 --+           0V


3V/4 ergibt dann: ...
3V/3 ergibt dann: ...

Und wann ist das Ganze sinnvoll?
Wenn man gründlich kalibriert und dann den wahrscheinlichsten Wert für 
die 3. Stufe verwendet, dann ist die Division durch 4 sinnvoll.
Wenn man gründlich kalibriert und mit den Spannungs-Werten die obere 
Grenze des mit einer Zahl angezeigten Bereichs beschreibt, dann ist die 
Division durch 4 sinnvoll.

Es ist nicht sinnvoll, wenn ein Unterschied < lsb eine Rolle spielt. 
Dann wird die Messung eh nichts.
Ansonsten: binäre Rechner können meist schneller durch 2er Potenzen 
dividieren.
#1445760
Lesenswert?

Der Wert im ADC wird aber nie über 1023 steigen. Wer es nicht glauben 
will darf gerne nachrechnen, 1111111111 in Binär entspricht 1023 in 
dezimal.
Formel: U_eingang = Vref*(ADC/1023).

(ADC/1023) ergibt einen Wert zwischen 0 und maximal 1,0, nicht darunter 
und nicht darüber, Wil: (1023/1023) = 1,0.
Wir befinden uns jetzt also beim 1,0-fachen der Referenzspannung oder 
darüber. (plusminus 0,5 der kleinsten Auflösung, für die Haarspalter)
Bei 10V am Eingang und als Vref wäre der größte Wert, den der ADC 
ausspuckt 10,0 V.

Wenn man jetzt ADC durch 1024 teilt ist die größte, mögliche Zahl: 
1023/1024 = 0,9990234375.
Bei 10V am Eingang und an Vref wäre der größte Wert, den der ADC 
ausspuckt 9,99 V.
#1445781
Lesenswert?

@  Andreas Klepmeir (derandi)

>Bei 10V am Eingang und an Vref wäre der größte Wert, den der ADC
>ausspuckt 9,99 V.

Richtig. Deshalb spuckt ein DMM mit 3 1/2 Stellen immer 1.999 als 
Maximalwert aus, eins mit 3 3/4 immer 3.999

Woran das wohl liegen mag . .  .?

MFG
Falk

P.S. Wer seine Schaltung darauf dimensioniert, dass der allerletzte 
ADC-Messwert noch im normalen Messbereich liegt macht was falsch.
Moderator (Firma: Titel) Persönliche Seite #1445860
Lesenswert?

@ Horst
> Der Einfachheit halber nehme ich an, dass jede Stufe 1V hat:
> 3         +---  3V
> 2      +--+     2V
> 1   +--+        1V
> 0 --+           0V

Dann sollte das so dargestellt werden (mit X- und Y-Achse):
3         +---
2      +--+
1   +--+
0 --+
 0V 1V 2V 3V 4V

 @  Andreas Klepmeir (derandi)
>Bei 10V am Eingang und an Vref wäre der größte Wert, den der ADC
>ausspuckt 9,99 V.
Und das bringt die Softies dann jedesmal ins Schleudern... ;-)

Oder:
Gehen wir einen Schritt weiter zu einem bipolaren 11-Bit-Wandler, der 
dann ja  -1024 bis +1023 ausgeben kann...
Wie sieht das jetzt mit einem Faktor von 1023 aus?
Was ist da die negativste Spannung?

BTW:
Mein Faktor ist 1024 für einen 10-Bit-Wandler...
#1445969
Lesenswert?

Jungs,
 ich glaube das bringt nichts.
Der User versteht die von Euch diskutierten Unterschiede und Standpunkte 
nicht. Er ist bei den Grundlagen.
10Bit sind nun mal 1024 mögliche Werte.
Dabei sollte man es belassen.

Wir lesen doch eh keinen Wert sondern einen "Bereich" ab in dem sich der 
angezeigte Wert befindet.
Sicher ist es sinnvoll eine der Auflösung des A/D entsprechende Vref zu 
haben oder zu wählen um dann zB. direkt mV ablesen zu können. Aber eben 
nicht immer möglich.

Beschränkt Euch doch darauf die Grundlagen welche natürlich im Forum zu 
finden sind aufzuzeigen oder auf diese zu verweisen.
10 Bit 1024 Werte, Vref zB. 1,024V
12 Bit 4096 Werte, Vref zB. 4,096V

Damit wird den Usern warscheinlich ehr geholfen und der der Zusammenhang 
zwischen Vref und dem A/D Wert klar als hier für den User sinnlose 
Diskussionen zu betreiben.

Auch wenn ich solche Diskussionen immer wieder aus dem Blickwinkel des 
"Fortgeschrittenen" gern lese.

Gruß

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