Forum: Mikrocontroller und Digitale Elektronik 1023 oder 1024


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Hans W. (hansw)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

wenn ich mir Beispiele anschaue mit ADC Messungen, da sehe ich oft das 
z.B. durch 1024 geteilt wird. Aber ist nicht 0-1023 = 1024 Werte richtig 
und somit 1023 zu verwenden?

von Kan a. (Firma: Basta) (kanasta)


Bewertung
-1 lesenswert
nicht lesenswert
10-bit ADC -> Wertebereich 0 bis 1023, also 1024 Werte.
Zählen ist schwer.

von Handbuchleser (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Aus dem ATmega8-Handbuch von 2/11, Seite 199:
"0x3FF represents the selected reference voltage minus one LSB."

=> Also entspricht 0x400 (1024) der Referenzspannung.

von dummschwaetzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
1024 kann der compiler besser optimieren

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert

von Hans W. (hansw)


Bewertung
0 lesenswert
nicht lesenswert
>Also entspricht 0x400 (1024) der Referenzspannung.

>10-bit ADC -> Wertebereich 0 bis 1023

Widersprechen sich nicht diese Aussagen?

Lt meinem ersten Post meine ich ja das 1023 ja Vref entsprechen würde 
und nicht 1024
jedoch 1023 da die 0 mitzählt 1024 Werte beinhalten würde

von Kan a. (Firma: Basta) (kanasta)


Bewertung
0 lesenswert
nicht lesenswert
Der Wert 1023 entspricht VRef, das stimmt.
Evtl. könnte man weiter helfen, wenn man wüsste, welche Formel du zu 
füllen versuchst...

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Hans W. schrieb:
>>Also entspricht 0x400 (1024) der Referenzspannung.
>
>>10-bit ADC -> Wertebereich 0 bis 1023
>
> Widersprechen sich nicht diese Aussagen?
>
> Lt meinem ersten Post meine ich ja das 1023 ja Vref entsprechen würde
> und nicht 1024
> jedoch 1023 da die 0 mitzählt 1024 Werte beinhalten würde

Das kommt auf den Hersteller des ADC an.

Beim AVR ist es so:
Ich mach dir ein Beispiel für einen 2 Bit ADC, der sich so verhält wie 
der ADC im AVR.

2 Bit - d.h. der ADC kann 4 verschiedene Werte liefern.
Weiters nehme ich als Referenzspannung 4 Volt an. Die Zuordnung sieht 
dann so aus

    Volt  |  ADC-Wert
   -------+-----------
    0 - 1 |     0
    1 - 2 |     1
    2 - 3 |     2
    3 - 4 |     3


Der ADC liefert 4 verschiedene Werte. Wenn du die in eine Spannung 
umrechnen willst, wie rechnest du das dann?

      Referenzspannung * ADC_Wert / 4

oder

      Referenzspannung * ADC_Wert / 3


Man beachte: Wenn der ADC einen Wert von 3 liefert, dann heißt das 
NICHT, das die Spannung tatsächlich 4 Volt war. Es bedeutet nur, dass 
die Spannung sich im Bereich 3-4 Volt (eben im letzten Messintervall) 
war. Auch bei einer Eingangsspannung von 3.1 Volt würde in diesem 
Beispiel der ADC schon eine 3 auswerfen.

von Detlev T. (detlevt)


Bewertung
0 lesenswert
nicht lesenswert
Da die Genauigkeit eines ADC in der Regel schlechter ist als 1 Schritt, 
ist diese Diskussion 1023 vs 1024 etwas sinnfrei.

1024 kann, wie schon erwähnt, ein Compiler besser optimieren (bit-shift) 
und sollte daher bevorzugt werden.

Meine Meinung.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Detlev T. schrieb:
> ist diese Diskussion 1023 vs 1024 etwas sinnfrei.
Trotzdem stimmen 1024. Das einzige Problem, das die "üblichen" 
Programmierer haben, ist, dass bei einer Vref von z.B. 5,000V und dem 
maximal erreichbaren AD-Wert eben keine 5,000V herauskommen 
(10-Bit-Wandler = 0x3FF = 1023), obwohl 5,000V am Eingang anliegen.

(Nachkommastellen zur Verdeutlichung unnötig genau dargestellt... ;-)

von Kan a. (Firma: Basta) (kanasta)


Bewertung
0 lesenswert
nicht lesenswert
Die Frage ist, will man nach der Umrechnung von ADC-Wert zu Spannung die 
untere oder die obere Grenze des entsprechenden Spannungsbereichs haben?

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@  Lothar Miller (lkmiller) (Moderator) Benutzerseite

>Trotzdem stimmen 1024. Das einzige Problem, das die "üblichen"
>Programmierer haben, ist, dass bei einer Vref von z.B. 5,000V und dem
>maximal erreichbaren AD-Wert eben keine 5,000V herauskommen
>(10-Bit-Wandler = 0x3FF = 1023), obwohl 5,000V am Eingang anliegen.

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

von Andreas S. (andreas) (Admin) Benutzerseite Flattr this


Bewertung
0 lesenswert
nicht lesenswert
Kan asta schrieb:
> Die Frage ist, will man nach der Umrechnung von ADC-Wert zu Spannung die
> untere oder die obere Grenze des entsprechenden Spannungsbereichs haben?

Die Mitte, wenn man den mittleren Fehler minimieren möchte.

von ... (Gast)


Bewertung
1 lesenswert
nicht lesenswert
also rechnet man mit 1023.5 ? :-)

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
... schrieb:
> also rechnet man mit 1023.5 ? :-)

Ja, ich habe den Smiley schon gesehen.

Nur damit das am Ende nicht wirklich jemand so macht:

Nein, man addiert 0,5 zum ADC-Wert:

  U = Uref * (ADC + 0.5) / 1024

Oder, wenn man lieber ganzzahlig rechnet:

  U = (Uref * ADC + Uref / 2) / 1024

von ... (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ok, wollte keine verwirrungs stiften :-)

die +0.5 macht das Integral über den Quantisierungsfehler in jedem 
einzelschirtt gleich 0. Hat aber auch Nachteile.


Schaut euch doch mal diesen Vorschlag an:

U = (Vref*adc + (Vref*adrc / 2^10)) / 2^10

Das hält das Quantisierungsfehlerintegral zwar nur über des gesamten 
Messbereich = 0, dafür erreicht man aber auch U = 0.0V und U = Vref 
exakt. Manchmal kann das auch wichtig sein.

Obrige gleichtung ist natürlich noch zusammenzufassen....

U = Vref  adc  const   mit const = (2^bits + 1) / (4^bits)

von ... (Gast)


Bewertung
0 lesenswert
nicht lesenswert
haha^^ bin ich bekloppt. das is ja das gleiche wie wenn man druch 1023 
teilt :-D

von Schnarch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Warum will denn niemand begreifen -
und warum schafft es niemand, einleuchtend zu erklären,
dass die Auflösung eines N-Bit-ADCs eben 1/2^N ist?

Somit MUSS man bei 10 Bit durch 1024 teilen - und
sollte sich darüber FREUEN, weil sich das schön
Bit-Shiften lässt!

Betreibe doch µC und U-ref mit 5,120 V - und du kannst
auch noch zwischen 4,995 .. 5,000 .. 5,005 .. 5,010 V
unterscheiden, wenn dir so sehr daran liegt...

Der grundsätzlich mögliche Fehler von einigen LSB bei
den ADCs im ATmega-µC interessiert solche Fragesteller
sowieso nicht. Die freuen sich auch über 300 W PMPO...

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Schnarch schrieb:
> Warum will denn niemand begreifen -
> und warum schafft es niemand, einleuchtend zu erklären,
> dass die Auflösung eines N-Bit-ADCs eben 1/2^N ist?
Probiers du doch mal.
Alle, die es wissen, machen es so, und die Anderen kapieren es offenbar 
weder auf die eine noch auf die andere Art. Und das geht bis hin zu 
Application-Notes und Datenblättern von AD-Wandler-Herstellern...

Falk Brunner schrieb:
> @  Lothar Miller (lkmiller) (Moderator) Benutzerseite
> Beitrag "Re: Berechnung zur Auflösung ADC - wie richtig?"
Ja, den Link habe ich gesehen. Aber auch mit einer abschliessenden 
Addition eines halben Bits komme ich nicht auf den Maximalwert, sondern 
"nur" auf den Maximalwert minus ein halbes LSB.
Und es ist allzu menschlich und im täglichen Leben einfach so, dass bei 
anliegenden 5,00V auf einer Anzeige 5,02V besser aussehen als 4,99V. 
Kürzlich erst wieder gehabt...

von Ralph B. (rberres)


Bewertung
0 lesenswert
nicht lesenswert
1024 ist bereits das elfte Bit. es wäre 10000000000
Der 10Bit DA Wandler geht aber nur    bis9999999999

Somit kommt auch nicht die volle 5 Volt Referenzspannung als Maximum 
raus sondern 1 Bit weniger.

Ralph Berres

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Typisch Hardware-Freaks und C Programmierer. Normale Programmierer 
nummerieren ihre Finger von 1 bis 10 und kämen deshalb nie auf die Idee, 
es wären 9. Aber wer der Hardware zu nahe kommt oder mit C geschlagen 
ist und sie deshalb von 0 bis 9 nummeriert... ;-)

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Ralph Berres schrieb:
> Somit kommt auch nicht die volle 5 Volt Referenzspannung als Maximum
> raus sondern 1 Bit weniger.
Ein Trick zur Lösung des 4,99V vs. 5,01V Anzeigeproblems ist eine 
minimale Reduzierung der Referenzspannung. Aber da wirds dann langsam 
brenzlig und es geht sachte in Richtung "Murks"...
Nicht, dass jetzt einer kommt und sagt: "Der Miller hat aber gesagt...!"

von Ralph B. (rberres)


Bewertung
0 lesenswert
nicht lesenswert
Wenn man die Referenzspannung auf 5,115V erhöhen würde, hätte jeder 
Schritt
exakt 5mV. Damit kann man vermutlich besser rechnen.

Ralph Berres

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Typisch Hardware-Freaks und C Programmierer. Normale Programmierer
> nummerieren ihre Finger von 1 bis 10 und kämen deshalb nie auf die Idee,
> es wären 9. Aber wer der Hardware zu nahe kommt oder mit C geschlagen
> ist und sie deshalb von 0 bis 9 nummeriert... ;-)

Ja, das ist wohl das Problem das einige nicht erkennen dass wenn der 10 
bit ADC 1023 sagt er seine 1024. Stelle zurück geliefert hat. Kann und 
darf man schonmal ins straucheln kommen. Bisher hatte ich zumindest hier 
noch keine Probleme, lag doch die Auflösung der verwendeten ADCs 
deutlich über der geforderten Genauigkeit und das ist doch nur wichtig, 
oder?

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@  Ralph Berres (rberres)

>Wenn man die Referenzspannung auf 5,115V erhöhen würde, hätte jeder
>Schritt
>exakt 5mV. Damit kann man vermutlich besser rechnen.

Naja, 4,096V gibt es überall, 5,115 hab ich noch nie gesehen.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@  Lothar Miller (lkmiller) (Moderator) Benutzerseite

>> Somit kommt auch nicht die volle 5 Volt Referenzspannung als Maximum
>> raus sondern 1 Bit weniger.
>Ein Trick zur Lösung des 4,99V vs. 5,01V Anzeigeproblems ist eine
>minimale Reduzierung der Referenzspannung. Aber da wirds dann langsam
>brenzlig und es geht sachte in Richtung "Murks"...

Naja, da würde ich lieber ab 2048 und höher ein Bit addieren, dann passt 
es und der Offsetfehler ist verschmerzbar, auch ohne 
Referenzspannungsverrenkung.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Naja, da würde ich lieber ab 2048 und höher ein Bit addieren, dann passt
> es und der Offsetfehler ist verschmerzbar, auch ohne
> Referenzspannungsverrenkung.
Das hört sich nicht schlecht an, und es ist auch schnell erledigt. Für 
den unipolaren 10-Bit-Wandler z.B. so:
  adwert <= adc + adc>>9; // bei berechtigten Zweifeln auch so:  ... adc>>9&1;

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Das einzige Problem, das die "üblichen"
> Programmierer haben, ist, dass bei einer Vref von z.B. 5,000V und dem
> maximal erreichbaren AD-Wert eben keine 5,000V herauskommen
> (10-Bit-Wandler = 0x3FF = 1023), obwohl 5,000V am Eingang anliegen.

