mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umrechnen von analog to digital


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

kann jemanden mir helfen.
wie rechnet man eine analoge Wert in digitale um. Was muss man beachten.

Danke

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du die Frage genauer stellen ?

Ansonsten google mal nach A/D Converter. Oder für Dich auch ganz bequem: 
hier der WIKI Eintrag: 
http://de.wikipedia.org/wiki/Analog-Digital-Umsetzer

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Analoge Werte in digitale, Troll?

Da gibts nichts zu berechnen, A/D Wandler?

lg

Autor: Hans M. (fuxdancer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
entstammst du der rasse der trolle?
analoge in digitale umrechnen? hast du die physik neu erfunden?
das ich nicht lache.

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris K. schrieb:
> entstammst du der rasse der trolle?
> analoge in digitale umrechnen? hast du die physik neu erfunden?
> das ich nicht lache.

Chris K. ...
so geht man nicht mit Forumsmitglieder um, auch du hast einmal als 
Fulltoudl angefangen...

Autor: Hans M. (fuxdancer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich war auch einmal ein fulltoudl, aber auch ich bin so behandelt 
worden du blöder oger. :b

Autor: Peter G. punkt (grudolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris K. schrieb:
> ja ich war auch einmal ein fulltoudl, aber auch ich bin so behandelt
> worden du oger. :b

Und du solltest dich mal besser beherrschen, du JIT!

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

aber im Datenblatt steht: ADC=Vin*1023/Vref

Wenn ich die Formel einsetze, kriege ich nicht das Ergebnis.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast schrieb:
> hallo,
>
> aber im Datenblatt steht: ADC=Vin*1023/Vref
>
> Wenn ich die Formel einsetze, kriege ich nicht das Ergebnis.

Dann zeig mal deinen Code.
(Du musst natürlich die Formel nach Vin umstellen. Du hast den Wert vom 
ADC und willst die Spannung wissen)

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
anbei der Code.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast schrieb:
> Hallo,
> anbei der Code.

OK.
Und, was ist jetzt das Problem?

Das liest den ADC aus, d.h. du hast irgenwelche ADC Werte im Array 
Voltages.

Ich sehe aber nirgends, wo bzw wie die ADC Werte in Volt umgerechnet 
werden.

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

Bewertung
0 lesenswert
nicht lesenswert
hallo Karl,
sorry ich habe die andere nicht eingefügt. Jetzt der neue Code

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
totalvalue * vref/1023

Autor: Marcus Kunze (marcusk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich trau der 1023 nicht, sollte das nicht besser 1024 heisen oder ist 
das ein ganz spezieller AD mit 9.99Bit

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1023 ist der größte Wert, den eine 10 Bit Zahl aufnehmen kann. 1024 wäre 
bereits das 11. Bit.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sir Sydom (sirsydom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo 1024, denn die 0 ist ja auch dabei.

Autor: Andreas K. (derandi)
Datum:

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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat aber nichts damit zu tun, dass durch 1024 geteilt werden muss. Egal 
ob man bei 1 oder bei null zu zählen beginnt, weil es bei 10bit in jedem 
Fall 1024 Zahlen gibt.

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon klar, der Wert im ADC wird aber nie größer als 1023.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Maik Werner (werner01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und dieses 1024/stel ist das nicht der relative Messfehler?

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nö, das ist kein Meßfehler, sondern die Auflösung.


Ein Meßfehler ergibt sich, wenn der A/D Wandler z.B. "348" angibt, 
obwohl die angelegte Spannung eigentlich "352" wäre.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Route_66 (Gast)
Datum:

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

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...oder für die, die nicht in Elektronik denken: Wenn ein Lineal Striche 
von Null bis 29 hat, besitzt es zwar dreßig Striche, aber nur 29 
Abstände (Zwischenräume, Teilungen, Stufen...).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ADC liefert seinen Maximalwert nicht erst dann, wenn die zu messende 
Spannung exakt mit der Referenzspannung übereinstimmt, sondern schon 
früher. Der Hersteller wird ja wohl wissen, wie sein ADC funktioniert.

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@kbuchegg
Das hängt nicht nur von der Genauigkeit sondern auch von der 
Funktionsweise des realen A/D-Wandlers ab!

Es ist auch eher eine philosophische Frage und vom Standpunkt des 
Betrachters abhängig.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Route_66 schrieb:
> @kbuchegg
> Das hängt nicht nur von der Genauigkeit sondern auch von der
> Funktionsweise des realen A/D-Wandlers ab!

Eben.
Daher traue ich den Atmel Datenblättern mehr :-)
Und die rechnen mit 1024

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Daher traue ich den Atmel Datenblättern mehr :-)
> Und die rechnen mit 1024

Die Argumentation ist zwar pragmatisch, aber nicht kausal.

Wie wärs damit:

Ein n-Bit-ADC teilt den Meßbereich in 2^n Schritte auf und numeriert die 
durch von 0 bis 2^n - 1.

Deshalb lautet die Formel

Autor: Route_66 (Gast)
Datum:

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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Route_66 schrieb:
> Die "Treppenkurve" hat aber immer nur 1023 Stufen.

Du hast die nullte Stufe übersehen.

Für den Fall n = 2 sieht die Stufenleiter so aus:
3         +---
2      +--+
1   +--+
0 --+

Autor: Route_66 (Gast)
Datum:

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

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann zwar vier Werte 0...3 darstellen, also keinen, einen, zwei oder 
drei "Abstände" zur Null haben, nie aber vier (2 hoch 2).

Autor: Uhu Uhuhu (uhu)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
hallo,
anbei das Datenblatt, die Formel steht in der Seite 297

Autor: oioioioioi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach alles mal

Autor: Horst (Gast)
Datum:

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

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sollte beim zweiten mal heißen:
dann ist die Division durch 3 sinnvoll.

Autor: Andreas K. (derandi)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil diese 3 1/2-Stellen DMM vorne nur eine eins darstellen können?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Stephan Henning (stephan-)
Datum:

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

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.