Wenn das stört, könnte man doch zum ausgelesenen Wert einfach 1 
addieren.
Die letzte Stelle wird nach der berechnung eh abgeschnitten.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Jürgen schrieb:
>> (10-Bit-Wandler = 0x3FF = 1023), obwohl 5,000V am Eingang anliegen.
> Wenn das stört, könnte man doch zum ausgelesenen Wert einfach 1
> addieren.
Naja, da war dann noch die Sache mit der Null...  ;-)
Denn 1023 vs. 1024 ist ein Steigungsproblem, kein Offsetproblem.
Falks Methode passt die Steigung recht grob granular (aber trotzdem 
durchaus praxisnah) an.

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Michael Köhler schrieb:

> Ja, das ist wohl das Problem das einige nicht erkennen dass wenn der 10
> bit ADC 1023 sagt er seine 1024. Stelle zurück geliefert hat.

Ich denke ein Problem ist, dass die Werte 0..1023 als Spannungswerte 
betrachtet werden. Es wird einfacher, wenn man sie Code für 
Spannungswerte betrachtet. Immerhin wäre es ebensogut möglich und in 
manchen Fällen wohl auch sinnvoll, einen ADC so zu bauen, dass er sein 
Ergebnis asynchron in Gray-Code abliefert. Da käme dann wohl kaum jemand 
auf die Idee, das Ergebnis direkt als Spannung anzusehen.

von Oliver (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Trotzdem stimmen 1024. Das einzige Problem, das die "üblichen"
> Programmierer haben, ist, dass bei einer Vref von z.B. 5,000V und dem
> maximal erreichbaren AD-Wert eben keine 5,000V herauskommen

Das Problem haben nicht die "üblichen Programmierer", sondern die 
"üblichen Anwender". Die wollen halt bei anliegenden 0V 0V sehen, und 
bei 5V 5V. Ist irgendwie auch verständlich...

Oliver

von herb (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>Der grundsätzlich mögliche Fehler von einigen LSB bei
>den ADCs im ATmega-µC interessiert solche Fragesteller
>sowieso nicht.

lol, ja sorry ich hab mir vor 3 Tagen einen uC gekauft und sammle die 
ersten Erfahrungen, es hätte mich nicht interessiert, weil ich das nicht 
wusste.

Wie hoch ist denn der Fehler? Kann man ihn beseitigen oder abschätzen? 
Von der Vs bzw Vref hängt ja auch ganz stark der Fehler ab soweit ich 
weiss.

von spess53 (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Flo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Typisch Hardware-Freaks und C Programmierer. Normale Programmierer
> nummerieren ihre Finger von 1 bis 10 und kämen deshalb nie auf die Idee,
> es wären 9. Aber wer der Hardware zu nahe kommt oder mit C geschlagen
> ist und sie deshalb von 0 bis 9 nummeriert... ;-)

Der C Programmierer der auf 9 kommt sollte es besser lassen. ;-)
Ich sehe sowas immer als enum.
enum
{
  kleinerfinger_links,
  ringfinger_links,
  mittelfinger_links,
  zeigefiner_links,
  daumen_links,
  
  anzahl_finger_links,
};

Ich kotzte jedes mal wenn ich über ein Array iterieren muss und die 
Programmiersprache kann nicht bei 0 anfangen...


Zum Thema 1023/1024 hab ich mir noch nie gedanken gemacht nehme aber 
immer 1024

von Falk B. (falk)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@  Lothar Miller (lkmiller) (Moderator) Benutzerseite

>Denn 1023 vs. 1024 ist ein Steigungsproblem, kein Offsetproblem.
>Falks Methode passt die Steigung recht grob granular (aber trotzdem
>durchaus praxisnah) an.

Hmm, jetzt wo ich darüber nachdenke, ist das mit 1023 vielleicht doch 
besser. Warum?

/2^N ergibt eine Kennlinie, die immer die untere Grenze der 
Quantisierungsbereiche liefert. Null wird erreicht, aber nicht Vref. Der 
mittlere Fehler ist eher groß, bis zu 1 LSB.

Immer 0,5LSB addieren und /2^N liefert eine Kennlinie, die immer in der 
Mitte der Quantisierungsbereiche verläuft, weder echt 0 noch 
Referenzspannung können erreicht werden. Der mittlere Fehler ist 
minimal, maximal 0,5 LSB.

Wenn man einfach / 2^N-1 dividiert, bekommt eine eine Kennlinie mit 
leicht höherer Steigung, welche durch 0 und Vref läuft! In der Mitte bei 
Vref/2 läuft sie genau durch die Mitte des Quantisierungsintervalls. 
Eigentlich perfekt! Der mittlere Fehler ist auch klein, jedoch maximal 1 
LSB.

Die schnelle Idee mit dem MSB addieren ist eher die schlechteste, denn 
sie erzeugt einen Spung! Das kann je nach Anwendung komische Effekte 
geben. Nicht gut.

Siehe Anhang, mal vereinfach für 4 Bit dargestellt.

Irgendwie klingt /2^N-1 am besten, auch wenn es eine echte Division ist 
und nicht einfach nur rechtschieben.

MfG
Falk

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Wenn man einfach / 2^N-1 dividiert, bekommt eine eine Kennlinie mit
> leicht höherer Steigung, welche durch 0 und Vref läuft! In der Mitte bei
> Vref/2 läuft sie genau durch die Mitte des Quantisierungsintervalls.
> Eigentlich perfekt! Der mittlere Fehler ist auch klein, jedoch maximal 1
> LSB.

Nein, überhaupt nicht perfekt, wenn man den maximalen Fehler auch
halbieren kann. Den Skalenfaktor absichtlich zu verfälschen, nur um die
Skala von 0 bis einschließlich Uref reichen zu lassen, nennt man
"Schönen" oder auf Neudeutsch "Beautifying" ;-)

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Naja, da war dann noch die Sache mit der Null...  ;-)

Da war auch noch die Sache mit dem abschneiden.

Jürgen schrieb:
> Die letzte Stelle wird nach der berechnung eh abgeschnitten.

Oder gibt es jemanden der Tatsächlich 5.000 Volt mit 10 Bit messen will.
Bei einer 5v Messung mit 10 Bit taugten in der Praxis nur 2 Stellen 
hinterm Komma, also 10mV.
Das das eine Bit fehlt ist mir klar, nur wo? Vorne, hinten oder in der 
mitte?
Wenn ich dann unbedingt 5,00 Volt (Grad, oder was auch immer) auf meiner 
Anzeige haben will, ist es mir lieber am Anfang da hier bis zu einem A/D 
Wert von 2 (=0,009765625V) meine Anzeige immer noch auf 0,00 ist.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Jürgen schrieb:
> ist es mir lieber
Darauf läuft es hinaus...  ;-)

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
>> ist es mir lieber
> Darauf läuft es hinaus...  ;-)

Nein, es ist der selbe Fehler von einem LSB, egal wo ich das Bit 
einfüge.
Vorne +1, hinten -1 oder in der mitte +/- 0,5

von Ralph B. (rberres)


Bewertung
0 lesenswert
nicht lesenswert
Damit alle 10 Bit gesetzt werden, braucht man 1023/1024 von den 5 V.
Also passiert das schon bei 4,995V und nicht erst bei 5 V.

5V wäre das 10000000000 also schon das 11. Bit.

Will man die 5V bei 1023 schon haben, muss man die Referenzspannung 
entsprechend erhöhen.

Ralph Berres

von UR-Schmitt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Hmm, jetzt wo ich darüber nachdenke, ist das mit 1023 vielleicht doch
> besser. Warum?

Deine Treppe ist aber schon 1 bei Uin = 0,0000..1
Wenn du die Treppe so legst daß sie erst bei 1/2*2^n auf den nächsten 
Wert springt (also rundet) dann ist 1/2^n der beste Wert.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@  UR-Schmitt (Gast)

>Wenn du die Treppe so legst daß sie erst bei 1/2*2^n auf den nächsten
>Wert springt (also rundet) dann ist 1/2^n der beste Wert.

Das machen AFAIK aber die AD-Wandler nicht so.

von Ralph B. (rberres)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen schrieb:
> Das das eine Bit fehlt ist mir klar, nur wo? Vorne, hinten oder in der
>
> mitte?

Das Bit fehlt oben am Ende. Da wo die 5 Volt erscheinen sollen. Das wäre 
das 10. Bit

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Übrigens:

Auch Ein "3½"-stelliges DMM zeigt im Messbereich 2V maximal 1,999V, aber
niemals 2,000V an. Um 2V zu messen, muss in den 20V-Bereich umgeschaltet
werden. Ein Zeigerinstrument für 2V hingegen kann sowohl 0 als auch 2V
anzeigen. Trotzdem scheint es keine Bestrebungen zu geben, DMMs so
hinzustricken, dass auch sie den "vollen" Messbereich anzeigen können.

Dass der oberste Wert einer Messskala fehlt, ist auch bei vielen
"modernen" End-User-Geräten so, und kaum einen stört es:

Eine Uhr mit Digitalanzeige zeigt maximal 23:59:59, aber niemals
24:00:00 an. Bei einer Zeigeruhr hingegen fehlt der unterste Wert,
nämlich 0 Uhr (ess sei denn, man hat eine ohne Ziffern und interpretiert
den nach oben zeigenden Strich auf der Skala als 0)¹.

Bei einem 10-stöckiges Haus (ohne Keller) ist das oberste Stockwerk nach
heutiger Zählung das 9te. Ein 10tes Stockwerk gibt es nicht.

Wer also mit der Zeit geht, zählt nicht von 1 bis n, sondern von 0 bis
n-1. Die Informatiker und die Digitaltechniker haben das schon immer so
gemacht, die anderen Ingenieure wird es irgendwann auch noch lernen, und
für den Rest der Welt spielt ein Fehler von ±1 sowieso keine Rolle ;-)

————————————
¹) Ein Zeitsystem, das sowohl 0:00 als auch 24:00 kennt, gibt (bzw. gab)
   es nur bei der Bahn. Ist das eigentlich im Zeitalter der Computeri-
   sierung immer noch so?

von Ralf G. (ralg)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen schrieb:
> Oder gibt es jemanden der Tatsächlich 5.000 Volt mit 10 Bit messen will.
> Bei einer 5v Messung mit 10 Bit taugten in der Praxis nur 2 Stellen
> hinterm Komma, also 10mV.
> Das das eine Bit fehlt ist mir klar, nur wo? Vorne, hinten oder in der
> mitte?
> Wenn ich dann unbedingt 5,00 Volt (Grad, oder was auch immer) auf meiner
> Anzeige haben will, ist es mir lieber am Anfang da hier bis zu einem A/D
> Wert von 2 (=0,009765625V) meine Anzeige immer noch auf 0,00 ist.

Genauso sehe ich das.
Mir hat bis jetzt immer 'Uref[10..100*mV]*(adc+1)/1024' gereicht.

von Stephan H. (stephan-)


Bewertung
0 lesenswert
nicht lesenswert
mißt, jetzt ist das Popcorn schon wieder alle. :-)

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Naja, ich halte das addieren von 1 zum A/D-Wert mit anschliessendem 
abschneiden der 1000stel für die beste Lösung. Mann könnte das sogar als 
Rundung bezeichnen. Ein Bit hat eben mal eine Range von 0..0,0048828125 
Volt.
Bei allem was dazwischen liegt, wird sich das Bit nicht ändern.

Ralph Berres schrieb:
> Das Bit fehlt oben am Ende. Da wo die 5 Volt erscheinen sollen. Das wäre
> das 10. Bit

Ähh, schon klar

Ralph Berres schrieb:
> Will man die 5V bei 1023 schon haben, muss man die Referenzspannung
> entsprechend erhöhen.

Das bedeutet Hardware die Geld kostet. Bevor ich das ausgebe, überlege 
ich erstmal ob ich dann nicht gleich einen externen A/D Wandler mit 
12Bit hernehme (bei dem ich dann wieder 1 zum A/D Wert addiere ;-)) um 
somit genauer zu messen als mit 10Bit und extra Referenz.

Grüsse

von Der Rächer der Transistormorde (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sagt mal, ist das nicht n Problem zwischen Wahrnehmung, Mathematik und 
Messtechnik?

Bei Mathe ist ne 0 ne 0. Mehrdeutig, z.B. die Definition für einen 
Platzhalter bei nicht vorhandenem Wert.

In der Messtechnik sagt die 0 aber aus das z.b. bei Spannungsmessung der 
gemessenen Wert am dichtesten von allen die das verwendete Messverfahren 
hergibt bei der Referenzspannung liegt. Das ist nun alles andere als 
eine mathematische Null.

Die Wahrnehmung sagt das da nichts ist, was ja s. o. auch falsch ist.

von Ralf G. (ralg)


Bewertung
0 lesenswert
nicht lesenswert
Stephan Henning schrieb:
> mißt, jetzt ist das Popcorn schon wieder alle. :-)

Organisation ist alles!

von ADC (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@  ADC (Gast)

>Ist das dann hier falsch beschrieben:
>http://www.mikrocontroller.net/articles/AVR-Tutori...

Diese philosophische Frage wird gerade diskutiert.

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ADC schrieb:
> Ist das dann hier falsch beschrieben:
> http://www.mikrocontroller.net/articles/AVR-Tutori...

Ist definitiv Falsch. Der A/D-Wandler liefert 1024 Werte, also muss auch 
durch 1024 geteilt werden.
Es geht hier nur noch [haarspalterei]um den Fehler von einem Bit 
[/haarspalterei] der normalerweise Automatisch im oberen Bereich liegt 
und ob man den auch nach unten oder in die Mitte verschieben darf. ;-)

von Vollprofi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen schrieb:
> Es geht hier nur noch [haarspalterei]um den Fehler von einem Bit
> [/haarspalterei] der normalerweise Automatisch im oberen Bereich liegt
> und ob man den auch nach unten oder in die Mitte verschieben darf. ;-)

Wenn jemand ein Auto für 10.000 Euro kauft, ist es ihm sicherlich egal 
ob es letztlich 'nur' 9.999,99 sind.

Betrachten wir doch einmal einen 2 Bit ADC. Da wird es schwieriger, das 
letzte Bit unter den Tisch zu kehren :-)

von Ralph B. (rberres)


Bewertung
1 lesenswert
nicht lesenswert
Jürgen schrieb:
> Ist definitiv Falsch. Der A/D-Wandler liefert 1024 Werte, also muss auch
>
> durch 1024 geteilt werden.

Er fängt aber bei Null an. das Heist wenn kein Bit gesetzt ist, dann ist 
auch Null. Aber wenn sämtliche Bits gesetzt sind , dann sind es 1023 und 
nicht 1024.

1024 ist das 11te Bit.

Die Schrittweite ist 1/1024 der maximale mögliche Wert aber 1023/1024

Eben aus diesen Grund zeigt ein 3 1/2 DVM auch nur bis 1.999 an, wie 
oben schon richtig bemerkt.

Das muss man sich immer klar vor Augen halten.

Ralph Berres

von Εrnst B. (ernst)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht kann man bei der Beschreibung des ADC[LH]-Registers im 
Tutorial einfach noch die Erklärung anfügen, dass ein ADC-Wert von X 
bedeutet, dass die gemessene Spannung
größer als Uref * X / 1024
und
kleiner als Uref * (X + 1) / 1024
ist.

In Falks Bildchen habe ich das mal grün hinterlegt...

von Michael S. (rbs_phoenix)


Bewertung
0 lesenswert
nicht lesenswert
Ich geh mal von einer abgleichenden Messung aus. Ich lege perfekte 0V an 
den ADC-Eingang an, dieser gibt mir den Wert 0 zurück. Als 1. Punkt 
speichern. Danach lege ich perfekte 5V an und der ADC gibt mir 1023 
zurück, mehr kann er ja nicht. Das als 2. Punkt speichern. Somit ergibt 
sich aus der Zwei-Punkt-Formel:
m = delta(y) / delta(x) = (y2-y1) / (x2-x1) =
(5V-0V) / (1023b-0b) = 0,00488... Volt / bit.
Also entweder man schreibt U = 5/1023 * ADC-Wert oder einfach
U = ADC-Wert * 0.004887585532746823069403714565 ;) Somit muss man zwar 
ein paar Byte im RAM opfern, dafür muss der µC nicht jedes mal noch so n 
doofen Bruch teilen.

Das, was wohl das Problem ist, ist das entweder der ADC-Wert 1024 auch 
noch 5V entsprechen würde, oder aber der ADC-Wert -1 noch 0V entsprechen 
würde. Doch da diese nicht erreicht werden können, ist für mich meine 
obige Rechnung am genauesten. Was macht ihr denn, wenn 0V den ADC-Wert 1 
und 5V den ADC-Wert 1015 hat? Dann stimmt weder das durch 1023 teilen, 
noch das durch 1024 Teilen.

Mal ganz davon abgesehen, dass der ADC nicht so genau ist. Doch weil er 
das ist, bin ich folgender Meinung: durch 1023 Teilen ist richtig(er) 
Aufgrund meiner obigen Ansicht, doch wenn es Zeitkritisch ist, Teile ich 
dann doch durch 1024, da es schneller geht und der ADC sowieso ungenauer 
ist.

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vollprofi schrieb:
> Betrachten wir doch einmal einen 2 Bit ADC. Da wird es schwieriger, das
> letzte Bit unter den Tisch zu kehren :

Nö, ist genau das selbe, ausserdem wird kein Bit unter den Tisch 
gekehrt.

OK, 4 Bit ohne addition. 4V Referenz:



0..0,999 ADCWert =0
1..1,999 ADCWert =1
2..2,999 ADCWert =2
3..3,999 ADCWert =3

mit addition von 1

0..0,999 ADCWert =1
1..1,999 ADCWert =2
2..2,999 ADCWert =3
3..3,999 ADCWert =4


Was ist richtiger? Du hast bei 0,999 immer noch 0V auf der Anzeige. Also 
einen Fehler von 0,999 Volt.
Ich bin auch nicht besser dran. Mein ADC liefert schon bei 3 Volt einen 
wert von 4.

Jetzt scneid mal die 100 und 1000stel ab und beantworte dir selbst die 
Frage was besser ist.

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ralph Berres schrieb:
> Er fängt aber bei Null an. das Heist wenn kein Bit gesetzt ist, dann ist
> auch Null. Aber wenn sämtliche Bits gesetzt sind , dann sind es 1023 und
> nicht 1024.

Ach?
Bei einem 2Bit AD-Wandler teilst du dann durch 3 und alles wird gut ?

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Michael Skropski schrieb:
> Danach lege ich perfekte 5V an und der ADC gibt mir 1023
> zurück, mehr kann er ja nicht. Das als 2. Punkt speichern.
Und was, wenn du 10V anlegst? Was? Zuviel? Blöderweise sind ja auch 5V 
schon zuviel, denn die Eingangsspannung muss kleiner als Uref sein. Das 
Digitalmessgerät-Beispiel zeigt das toll...

Jürgen schrieb:
> 0..0,999 ADCWert = 1
Hmmmm...  soll das besser sein?
> beantworte dir selbst die Frage was besser ist.
Das hatten wir doch schon mal im 
Beitrag "Re: 1023 oder 1024"

von Ralph B. (rberres)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen schrieb:
> Bei einem 2Bit AD-Wandler teilst du dann durch 3 und alles wird gut ?

Ich habe geschrieben

Die Schrittweite ist 1/1024 der maximale mögliche Wert aber 1023/1024

In deine Falle Man muss durch 4 teilen, aber der maximal mögliche Wert 
ist 3.

Der erste Schritt ist Null , also bleiben für die 3 weiteren Schritte 
nur 3 übrig. Also kann der maximale Wert nur 3 sein. Klar?

Ralph Berres

von GeraldB (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Auch Ein "3½"-stelliges DMM zeigt im Messbereich 2V maximal 1,999V, aber
> niemals 2,000V an.

Ralph Berres schrieb:
> Eben aus diesen Grund zeigt ein 3 1/2 DVM auch nur bis 1.999 an, wie
> oben schon richtig bemerkt.

Natürlich kann eine 3 1/2 - stellige Anzeige keine 2.000 darstellen. Wie 
wollt ihr beiden denn in der vordersten halben Stelle eine 2 anzeigen?

von Ralph B. (rberres)


Bewertung
0 lesenswert
nicht lesenswert
GeraldB schrieb:
> Natürlich kann eine 3 1/2 - stellige Anzeige keine 2.000 darstellen. Wie
>
> wollt ihr beiden denn in der vordersten halben Stelle eine 2 anzeigen?

Es würde auch nichts daran ändern, wenn die erste Ziffer eine Zwei 
darstellen könnte und decodiert würde.

Ralph Berres

von Michael S. (rbs_phoenix)


Bewertung
0 lesenswert
nicht lesenswert
Ansich is doch nur der Unterschied, dass es einmal

Lothar Miller schrieb:
> Und was, wenn du 10V anlegst? Was? Zuviel? Blöderweise sind ja auch 5V
> schon zuviel, denn die Eingangsspannung muss kleiner als Uref sein. Das
> Digitalmessgerät-Beispiel zeigt das toll...

Also im PIC-DB steht: Min Vref-, Max Vref+. Das heißt für mich, dass ich 
maximal Vref+ anschließen darf, nicht mehr, aber auch nicht weniger.

MAX11661-11666 Datenblatt: 
http://datasheets.maxim-ic.com/en/ds/MAX11661-MAX11666.pdf

Seite 3: Minimal 0, Maximal Vref. Also genauso wie beim PIC.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
GeraldB schrieb:
> Natürlich kann eine 3 1/2 - stellige Anzeige keine 2.000 darstellen. Wie
> wollt ihr beiden denn in der vordersten halben Stelle eine 2 anzeigen?

Der Wertebereich auf digitaler Seite wird aber nicht primär durch die
Anzeige eingeschränkt, sondern durch den ADC. Dass man sich dadurch die
zusätzlichen Segmente für die Anzeige der "2" einsparen kann, ist ein
für den Hersteller angenehmer Nebeneffekt.

von dummschwaetzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
beim MSP darf man bis VCC gehen, misst man gegen interne Referenz von 
z.B. 1,5 V ist alles ab 1,5V 1023 (bei 10Bit) bzw 4095 (12 Bit).
hier währe die Division durch 1023 also genauer:
USample=1023/1023 * Uref=1,5. statt
USample=1023/1024 * Uref=1,498535

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Michael Skropski schrieb:
> Das heißt für mich, dass ich maximal Vref+ anschließen darf, nicht mehr,
Zitat aus dem verlinkten Datenblatt:
The analog input voltage can swing from GND - 0.3V to VDD+ 0.3V without damaging the device.
> das aber auch nicht weniger.
Das ja nun sicher doch...  ;-)

Ok, das was jetzt geblödelt und hatte nichts mit dem Them zu tun. Aber:
sehr schön ist in dem Datenblatt die Übertragungsfunktion dargestellt 
(Screenshot), bei dem man sieht, dass schon "ein Bit vor" Vref der 
maximale ADC-Wert erreicht wird. Und damit dort eigentlich schon Schluss 
ist...

von Ralf R. (rrascher)


Bewertung
0 lesenswert
nicht lesenswert
Schoener als Michael Skropski (rbs_phoenix)
kann man es nicht erklaeren...

Die Digitalvoltmeter, die ich kenne, haben Dual-slope
Wandler, die Aufloesung dort wird gar nicht in Bitweite
angegeben.

Ralf

von spess53 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi

>Seite 3: Minimal 0, Maximal Vref. Also genauso wie beim PIC.

Da steht aber auch auf S.2:

REF, OVDD, AIN1, AIN2, AIN to GND.........-0.3V to the lower of
                                          (VDD + 0.3V) and +4V

MfG Spess

von Michael S. (rbs_phoenix)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
>> das aber auch nicht weniger.
> Das ja nun sicher doch...  ;-)

Ja das war doof ausgedrückt. Ich mein das ich daraus schließe, dass ich 
Vref anschließen DARF, aber natürlich auch weniger anlegen kann. Die 
Zeile dich ich meine ist:

Parameter           | Symbol | Min | Typ | Max  | Units
--------------------+--------+-----+-----+------+-------
Input Voltage Range | VAIN_  |  0  |     | VREF |   V

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Es gibt m.W. normal rundende und abrundende ADCs. Der MAX1166x ist
ebenso wie der ADC in den AVRs normal rundend, was bedeutet, dass das
erste Intervall (Ausgabe 0) nur 0,5 LSB, während das letzte (Ausgabe
2^n-1) 1,5 LSB breit ist. Bei einem abrundenden ADC sind alle Intervalle
gleichbreit, weswegen mir diese Typen sympathischer sind.

von Udo N. (weinbauer73)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bevor es wirklich philosophisch wird... 10 Bit sind 2^10 Werte von 0 bis 
(2^10)-1 = 1023. Angenommen der ADC ist linear und Vref1 der untere 
Punkt (0) und Vref2 der obere (1023), so überstreicht der Arbeitsbereich 
1024 Punkte und damit die Differenz
Vref1 ist meistens intern mit GND verbunden, seltener ein weiterer 
aussen zugänglicher Eingang. Wenn jetzt Vref 1023 entspricht, so 
entspricht jeder Punkt Vref/1023. Somit ergibt sich für den Punkt 1 eine 
Eingangsspannung von 1/1023 von Vref über Vref1:
oder allgemein
Eine Eingangsspannung von Vref1 ergibt 0 und damit den 1024. Wert(!)

Dementsprechend gilt allgemein:

Wenn mich meine Rechenkünste nicht verlassen haben, ist der Fehler 
0,0978%, wenn man anstelle dem korrekten Wert 1023 1024 zur 
Vereinfachung nimmt. Je höher die Auflösung ist, desto geringer wird 
dieser Fehler. Es ist also eher eine Sache des Entwicklungsziels und der 
Fehlertoleranz, als sich hier darüber den Kopf zu zerbrechen.

Um die Auswirkungen der Auflösung eines ADCs und der Entscheidung 
Vereinfachung oder Genauigkeit besser sehen zu können, habe ich das in 
ein Excel-Sheet gegossen. Es funktioniert auch unter LibreOffice (und 
sollte damit auch in OpenOffice gehen).

Grüße
Udo

von Schnarch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Man könnte sich beömmeln, wenn man sieht, wie sich hier
alle was abringen, um 1024, oder 1023 zu verteidigen! ;-)

Z.B. der Fehlschuss: Uin >= Uref soll NULL bringen!

Wäre möglich, wenn die zu große Uin den ADC killt, aber:

Das Verfahren "Sukzessive Approximation" (machen fast alle
AD-Wandler) wäre ultimativ dämlich realisiert, wenn es die
Erfassung von Uin >= Uref mit der Ausgabe NULL beenden
würde...

Nacheinander wird dabei ermittelt:
Uin > 1/2 * Uref,   -> 1
Uin > (1/2 + 1/4) * Uref,   -> 11
Uin > (1/2 + 1/4 + 1/8) * Uref,   -> 111
...
Uin > (1/2 + 1/4 + ... + 1/1024) Uref,  -> 1111111111

Der ADC mit 10 Bit Auflösung KANN jetzt nicht mehr weiter
und wird eine Folge von 10 EINSEN ausgeben.

Ach ja, die letzte EINS ist der kleinste Auflösungs-
schritt. Und er ist?

Na was wohl: 1/1024

von Udo N. (weinbauer73)


Bewertung
0 lesenswert
nicht lesenswert
1111111111 = 1024? Es sind 1024 Schritte, aber 1111111111 oder 0x3FF 
sind nunmal 1023. 2^0 = 1, 2^1 = 2, 2^2 = 4... Nur die größte Erfindung 
der Mathematik wird hier vergessen... 0 und 1 ist die Wertereihe für 
2^0. 0, 1, 2, 3 entspricht der Reihe für 2^2. Wenn per Definition Vref = 
2^n-1 ist, weil für 2^n bereits n+1 Bits benötigt werden, dann frag ich 
mich woher 1024 kommen soll? Der Mensch rechnet vielleicht ab 1, aber 
für einen Computer beginnt alles bei 0.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Udo Neist schrieb:
> 10 Bit sind 2^10 Werte von 0 bis (2^10)-1 = 1023.
Ein 3 Bit Zähler hat dann also 7 Zustände?
0, 1, 2, 3, 4, 5, 6, 7
Hoppla, doch acht Zustände/Möglichkeiten/Zählerschritte/Inkremente?

Udo Neist schrieb:
> Wenn mich meine Rechenkünste nicht verlassen haben, ist der Fehler
> 0,0978%, wenn man anstelle dem korrekten Wert 1023 1024 zur
> Vereinfachung nimmt.
Korrekter Wert 1023? Kurios. Ich zähle in Datenblättern immer auch den 
Schritt 0 mit und komme so auf 1024.

> Der Mensch rechnet vielleicht ab 1, aber
> für einen Computer beginnt alles bei 0.
Und wer programmiert Computer? Softies...   ;-)
In meinen Datenblättern, die ich für meine FPGAs schreibe steht in 
solchen Fällen immer 2**n als Schrittanzahl da.

Ich bleibe dabei: mag es ein jeder so machen wie er es will, so richtig 
falsch wird er sicher niemals liegen.
Ich hoffe nur, dass in dem Flugzeug, in dem ich sitze, ein hardwarenaher 
Programmierer den richtigen Faktor verwendet hat...

von Udo N. (weinbauer73)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Udo Neist schrieb:
>> 10 Bit sind 2^10 Werte von 0 bis (2^10)-1 = 1023.
> Ein 3 Bit Zähler hat dann also 7 Zustände?
> 0, 1, 2, 3, 4, 5, 6, 7
> Hoppla, doch acht Zustände/Möglichkeiten/Zählerschritte/Inkremente?

Hab ich was anderes geschrieben? 2^10 = 1024, aber eine Reihe von 0 bis 
1023.

>
> Udo Neist schrieb:
>> Wenn mich meine Rechenkünste nicht verlassen haben, ist der Fehler
>> 0,0978%, wenn man anstelle dem korrekten Wert 1023 1024 zur
>> Vereinfachung nimmt.
> Korrekter Wert 1023? Kurios. Ich zähle in Datenblättern immer auch den
> Schritt 0 mit und komme so auf 1024.

Der Hersteller gibt doch an, welcher Wert für welche Eingangsspannung 
steht. Demnach ergibt sich eine Gerade mit zwei Punkten. Rechnet man mit 
10 Bit, also 1024, so kommt man bei 5V auf 0.0048828125 Volt pro Wert. 
Aber 1023 als Zähler ergibt? 4.9951171875 Volt... Hoppla...

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Udo Neist schrieb:

> Hab ich was anderes geschrieben? 2^10 = 1024, aber eine Reihe von 0 bis
> 1023.

Du hast die Klammersetzung in deinem Satz vergessen. Anders als 
Programmiersprachen kennt die deutsche Sprache keine eindeutige 
Priorisierung, d.h. es ist unklar ob "bis" stärker oder schwächer bindet 
als "=" oder ob es rechts- oder linksassoziativ ist. ;-)

> Werte von 0 bis ((2^10)-1 = 1023)
> Werte von (0 bis (2^10)-1) = 1023

von Udo N. (weinbauer73)


Bewertung
0 lesenswert
nicht lesenswert
Seit wann ist Deutsch eine Programmiersprache? :-D

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Seit wann ist Chomsky Informatiker?

von Achim M. (minifloat)


Bewertung
0 lesenswert
nicht lesenswert
Chuck Norris wäre ein 1023-Verteidiger. Warum nur?

Ein Komparator ist ja sowas wie ein 1-Bit-ADC.
Jetzt einfach durch 0 teilen.
Sind ja schließlich die maximal darstellbaren Counts minus Eins.

mfg mf

von Schnarch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nein, es sind weder 1023, noch 1024, sondern 10 Schritte,
mit denen das ermittelt wird! ;-)

0b1111111111 = 1023 (dez)

Da vermisst jemand die NULL?

Schritt 1: Uin < 1/2 * Uref,   -> 0
Schritt 2: Uin < 1/4 * Uref,   -> 00
Schritt 3: Uin < 1/8 * Uref,   -> 000
...
Schritt 10: Uin < 1/1024 Uref,  -> 0000000000

Da ist sie - Auf 10 Binärstellen genau! ;-)

Auch wenn man die unschuldigen Geister der Philosophie und
Mathematik beschwört:
Wer sich mal die kleine (!) Mühe gemacht hat, das Prinzip
und die Realisierung der üblichen AD-Wandler zu verstehen,
wird diesem esoterischen Unsinn nicht folgen.

Das Schwierigste daran ist wirklich (!) nur der Name.

von Udo N. (weinbauer73)


Bewertung
0 lesenswert
nicht lesenswert
Eine Potenz berechnet sich wie folgt:

Wobei die Variable a n mal im Termin vorkommt. Der Denkfehler liegt 
darin, dass x^n immer 1 ist und nicht 0, wobei x nicht 0 ist (ist ein 
eigener Fall).

In diesem Term ist die Zahl 2 eliminiert worden, weil 2*0 0 ergibt.

http://de.wikipedia.org/wiki/Potenz_%28Mathematik%29#Nat.C3.BCrliche_Exponenten

Warum funktioniert der 1-Bit ADC trotzdem?

  

von dummschwaetzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
lt Datenblatt TI:
Uin <= VREF- : AD-Wert 0
Uin >= VREF+ : AD Wert 1023

AD-Wert= 1023 *(Uin - VREF- )/(VREF+ - Uin) bzw.

also 1023 richtig.

von Schnarch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@Udo Neist

Warum das Pferd von hinten aufzäumen?
AD-Wandler eliminieren nichts, sie vergleichen.

Ein 1-Bit AD-Wandler nach dem üblichen Prinzip macht das
Gleiche, wie alle Anderen AD-Wandler, nur hört er nach
einem Schritt auf.

Schritt 1: Uin > 1/2 Uref? Ja: EINS, Nein: NULL
Fertig!

Was hat man da?
Den Vergleich des Eingangssignal mit Uref * 2^-1.

NULL: Uin ist 0,0 ... 0,5 * Uref
EINS: Uin ist 0,5 ... SONSTWAS * Uref
(SONSTWAS beschreibt die Spannung, die den AD-Wandler
 gerade noch nicht zerstört.)

Putz dir die Brille: Da steht MINUS EINS im Exponenten!

Hat man sich mal die kleine (!) Mühe gemacht hat, das Prinzip
und die Realisierung der üblichen AD-Wandler zu verstehen,
ist einem auch klar, dass dort nur 0,xxxx von Uref ermittelt
werden kann.

Was darüber ist, wird bei einem 10-Bit-Wandler als das
Ergebnis von 10 Vergleichsaktionen
Uin > (1/2 + 1/4 + ... + 1/1024) * Uref,  -> 1111111111
ausgegeben.

Und was tummelt sich in der realen binären AD-Wandler-Welt
hinterm Komma? - Ganzzahlig negative Zweierpotenzen.

Negative Ganzzahlen haben doch keine NULL. :-(

Und die NULL?

Das ist die ABWESENHEIT aller negativen Zweierpotenzen.

Bei einem 10-Bit-Wandler auf Uref * 1/1024 genau.

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ein Griff in die Mottenkiste förderte folgendes zutage:

Karl Heinz Buchegger schrieb:
> Die Zuordnung sieht
> dann so aus
>
>     Volt  |  ADC-Wert
>    -------+-----------
>     0 - 1 |     0
>     1 - 2 |     1
>     2 - 3 |     2
>     3 - 4 |     3

Oh du Moderator.. äh Mäßiger, wenn du schon etwas verdeutlichen willst, 
dann mach's richtig und nicht so schlampert, wie zitiert.

Also nochmal von mir:

Volt               ADC
0 bis 0.99999999    0
1 bis 1.99999999    1
2 bis 2.99999999    2
3 bis 3.99999999    3
4 bis unendlich     overflow

So ist das mit allen ADC's: die höchste echt meßbare Spannung ist 1 
Digit unter der Referenzspannung. Alles darüber ist Overflow (den 
mancher ADC jedoch als solchen ausweisen kann)


Um auf unseren Hans W**st zurückzukommen:

Hans W. schrieb:
> wenn ich mir Beispiele anschaue mit ADC Messungen, da sehe ich oft das
> z.B. durch 1024 geteilt wird. Aber ist nicht 0-1023 = 1024 Werte richtig
> und somit 1023 zu verwenden?

Nee, eben nicht 0..1023 sind 1024 Zustände und der ADC-Wert 1023 heißt
"Die Spannung ist im Bereich von 1023.0000000 bis 1023.9999999999999999"
Danach kommt der Überlauf.

Oh Leute, was für eine tiefsinnige Diskussion unter gestandenen 
Mathematikern!

W.S.

von Nachtaktiver (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein Bild... .

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:

> Oh Leute, was für eine tiefsinnige Diskussion unter gestandenen
> Mathematikern!

Allerdings. 8 Nachkommastellen bei einem 2-Bit ADC. ;-)

Wenn schon Mathe erwähnen und Haare spalten, dann bitte wenigstens 
entsprechend formulieren:
[0,1)    0
[1,2)    1
[2,3)    2
[3,4)    3

von Udo N. (weinbauer73)


Bewertung
0 lesenswert
nicht lesenswert
> Volt               ADC
> 0 bis 0.99999999    0
> 1 bis 1.99999999    1
> 2 bis 2.99999999    2
> 3 bis 3.99999999    3
> 4 bis unendlich     overflow
>
> So ist das mit allen ADC's: die höchste echt meßbare Spannung ist 1
> Digit unter der Referenzspannung. Alles darüber ist Overflow (den
> mancher ADC jedoch als solchen ausweisen kann)

Aber nur dann, wenn der Hersteller den ADC so ausgelegt hat, das der ADC 
die Referenzspannung bereits als Overflow markiert. Wird die 
Referenzspannung jedoch noch als Wert 3 genommen, stimmt das ganze 
wiederum nicht mehr. Wie wäre es, wenn man auf die tatsächliche 
Implementation des ADCs eingeht und dann entsprechend die Rechnung 
durchführt? Sowas gehört nach meiner Meinung ins Datenblatt und nicht 
nur rein theoretisch erörtert.

von Hagen R. (hagen)


Bewertung
0 lesenswert
nicht lesenswert
@Udo, hast du Beispiele für binär digitale ADCs deren Output nicht zu 
einer Potenz von 2 arbeiten ? (um begründen zu können das man nicht mit 
2^n arbeiten darf).

Ich habe 10 Finger, durchnummeriert von 1 bis 10 oder 0 bis 9 oder -4 
bis +5 oder dunkelrot bis hellblau, eben eine mathematische Menge aus 10 
Elementen. Möchte ich die Menge eines Fingers abzählen so ergibt sich 1 
Finger = 1/10'tel meiner Finger = Finger an meinen Händen / 10 und nicht 
/ 9.

Ein 10 Bit ADC zerlegt also die Inputspannung zischen -ARef bis +ARef in 
eine Menge aus 2^10 = 1024 unterscheidlichen Spannungen. Warum man dann 
mit 1023 teilen soll kann ich nicht nach vollziehen. Nicht von der 
Fehlerabschätzung, nicht aus Sicht der Mathematik und auch nicht aus 
Sicht meiner 10 Finger.

Gruß hagen

von Udo N. (weinbauer73)


Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist doch eher, wie die Implementation ist. Ich habe 
angenommen, dass der höchste vom ADC ausgebene Wert Uref oder drüber 
entspricht. Damit bekomme ich dann bei 2^n Schritten zu merkwürdigen 
Ergebnissen (5V = 4.995V?). Wenn der ADC Uref als Overflow markiert und 
damit Uref-1LSB der höchste Wert ist, dann stimmt 2^n.

Es macht halt einen Unterschied, ob (bei 10 Bit) Uref 0x3FF oder 0x400 
ergibt.

Ich muss aber mal zu meiner Rettung sagen, dass ich nicht tagtäglich mit 
ADCs umgehe und deren Topologie daher nicht sonderlich gut kenne. Wie 
gesagt, jeder ADC hat eine eigene Rechenvorschrift. Die Mehrheit der 
ADCs wird wohl 2^n statt (2^n)-1 brauchen, zumindest hab ich auf die 
schnelle keine anderen gefunden.

von Hagen R. (hagen)


Bewertung
0 lesenswert
nicht lesenswert
Udo Neist schrieb:
> Das Problem ist doch eher, wie die Implementation ist. Ich habe
> angenommen, dass der höchste vom ADC ausgebene Wert Uref oder drüber
> entspricht. Damit bekomme ich dann bei 2^n Schritten zu merkwürdigen
> Ergebnissen (5V = 4.995V?). Wenn der ADC Uref als Overflow markiert und
> damit Uref-1LSB der höchste Wert ist, dann stimmt 2^n.

Ich sehe es eher so: 2^n stimmt auch so, selbst wenn du annehmen würdest 
das der ADC mit einem Overflow Bit bei UIn >= ARef signalisieren würde 
wie auch wenn der ADC dies nicht tut, so wie es fast alle ADCs tun die 
ich kenne. Mit anderen Worten: bei der Frage ob man bei einem 10Bit ADC 
mit 1024 rechnen muß ist es irrelevant wie der ADC bei Vin >= ARef 
reagiert.

Nun die Implementierungen der ADCs die ich kenne ist immer auf Basis 
einer 2'er Potenz. Am Ausgang steht eine Zahl zur Basis 2 mit einer 
Auflösung von n Stellen. Somit ergeben sich 2^n Zustände am Eingang des 
ADC die erfassbar sind. Und das ganz egal ob wir mit 0-ARef oder -ARef 
bis +ARef, oder dunkelrot bis hellblau messen/interpretieren. Möchte man 
einen dieser Zustände ausrechen zu einer gegebene AREf dann rechnet man 
immer mit 2^n und nicht 2^n-1, da es eben 2^n Meßzustände gibt. Oder 
teilst du 100 Euro durch 99 um auf 1 Euro zu kommen ?

Wie es oben schon gesagt wurde: möchte man von exakt -ARef bis +ARef 
messen dann muß man +ARef um 0.5 LSB höher legen. Und das absolut 
unabhängig vom verwendeten ADC Verfahren, das spielt bei der Frage 
eigentlich keine Rolle.

Gruß hagen

von Udo N. (weinbauer73)


Bewertung
0 lesenswert
nicht lesenswert
Für eine Gerade braucht man zwei Punkte 
(http://de.wikipedia.org/wiki/Steigung).

Y-Achse: Spannung
X-Achse: ADC-Wert

y1/x1 nehme ich mal als Nullpunkt an, dann ergibt sich:

Für nachfolgendes nehme ich Uref = 5V an. Es ist ein linearer 10-Bit 
Wandler vorhanden.

Wenn im Datenblatt steht, dass Uref = 0x400 ist und der höchste vom ADC 
zurückgegebene Wert Uref-1LSB ist, dann ist

0x400 benötigen 11 Bit, 0x3FF passen in 10 Bit.

Ist aber Uref = 0x3FF (wenn auch das eher extrem selten sein sollte), 
dann wäre die Formel entsprechend

Die Mathematik ist hier eindeutig. Die Frage ist und bleibt immer noch, 
wie beim ADC die beiden Punkte definiert sind. Warum wiederhole ich mich 
eigentlich dauernd?

von Achim M. (minifloat)


Bewertung
0 lesenswert
nicht lesenswert
Udo Neist schrieb:
> Die Frage ist und bleibt immer noch,
> wie beim ADC die beiden Punkte definiert sind.

A. K. schrieb:
> Wenn schon Mathe erwähnen und Haare spalten, dann bitte wenigstens
> entsprechend formulieren:

Mal ein erneuter Versuch mit einer Abschnittsweise definierten Funktion:
Referenzspannung Uref, Eingangsspannung u, ADC-Counts n
n = {
     0 für                    u <    1 * Uref/1024
     1 für    1 * Uref/1024 ≤ u <    2 * Uref/1024
     2 für    2 * Uref/1024 ≤ u <    3 * Uref/1024
     3 für    3 * Uref/1024 ≤ u <    4 * Uref/1024
     4 für    4 * Uref/1024 ≤ u <    5 * Uref/1024
     5 für    5 * Uref/1024 ≤ u <    6 * Uref/1024
     .        .               .      .
     .        .               .      .
     .        .               .      .
  1019 für 1019 * Uref/1024 ≤ u < 1020 * Uref/1024
  1020 für 1020 * Uref/1024 ≤ u < 1021 * Uref/1024
  1021 für 1021 * Uref/1024 ≤ u < 1022 * Uref/1024
  1022 für 1022 * Uref/1024 ≤ u < 1023 * Uref/1024
  1023 für 1023 * Uref/1024 ≤ u
Passts jetzt endlich?
mfg mf

von Jobst M. (jobstens-de)


Bewertung
0 lesenswert
nicht lesenswert
Die Referenzspannung wird für den DAC in einem SAR-ADC benötigt mit dem 
die Spannung verglichen wird.

Wenn man sich dann einen R2R-DAC vorstellt, sieht man schnell, daß die 
Referenzspannung bei dem höchsten Binärwert am Analogausgang nicht 
erreicht wird.

Daher ist 1 LSB = Vref / 2^N



Gruß

Jobst

von Hagen R. (hagen)


Bewertung
0 lesenswert
nicht lesenswert
Udo Neist schrieb:
> Ist aber Uref = 0x3FF (wenn auch das eher extrem selten sein sollte),
> dann wäre die Formel entsprechend

eben nicht. Der Faktor 1024 und/oder 1023 hängt nur von der 
Quantisierungsbreite des ADCs ab und nicht von den Referenz- oder 
Eingangsspannungen. Wenn der ADC auf 10 Bit auflöst dann gibt es 2^10 
Zustände egal mit welcher ARef du arbeitest, ergo muß man mit 1024 
rechnen und nicht 1023.

Gruß hagen

von Ralph (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Eigentlich simple, es kommt darauf an was man gerade machen will.

Geht es um die Anzahl der Schritte ==> 1024

Geht es um den höchsten Wert ==> 1023

und fertig
also Auflösung ist :

Uref / 1024  == zb 5 Volt / 1024 ==> 0,0048828125 Volt /digit


Spannung für den ADC Wert 1023 :

untere grenze                    obere grenze
(Uref / 1024) * 1023  ====> (Uref / 1024) *1023 +  (Uref / 1024 )
0,0048828125 * 1023   ====> 0,0048828125 *1023 + 0,0048828125   ( 5Volt)

Spannung für den ADC Wert 486 :

untere grenze                    obere grenze
(Uref / 1024) * 486  ====> (Uref / 1024) * 486 +  (Uref / 1024 )
0,0048828125  * 486  ====> 0,0048828125  * 486 + 0,0048828125
2,373046875 V        ====> 2,3779296875 V

Und wo ist da jetzt das Problem ?

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@  Ralph (Gast)

>Und wo ist da jetzt das Problem ?

Welchen Wert man sinnvollerweise anzeigt und als "echt" betrachtet. 
Untere Grenze, Mitte oder obere Grenze. Siehe hier.

Beitrag "Re: 1023 oder 1024"

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Wieviele Iterationen hat diese Thread-Schleife eigentlich schon durch?

von Hagen R. (hagen)


Bewertung
0 lesenswert
nicht lesenswert
Ralph schrieb:
> Und wo ist da jetzt das Problem ?

Das überall wo du (ARef / 1024) stehen hast einige der Meinung sind man 
sollte dort (ARef / 1023) stehen haben. Und das ist bei 10 Bit ADCs eben 
falsch.

> Uref / 1024  == zb 5 Volt / 1024 ==> 0,0048828125 Volt /digit

und URef / 1023 == zb 5 Volt / 1023 ==> 0,004887558 Volt /digit.

Somit würde pro LSB ein Fehler von (2^LSB-1)*0,000004773 Volt entstehen. 
Beim Meßwert 1023 also exakt 4,882815 mV Fehler.

Das man bei 10Bit mit 2^10 = 1024 umrechnet liegt also nicht am ADC 
sondern an der gewählten Diskretisierung auf 10Bit digitale Datenworte.

Gruß hagen

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Udo Neist schrieb:
> Wenn im Datenblatt steht, dass Uref = 0x400 ist

und
> Die Mathematik ist hier eindeutig.

Oh du Mathematiker, WO steht jemand, der exakt auf der Grenze zwischen 
drinnen und draußen steht? Steht er nun drinnen oder draußen? 
Grenzwertbetrachtungen sind manchmal ne kitzlige Sache.

Aber abgesehen davon gibt es wohl kein Datenblatt auf dieser Welt, wo 
drinsteht, daß Uref = 400h ist. Eher steht dort Dieser ADC verträgt eine 
Uref von xx Volt bis yy Volt.

Vielleicht meintest du, daß Uref einem Ergebniswert von 400h entspräche. 
Das wäre exakt und ist "overflow", weil mit 10 Bit nicht darstellbar.

W.S.

von Fer T. (fer_t)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir den Thread gerade mal durchgelesen und denke die Positionen 
verstanden zu haben trotzdem beschäftigt mich folgendes:

Es ist klar das der 10Bit ADC 1024 Zustände hat 0...1023
Wenn ich jetzt so rechne:
ADC * (Uref/1024) habe ich konstant einen maximalen Fehler von 1LSB.
Wenn ich rechne:
(ADC+0,5) * (Uref/1024) habe ich konstant 0,5LSB Fehler.

Und wenn ich ADC * (Uref/1023) rechne habe ich einen Fehler welche von 
-1 bis +1LSB schwankt.

Daher ist es doch rechnerisch am logischen
(ADC + 0,5) * (Uref/1024)
zu benutzen, da der Fehler kleiner ist als bei Möglichkeit 1 und 3.

Aber auch ADC * (Uref/1023) wäre sinnvoll unter dem Gesichtspunkt, dass 
man den maximalen und minimalen Wert tatsächlich erreichen kann 
(unabhängig davon das es nicht wirklich der minimale ist, weil es immer 
noch ungenau ist).
Jedoch ist doch der Fehler insgesamt bei 1023 kleiner als bei 1024.
Ist doch so oder?

Naja für die Praxis ist natürlich 1024 wegen dem shiften, aber 
mathematisch?

MfG

von Ralph (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Und das ganze sind rein theoretische Betrachtungen.
Die Analogbeschaltung des ADC Eingang wird kaum mehr als 8 Bit 
verwertbare Auflösung bieten.
Oder es wird sehr aufwändig und teuer.
Da ist es wirklich unsinnig soviel Aufwand in die Überlegungen zu 
stecken die im Endeffekt eine Auswirkung von weniger als 0.1 % mit sich 
bringen.

Teile durch 1024, das macht es einfacher, und den Rest vergiss einfach.
Das geht im Rauschen des analogen Signals unter.

von Schnarch (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@ Fer T.

Endlich mal jemand, der ÜBERLEGT - und nicht versucht,
Halbwissen in Formeln oder XLS-Tabellen zu verwursten!

"Ein 10-Bit-ADC hat 1024 verschiedene Ausgangszustände"
-> Richtig!

"Wenn ich rechne:
 (ADC+0,5) * (Uref/1024) habe ich konstant 0,5LSB Fehler."
-> Richtig, wenn der ADC ideal ist und 0 V <= Uin <= Uref ist!

"Aber auch ADC * (Uref/1023) wäre sinnvoll unter dem Gesichtspunkt,
dass man den maximalen und minimalen Wert tatsächlich erreichen kann"

-> Hier wird in der WENN-Form geschrieben - und das ist gut so!

Die üblichen AD-Wandler vergleichen das Eingangssignal mit
Vielfachen von 1/2^N von Uref.
(Bei 10-Bit Wandlern ist 1/2^N = 1/1024)

Der minimale Ausgabewert von 10-Bit Wandlern ist 0b0000000000,
wenn Uin < 1/1024 * Uref ist.

Dazwischen wird ein Wert n ausgegeben, der besagt, dass
Uin zwischen  Uref * n/1024  und Uref * (n+1)/1024 liegt.
(Bei einem idealen ADC bestätigt das die +0,5 LSB!)

Der maximale Ausgabewert von 10-Bit Wandlern ist 0b1111111111,
wenn Uin > 1023/1024 * Uref ist.

Innerhalb des Arbeitsbereichs (0 V...Uref) entspricht also
eine Änderung der Eingangsspannung von 1/1024 * Uref einer
Änderung des Ausgabewerts von 1 .
Warum sollte man dann NICHT mit 1/1024 rechnen?

Außerhalb des Arbeitsbereichs kommt (solange dies dem IC,
oder seinem Arbeitsverhalten nicht schadet) der minimale, oder
der maximale Ausgabewert heraus.
1/1023 ist dann egal: Sehr wahrscheinlich errechnet man
auch mit 1/1024 ein grundfalsches Ergebnis...

Wer mit 1/1023 rechnet, ist also doppelt dämlich:

- Es ist falsch. (Auch wenn der Fehler nur 1 Promille ist.)

- Es erfordert (sinnlosen) größeren Aufwand.

von Fer T. (fer_t)


Bewertung
0 lesenswert
nicht lesenswert
Ok Danke :D
War mir klar, das man nicht 1023 nimmt (hab bis jetzt immer 1024 benutzt 
wenn ich einen ADC brauchte), schon alleine daher, dass es einfacher ist 
(Rechnung ;))

MfG

von Michael S. (rbs_phoenix)


Bewertung
0 lesenswert
nicht lesenswert
Das Ding ist einfach, dass ein ADC-Wert einem Spannungsbereich 
entspricht und nicht genau einer Spannung. Da man aber mit jeder Formel 
nur eine bestimmte Spannung ausrechnet, hat JEDES Ergebnis einen Fehler. 
Ob durchgehend +-0,5 oder Durchgehend -1 oder von -1 zu +1. Daher sind 
ansich alle Formeln gleich richtig und auch gleich Falsch. Bei dem 
ADC-Wert 0 will ich 0V errechnen und bei 1023 will ich 5V errechnen. 
keine 4,9999 und auch keine 5,0001. Daher (und wegen der von mir 
beschriebenen Formel, die ich für einen Abgleich benutze) teile ich 
durch 1023 bzw. delta(LSB)

von Klaus W. (mfgkw)


Bewertung
0 lesenswert
nicht lesenswert
Nehmt halt einen 12-Bit-Wandler in Gottes Namen!

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Aber muss man da nun durch 4096 oder durch 4095 dividieren? ;-)

von Klaus W. (mfgkw)


Bewertung
0 lesenswert
nicht lesenswert
Das ist dann aber wirklich weit unter deiner analogen Genauigkeit, also 
kann man es sich getrost aussuchen.
Du kannst dann auch 4094 oder 4097 nehmen :-)

von Vollprofi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Aber muss man da nun durch 4096 oder durch 4095 dividieren? ;-)

Das ist völlig egal, wenn Du vorher eine 1 addierst :-)

A. K. schrieb:
> Wieviele Iterationen hat diese Thread-Schleife eigentlich schon durch?

Ab nun +1!
Ich schlage vor, bei weiteren Berechnungen mit dem Faktor Wurzel aus Pi 
zu rechnen. Nicht, dass das genauer oder sinnvoll wäre, aber es könnte 
ja sein, dass mein ADC bei 5,0003141V Eingangsspannung das Wort "fünf" 
sagt.

Das wäre doch mal was ganz Tolles! ;-)

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Schnarch schrieb:
> "Wenn ich rechne:
>  (ADC+0,5) * (Uref/1024) habe ich konstant 0,5LSB Fehler."
> -> Richtig, wenn der ADC ideal ist und 0 V <= Uin <= Uref ist!

Falsch: der Fehler ist immer noch 1 LSB nur jetzt +/- 0,5

Schnarch schrieb:
> "Aber auch ADC * (Uref/1023) wäre sinnvoll unter dem Gesichtspunkt,
> dass man den maximalen und minimalen Wert tatsächlich erreichen kann"

Der Fehler ist auch hier 1 LSB, nur jetzt aufgeteilt auf 1023 Bit

Dieser Fehler (der ja Eigentlich gar kein Fehler ist) lässt sich mit 
keiner Formel entfernen. Da könnt ihr Kurven Zeichnen und Exel Tabellen 
erstellen so viel ihr wollt :-)
Mann muss sich entscheinen (aber auch nur, wenn man VREF als 
Maximalmesswert benötigt)wo man das fehlende Bit hinzufügt.

/1023 währe eine Lösung. Den Flash und die Zyklen werde ich aber nicht 
verschwenden, wegen dem einen Bit.

(A/D Wert+1)/1024 mit nachfolgendem Abschneiden der 1000stel, ist 
gleichzeitig eine Rundung und braucht fast kein Flash oder Laufzeit und 
ist Deshalb nach wie vor meine Lösung zu Problem Endausschlag VREF.

von Jürgen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen schrieb:
> (A/D Wert+1)/1024

sollte natürlich heissen (A/D Wert+1)*UREF/1024

oder
oder

von Hans W. (hansw)


Bewertung
0 lesenswert
nicht lesenswert
einfache Frage 110 Antworten ;-)

von Jobst M. (jobstens-de)


Bewertung
0 lesenswert
nicht lesenswert
Wenn es wirklich auf dieses 1 Promille an absoluter Genauigkeit ankommt, 
kalibriert man das Ding sowieso. Allerdings nimmt man dann auch einen 
anständigen Wandler ...

Schluss jetzt! :-)


Gruß

Jobst

von oke (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Es gibt m.W. normal rundende und abrundende ADCs. Der MAX1166x ist
> ebenso wie der ADC in den AVRs normal rundend, was bedeutet, dass das
> erste Intervall (Ausgabe 0) nur 0,5 LSB, während das letzte (Ausgabe
> 2^n-1) 1,5 LSB breit ist. Bei einem abrundenden ADC sind alle Intervalle
> gleichbreit, weswegen mir diese Typen sympathischer sind.

Wieso denn? Dann brauchst du nicht mehr in der Software +0.5MSB rechnen 
also kein float.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
oke schrieb:
> Yalu X. schrieb:
>> Bei einem abrundenden ADC sind alle Intervalle gleichbreit, weswegen
>> mir diese Typen sympathischer sind.
>
> Wieso denn? Dann brauchst du nicht mehr in der Software +0.5MSB
> rechnen also kein float.

Das ist richtig. Allerdings wird in vielen Anwendungsfällen sowieso noch
ein Offset addiert, so dass das Runden zusammen mit dem Offset erledigt
werden kann und damit keine zusätzlichen Code-Bytes oder Taktzyklen
benötigt. Float-Rechnung braucht man i.Allg. auch nicht, da man die 0,5
nicht direkt zum ADC-Wert addiert, sondern diesen erst skaliert und dann
den halben Skalierungsfaktor als Ganzzahl addiert.

Der Vorteil beim abrundenden ADC: Wenn man die 0,5 LSB zum Messwert
hinzuaddiert und die Eingangsspannung von 0 bis Uref reicht, ist der
Quantisierungsfehler über den gesamten Messbereich betragsmäßig maximal
0,5 LSB. Beim normal rundenden ADC ist er für das oberste Messintervall
betragsmäßig maximal 1 LSB. Man kann diesen Fehler auf 0,75 LSB
reduzieren, wenn man speziell für dieses oberste Intervall (1023 bei
einem 10-Bit-ADC) noch 0,25 LSB hinzuaddiert. Dafür braucht man aber
zusätzlich zur Addition noch eine Fallunterscheidung, und der maximale
Quantisierungsfehler ist immer noch etwas größer als beim abrundenden
ADC.

Außerdem sieht die Zuordnung von Eingangsspannungen zu ADC-Werten, wenn
man sie bildlich darstellt, für meinen Geschmack einfach schöner aus,
wenn alle "Quantisierungsschubladen" gleichgroß sind :)

abrundender ADC:
  Spannung  0              Uref
            |___|___|___|___|
  ADC-Wert    0   1   2   3

normal rundender ADC:
  Spannung  0              Uref
            |_|___|___|_____|
  ADC-Wert   0  1   2    3

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael Skropski schrieb:
> Bei dem
> ADC-Wert 0 will ich 0V errechnen und bei 1023 will ich 5V errechnen.
> keine 4,9999 und auch keine 5,0001. Daher (und wegen der von mir
> beschriebenen Formel, die ich für einen Abgleich benutze) teile ich
> durch 1023 bzw. delta(LSB)

Ja, weil du nicht wirklich nachdenken willst. Ob nun zu blöd oder zu 
bockig, sei mal dahingestellt. Was machst du eigentlich bei einem ADC, 
der mit ner externen Referenzspannung betrieben wird? z.B. 2.495 Volt 
+/- 50 mV und nen Vorteiler aus 2 Widerständen am Eingang hat ???


Yalu X. schrieb:
> Der Vorteil beim abrundenden ADC:

HA-HA. Oh, du Modulator..

Wer hat schon mal nen abrundenden ADC gesehen? ich nicht, denn alle 
ADC's die ich kenne, tun hardwaremäßig ihr Bestes und runden weder auf 
noch ab. Aber Offsets, Nichtlinearitäten, Kurvenkrümmungen und 
Maßstabsfehler haben ALLE ADC's.

Das Prinzip, was offenbar alle Disputanten hier nicht verstanden haben, 
besteht darin, daß man das Bitmuster, was ein ADC ausspuckt, als 
Integerzahl auffaßt.

Das ist Blödsinn.

Es ist lediglich ein Bitmuster, wo die Wertigkeiten der enthaltenen Bits 
untereinender per Doku des Herstellers definiert sind. Viele ADC's, 
die mehr als 8 Bit liefern, können aus gutem Grunde links- oder 
rechtsbündig ihr Ergebnis in 2 Bytes liefern.

Mathematisch ist das so aufzufassen, daß das Ergebnis des ADC's eine 
echt gebrochene Zahl darstellt. Deren MSB entspricht also 2E-1 (also 
0.5) und wenn man das Ergebnis in Einheiten des Referenzwertes (hier mal 
Referenz- spannung) darstellen will, dann heißt das

Result:= Referenzwert * (ADCWert/Werteumfang);

wobei in unserem Beispiel:
der ADCWert von 0 bis 1023 reicht und
der Werteumfang 1024 beträgt.

Wie man sieht, kann der ADC zwar den Wert 0 Volt darstellen (eben alles 
was negativer als Referenzwert/1024 ist), aber er kommt nur bis auf 1 
LSB an den Referenzwert heran: Referenzwert*1023/1024.

IST EUCH DAS DENN NUN ENDLICH KLAR GEWORDEN???

W.S.

von Ralph B. (rberres)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Wie man sieht, kann der ADC zwar den Wert 0 Volt darstellen (eben alles
>
> was negativer als Referenzwert/1024 ist), aber er kommt nur bis auf 1
>
> LSB an den Referenzwert heran: Referenzwert*1023/1024.
>
>
>
> IST EUCH DAS DENN NUN ENDLICH KLAR GEWORDEN???

Mir ist das schon lange klar. Siehe was ich weiter oben geschrieben 
habe.



>Autor: Ralph Berres (rberres)

>Datum: 14.06.2012 13:04

------------------------------------------------------------------------ 
--------

>Jürgen schrieb:
>> Ist definitiv Falsch. Der A/D-Wandler liefert 1024 Werte, also muss auch
>>
>> durch 1024 geteilt werden.

>Er fängt aber bei Null an. das Heist wenn kein Bit gesetzt ist, dann ist
>auch Null. Aber wenn sämtliche Bits gesetzt sind , dann sind es 1023 und
>nicht 1024.

>1024 ist das 11te Bit.

>Die Schrittweite ist 1/1024 der maximale mögliche Wert aber 1023/1024

>Eben aus diesen Grund zeigt ein 3 1/2 DVM auch nur bis 1.999 an, wie
>oben schon richtig bemerkt.

>Das muss man sich immer klar vor Augen halten.

>Ralph Berres

Aber einigen wird das scheinbar auch nach dem 10 mal erklären nicht 
klar, oder wollen es einfach nicht war haben.

Ralph Berres

von Bernd N. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Bei dem ADC-Wert 0 will ich 0V errechnen und bei 1023 will ich 5V
> errechnen.
> keine 4,9999 und auch keine 5,0001.

Allein das ist schon Blödsinn und die gesamte Diskussion ziemlich 
sinnfrei. Im ersten Schritt sollte man erkennen das hier versucht wird 
1024 Punkte auf 5000 "aufzudehnen", geht eh nicht. Daher sind die hier 
immer wieder angegebenen 4 Stellen hinter dem Komma reiner Blödsinn.

> Was machst du eigentlich bei einem ADC, der mit ner externen
> Referenzspannung betrieben wird? > z.B. 2.495 Volt +/- 50 mV und nen
> Vorteiler aus 2 Widerständen am Eingang hat ???

Das was jeder macht der Denken kann, referenzieren über 2 Stützpunkte 
denn ein ADC dessen Fehler nicht korrigiert werden ist eh unbrauchbar. 
Damit fallen die VREF Fehler und Offset, Gain eh schon raus, auch dein 
Spannungsteiler ist kompensiert.

Der Fehler über den hier dann diskutiert wird bei eintweder 1024, 1023 
ist vernachlässigbar und in der Praxis sieht das dann so aus...

Beitrag "ADC und Fixed-Point Arithmetik"

Für eine weitergehende Diskussion sollte ihr mal euren Code 
bereitstellen und dann vergleichen wir mal ob wir über die 
obligatorischen +/- 1 Digit sprechen.

Ansonsten kann ich nur empfehlen den rüden Ton der hier herrscht ein 
wenig zurückzuschrauben.

von SCNR (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hagen Re schrieb:
> Ich habe 10 Finger, durchnummeriert von 1 bis 10 oder 0 bis 9 oder -4
> bis +5 oder dunkelrot bis hellblau, eben eine mathematische Menge aus 10
> Elementen. Möchte ich die Menge eines Fingers abzählen so ergibt sich 1
> Finger = 1/10'tel meiner Finger = Finger an meinen Händen / 10 und nicht
> / 9.

10 Finger? Zählen wir die eine Hand, sind das Finger 10, 9, 8, 7, 6, 
plus 5 an der anderen Hand, sind 11!

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Bernd N. schrieb:
>> Bei dem ADC-Wert 0 will ich 0V errechnen und bei 1023 will ich 5V
>> errechnen.  keine 4,9999 und auch keine 5,0001.
> Allein das ist schon Blödsinn und die gesamte Diskussion ziemlich
> sinnfrei. Im ersten Schritt sollte man erkennen das hier versucht wird
> 1024 Punkte auf 5000 "aufzudehnen", geht eh nicht.
Im allerersten Schritt sollte man erkennen, dass da noch ne Zehnerpotenz 
fällig ist. Es geht dabei um ein fünfzig-tausend-stel...
Und mit einer Tabelle geht es, bei 1023 immer 50000 zu erhalten. 
Garantiert problemlos.

Bernd N. schrieb:
> Allein das ist schon Blödsinn und die gesamte Diskussion ziemlich
> sinnfrei.   ...
> Ansonsten kann ich nur empfehlen den rüden Ton der hier herrscht ein
> wenig zurückzuschrauben.
Wie definierst du "rüde"?

von Bernd N. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lieber Lothar,

>> Und mit einer Tabelle geht es, bei 1023 immer 50000 zu erhalten.
>> Garantiert problemlos.

Du hast recht, kann man machen. Stellst du bitte einen Code zur 
Verfügung so das ich dann eine Videoaufnahme der 4 Stelle hinter dem 
Komma hier hereinstellen kann ? Das wäre lieb denn dann könnten wir uns 
an der herumflippenden Stelle alle erfreuen.

Besser so ?

von 1/1023 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ihr streitet euch hier um höchstens 1/1023, also noch nicht mal ein 
Promill vom Endwert... wo ist nur eure Toleranz geblieben?

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Wir sind hier im deutschen Kulturraum, da streitet man ums Prinzip!

Rechnen wir das deshalb doch mal runter auf einen 1-Bit ADC. Da meckert 
dann wenigstens kein toleranter Multikulturist rein, es wäre doch so 
oder so genau genug ;-). Sollte man da durch 1 oder durch 2 dividieren?

von Paul Baumann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mit einem richtig guten Freund teilt man Alles: Sein Auto, sein Haus
und auch 5/1024.

;-)
MfG Paul

von 1/1023 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wie heisst es jetzt in der Werbung: "Guten Freunden gibt man ein Bit".

von Hagen R. (hagen)


Bewertung
0 lesenswert
nicht lesenswert
1/1023 schrieb:
> Wie heisst es jetzt in der Werbung: "Guten Freunden gibt man ein Bit".

Und eben nicht 1Bit - 1/1023'tel Bits.

von oke (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Der Vorteil beim abrundenden ADC: Wenn man die 0,5 LSB zum Messwert
> hinzuaddiert und die Eingangsspannung von 0 bis Uref reicht, ist der
> Quantisierungsfehler über den gesamten Messbereich betragsmäßig maximal
> 0,5 LSB. Beim normal rundenden ADC ist er für das oberste Messintervall
> betragsmäßig maximal 1 LSB. Man kann diesen Fehler auf 0,75 LSB
> reduzieren, wenn man speziell für dieses oberste Intervall (1023 bei
> einem 10-Bit-ADC) noch 0,25 LSB hinzuaddiert. Dafür braucht man aber
> zusätzlich zur Addition noch eine Fallunterscheidung, und der maximale
> Quantisierungsfehler ist immer noch etwas größer als beim abrundenden
> ADC.

http://www.freescale.com/files/microcontrollers/doc/app_note/AN2438.pdf

schau mal auf Seite 3. Bei Vref als Eingangsspannung ist streng genommen 
schon ein Overflow, auch wenn ein realer ADC wohl nicht mit einem 
Overflow reagieren wird.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Yalu X. schrieb:
>> Der Vorteil beim abrundenden ADC:
>
> HA-HA. Oh, du Modulator..
>
> Wer hat schon mal nen abrundenden ADC gesehen?

Ich!

... z.B. den AD7827.

Zum Vergleich: Ein "normal" (also zum jweils nächsten Nachbarn)
rundender ADC wäre bspw. der AD7478.

Edit: Ich meinte den AD7477, der AD7478 ist ebenfalls abrundend.

> ich nicht,

Dann hast du entweder nur einen eingeschränkten Überblick davon, was der
Markt so anbietet, oder du hast das Prinzip eines ADC noch nicht
verstanden. Deine weiteren Äußerungen legen die Vermutung nahe, dass
sogar beides der Fall ist.

> denn alle ADC's die ich kenne, tun hardwaremäßig ihr Bestes und runden
> weder auf noch ab.

Jetzt muss ich aber lachen :)

Ein ADC setzt — wie der Name schon sagt — eine analoge (also kontinuier-
liche) in eine digitale (also diskrete) Größe um. Bei dieser Diskreti-
sierung ordnet er viele unterschiedliche Spannungswerte innerhalb
eines durch die Hardware festgelegten Spannungsintervalls einem Ergeb-
niswert zu. Dieser Vorgang wird auch als Runden bezeichnet. Beim Runden
entsteht i.Allg. ein Fehler, der sogenannte Rundungsfehler. Dieser wird
im ADC-Jargon auch als Quantisierungsfehler bezeichnet.

> Aber Offsets, Nichtlinearitäten, Kurvenkrümmungen und Maßstabsfehler
> haben ALLE ADC's.

Das sind weitere Fehler, die zum Quantisierungsfehler noch hinzukommen,
aber nicht Gegenstand dieses Threads sind.




oke schrieb:
> http://www.freescale.com/files/microcontrollers/do...
>
> schau mal auf Seite 3.

Danke für den Link. Das ist genau das, was ich gemeint habe.

Zur Nomenklatur:

       abrundender ADC  =  ADC with uncompensated Quantization
  normal rundender ADC  =  ADC with ½ LSB compensated Quantization

> Bei Vref als Eingangsspannung ist streng genommen schon ein Overflow,
> auch wenn ein realer ADC wohl nicht mit einem Overflow reagieren wird.

Richtig. Wobei beim abrundenden ADC der Overflow tatsächlich erst bei
Uref beginnt, beim normal rundenden aber schon bei Uref-0,5LSB.

Selbst wenn man den abrundenden ADC durch Addition von 0,5 "software-
kompensiert", reicht der overflowfreie Bereich immer noch bis Uref.
Deswegen mach ich die abrundenden Typen lieber :)

von W.S. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Ich!
>
> ... z.B. den AD7827.

Wenn es nicht zu albern wäre, würde ich jetzt über dich herziehen, da du 
ganz offensichtlich den Kommentar "Setzen. 5" verdienst.

Dieser 8 Bit ADC ist alles andere als ein "abrundender" ADC. Er ist eben 
bloß ein stinkgewöhnlicher ADC mit nem Offset-Error von +/- 1.5 LSB und 
nem Gain-Error von +/- 2 LSB. Also ein eher lausiges Teil.

Mal zur mentalen Klarstellung: Wer etwas auf- oder abrunden will, hat 
einen Wert vor sich, der mehr Stellen ausweist, als er ausgeben will. 
Deshalb geht derjenige, der etwas auf- oder abrunden will so vor, daß er 
von den vorliegenden Stellen gemäß gültiger Rundungsregeln einige 
Stellen aus dem Ergebnis entfernt. So ein popliger 8 Bit ADC hat aber 
keine einzige Stelle mehr als besagte 8 Bit, von denen das letzte Bit 
(siehe Datenblatt) ohnehin fragwürdig ist, da es kleiner ist als der 
Offset-Fehler. Da gibt es nix zu runden, weder auf- noch ab- .

Wenn du dich gekränkt fühlst, dann schreib das uns, aber schreib nicht 
so einen Mumpitz daher wie oben. Deine Bemerkung "Dann hast du entweder 
nur einen eingeschränkten Überblick" nehme ich dir nicht krumm, weil ich 
heute meinen jovialen Tag habe und im Glas einen leckeren Syrah Domaine 
Nivet-Galinier 2006.

Meine Güte, um was für eine Kindergartendiskussion geht es hier! Leute, 
die glauben, ein 10 Bit-ADC würde Zahlen von 0 bis 1023 liefern und 
nicht kapieren, daß es sich um Quantelungen handelt und dann noch über 
auf- oder abrundende ADC's im Gegensatz zu nicht rundenden ADC's faseln.

Natürlich kann man auch mit einem 1 Bit SAR-ADC 5 Volt "messen":

if (Portpin) result = 5.0;
else result = 0.0;

Nicht schlecht für einen Software-ADC, gelle ;-)

Wer schon einmal sich um die Grenzen der Ergebnisverwertbarkeit von 
SigmaDelta-ADC's Gedanken gemacht hat, weiß, daß es ganz andere Probleme 
mit den Ergebnisstellen von richtigen ADC's gibt. Je nach 
Programmierung des Frequenzganges des Digitalfilters hat man von den 24 
Bit so eines ADC nur 12 bis etwa 22.5 Bit - mal grob gesagt. Wer sich 
für sowas interessiert, lese mal die Doku zum AD7714. DAS sind viel 
interessantere Gefilde.

W.S.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Yalu X. schrieb:
>> Ich!
>>
>> ... z.B. den AD7827.

> Dieser 8 Bit ADC ist alles andere als ein "abrundender" ADC. Er ist eben
> bloß ein stinkgewöhnlicher ADC mit nem Offset-Error von +/- 1.5 LSB und
> nem Gain-Error von +/- 2 LSB. Also ein eher lausiges Teil.

Die Qualität des ADC hat mit der Art der Rundung nichts zu tun und steht
hier auch nicht zur Diskussion.

> Mal zur mentalen Klarstellung: Wer etwas auf- oder abrunden will, hat
> einen Wert vor sich, der mehr Stellen ausweist, als er ausgeben will.
> Deshalb geht derjenige, der etwas auf- oder abrunden will so vor, daß er
> von den vorliegenden Stellen gemäß gültiger Rundungsregeln einige
> Stellen aus dem Ergebnis entfernt.

Zustimmung.

> So ein popliger 8 Bit ADC hat aber keine einzige Stelle mehr als
> besagte 8 Bit, von denen das letzte Bit (siehe Datenblatt) ohnehin
> fragwürdig ist, da es kleiner ist als der Offset-Fehler. Da gibt es
> nix zu runden, weder auf- noch ab- .

Keine Zustimmung.

Halte dir noch einmal vor Augen, was in den ADC hineingeht und was
herauskommt:

Hinein geht ein kontinuierliches Spannungssignal, das de facto eine
unendliche Auflösung hat oder, wenn du es in einer Stellenzahl
ausdrücken möchtest: Es hat unendlich viele Stellen.

Heraus kommt ein Digitalwert, der aber nur 8 Stellen (in
Binärdarstellung) hat. Ist die Eingangsspannung mit diesen 8 Stellen
nicht exakt darstellbar (was praktisch immer der Fall ist), muss sich
der ADC für einen Wert entscheiden, der etwas zu klein oder zu groß ist.

Entscheidet er sich immer für den nächstkleineren Wert, nennt man das
Abrunden. Das entspricht einem Abschneiden des exakten Werts nach der 8.
Stelle.

Entscheidet er sich für den Wert mit dem betragsmäßig kleinsten Fehler,
nennt man das Runden zum nächsten Nachbarn (ich habe es oben der
kürzeren Schreibweise wegen auch "normales" Runden genannt). Ist die 9.
Binärstelle 0, ergibt sich das Ergebnis aus den ersten 8 Stellen des
Eingangssignals. Ist die 9. Binärstelle hingegen 1, wird zur der aus den
ersten 8 Stellen gebildeten Zahl 1 hinzuaddiert.

Natürlich führt der ADC die Rundung nicht auf digitaler, sondern auf
analoger Seite durch, weil sie dort leichter zum implementieren ist:
Für das Abrunden werden die Schwellwerte auf 1 LSB, 2 LSB, 3 LSB usw.
gelegt, für das normale Runden auf 0,5 LSB, 1,5 LSB, 2,5 LSB usw. Der
Effekt ist aber exakt der gleiche wie bei der Rundung auf digitaler
Seite.

Ist das denn so schwer zu verstehen? Oder störst du dich nur am Begriff
"Runden" für die Art und Weise, wie die Eingangsspannung quantisiert
wird? Dann nenne doch einfach einen besseren.

> Deine Bemerkung "Dann hast du entweder nur einen eingeschränkten
> Überblick" nehme ich dir nicht krumm, weil ich heute meinen jovialen
> Tag habe und im Glas einen leckeren Syrah Domaine Nivet-Galinier 2006.

Das war einfach mein Eindruck nach dem Lesen deines Beitrags.

Trotzdem vielen Dank für die "Nicht-Krumm-Nahme". Im Gegenzug verkneife
ich es mir auch, den Alkoholgehalt deines edlen Tropfens preiszugeben :)

von Jobst M. (jobstens-de)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Natürlich führt der ADC die Rundung nicht auf digitaler, sondern auf
> analoger Seite durch, weil sie dort leichter zum implementieren ist:
> Für das Abrunden werden die Schwellwerte auf 1 LSB, 2 LSB, 3 LSB usw.
> gelegt, für das normale Runden auf 0,5 LSB, 1,5 LSB, 2,5 LSB usw. Der
> Effekt ist aber exakt der gleiche wie bei der Rundung auf digitaler
> Seite.

Was im Prinzip ein Offset(-fehler) ist. Das ist das, was W.S. 
geschrieben hat.

Seid Ihr bald fertig, Kinder? :-)


Gruß

Jobst

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Jobst M. schrieb:
> Was im Prinzip ein Offset(-fehler) ist. Das ist das, was W.S.
> geschrieben hat.

Man kann es also Offset sehen, aber nicht als Fehler. Die Verschiebung
der Schwellwerte um -0,5 LSB bei der ½-LSB-Compensation ist ja beabsich-
tigt und normalerweise im Datenblatt auch so erklärt.

Der OffsetFEHLER ("Offset Error" im Datenblatt) beschreibt eine zusätz-
liche, unbeabsichtigte Abweichung der Schwellwerte. Auch wenn der Off-
setfehler oft betragsmäßig größer als das halbe LSB der Kompensation
ist, ist dies kein Grund, die Auswirkungen derselben zu ignorieren.

von W.S. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Im Gegenzug verkneife
> ich es mir auch, den Alkoholgehalt deines edlen Tropfens preiszugeben :)

Kein Thema: 14.5 vol%

Yalu X. schrieb:
> Ist das denn so schwer zu verstehen? Oder störst du dich nur am Begriff
> "Runden" für die Art und Weise, wie die Eingangsspannung quantisiert
> wird? Dann nenne doch einfach einen besseren.

Ja, es ist nämlich überhaupt nicht zu verstehen, weil es Unsinn ist.
Nochmal in aller Ruhe: Der genannte ADC hat nicht mehr als 8 Bit und er 
kann deswegen auch nicht auf- oder abrunden. Dieser Vorgang findet 
nämlich ausschließlich auf der digitalen Seite statt, wie ich bereits 
schrieb.

Also nochmal:
Falls der ADC ein Ergebnis hätte wie dieses: 1.2358 Volt, er aber nur 
3 Stellen nach dem Komma ausgeben will und deshalb runden würde, dann 
würde er die 8 weglassen und dafür aus der 5 eine 6 machen. Ergebnis 
1.236 Volt. Alles KONJUNKTIV! Kein ADC auf dieser Welt macht sowas, 
keiner kann sowas.

Du scheinst mir einer von denen zu sein, die es nicht schaffen, zu 
anderen mal "OK, hast Recht" zu sagen. Stattdessen kommen immer neue 
Versuche, ja doch mehr Recht zu haben als andere. Mein Rat: mach dir ne 
gute Flasche Roten auf und entspann dich.

W.S.

von Simon K. (simon) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Also nochmal:
> Falls der ADC ein Ergebnis hätte wie dieses: 1.2358 Volt, er aber nur
> 3 Stellen nach dem Komma ausgeben will und deshalb runden würde, dann
> würde er die 8 weglassen und dafür aus der 5 eine 6 machen. Ergebnis
> 1.236 Volt. Alles KONJUNKTIV! Kein ADC auf dieser Welt macht sowas,
> keiner kann sowas.
Man muss auch nicht zwangsläufig in der dezimalen Darstellung runden...

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
@W.S: Hilft dir das hier? Quantisierung impliziert Rundung (bzw. 
rounding or truncation):
http://de.wikipedia.org/wiki/Quantisierungsfehler
http://en.wikipedia.org/wiki/Quantization_error

von Vollprofi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Du scheinst mir einer von denen zu sein, die es nicht schaffen, zu
> anderen mal "OK, hast Recht" zu sagen.

Doch, das könnte er. Aber wieso söllte er?

W.S. schrieb:
> Alles KONJUNKTIV!

Ich denke, im realen Fall habt ihr es Beide im Griff, eine genau und 
sinnvoll arbeitende Schaltung abzuliefern.
Was mich bei einigen 1023/1024 Begründungen stört, ist, einen 
offensichtlichen Rechenfehler (1023er Wert) als genial rundende Lösung 
zu präsentieren.

W.S. schrieb:
> Kein Thema: 14.5 vol%

Das haben die meisten aus dem Luberon :-)

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Nochmal in aller Ruhe: Der genannte ADC hat nicht mehr als 8 Bit und er
> kann deswegen auch nicht auf- oder abrunden. Dieser Vorgang findet
> nämlich ausschließlich auf der digitalen Seite statt, wie ich bereits
> schrieb.

Welcher Vorgang? Der Vorgang des Rundens?

Ich dachte, deiner Meinung nach findet der überhaupt nicht statt?

Und warum sollte ein Teil des Rundungsvorgangs nicht schon auf analoger
Seite bzw. am Übergang zwischen analog und digital stattfinden können?

Aber ich vermute, du verstehst schon, was ich mit einem "abrundendem
ADC" und einem "normal rundenden ADC" meine und stößt dich nur am
Begriff des Rundens in diesem Zusammenhang. Nach den von A. K.
geposteten Wikipedia-Artikeln scheint "Runden" in diesem Zusammenhang
aber zumindest nicht völlig verkehrt zu sein.

Wenn du allerdings einen anderen knackigen Begriff kennst, der das
unterschiedliche Quantisierungsverhalten des AD7827 und des AD7477
besser beschreibt, werde ich künftig gerne diesen verwenden.

Damit noch einmal klar wird, welchen Unterschied ich meine, zitiere ich
hier die entsprechenden Stellen aus den Datenblättern von Analog:

AD7827:
  "The designed code transitions occur at successive integer LSB values
  (i.e., 1 LSB, 2 LSBs, etc.)."

AD7477:
  "For the AD7476/AD7477, designed code transitions occur midway between
  successive integer LSB values (i.e., 1/2 LSB, 3/2 LSB, and so on)."


> Du scheinst mir einer von denen zu sein, die es nicht schaffen, zu
> anderen mal "OK, hast Recht" zu sagen.

Doch, hier findest du genügend Beispiele:

  http://www.google.de/search?q=site:mikrocontroller.net+yalu+"hast+recht";

Ok, die Google-Suche liefert auch viele Fälle, wo mir von anderen recht
gegeben wurde, aber das wird dir ja sicher nicht passieren ;-)

> Mein Rat: mach dir ne gute Flasche Roten auf und entspann dich.

Hab gerade nachgeschaut: Meine Vorräte geben maximal 14% her, den 14,5%
deines Syrah Domaine Nivet-Galinier 2006 habe ich also leider nichts
entgegenzusetzen, es sei denn, wir tun die Werte abrunden :)

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.