Hi. Ich habe ein kleines Problem mit der Auflösungsberechnung meines 10bit ADC. Überall lese ich, dass die Auflösung 1024 Schritte der Vref ist. Gerechnet wird dann für z.b. 5,12 Vref: 5120 mV / 1024 = 5mV Auflösung. Meiner Meinung nach ist das aber falsch, da die 0 mitzählt und der ADC maximal den Wert 1023 annimmt sollte das der Teiler sein. Also 5120 mv / 1023 = 5,00488 mV Praktisch ergibt sich das daraus, wenn ich intern rechne 5mV pro LSB, und die Vref an den ADC halte, dann kommen da 5mV zu wenig raus, weil das maximum ja lediglich 1023 sind. Wer hat hier den Denkfehler? Gruß, Jan
ich weiß dass es 1024 schritte sind aber zur berechnung darf ich nur die 1023 heranziehen. sonst fehlt mir ein digit, weil ich die null nicht mitzähle 1024 schritte sind von 0 bis 1023. und nicht von 0 bis 1024, das wären dann 1025 schritte ich hab ja vorgerechnet wie es läuft, und selbst mit mc probiert.
oder anders ausgedrückt: 0-1023 sind zwar 1024 stationen, aber nur 1023 einheiten ("zwischenräume"), daher darf ich Vref auch nur auf diese 1023 teile aufteilen. verzeiht das doppelposting
Hallo! Bist bestimmt einer, der ziemlich arg auf genauigkeit verhockt, oder? Ich würd dir Vorschlagen, dass du bei deiner Referenzspannung bissel umbauen musst oder mit der "Ungenauigkeit" von 4,88 * 10^-6 V leben musst ... zumal ein üblicher ADC eine maximale Genauigkeit von +/- 1 LSB besitzt, kommst du mit nem 10-Bit Gerät kaum genauer als 10 mV hin. Wenn du also deine genau 5 mV pro Digit haben willst, dann musst auf nen 12 oder 14 Bit ADC zurückgreifen und deine Referenzspannung mit einem Hochgenauen Spannungsmesser einmessen und zusätzlich noch den ADc zu kalbibrieren. Ansonsten musst du mit einer Messgenauigkeit von mindestens +/- 1% rechnen. (Siehe auch diverse Fehlerrechnungsabhandlungen) MFG Hannes
Hi. Natürlich kann man mit dem ADC im Mega8 nicht das größte erreichen. Es ging mir jetzt nur vielmehr darum, ob diese berechnung stimmt denn ein 1024-stufiger ADC hat genau 1023 Einheiten. dass sich das meßtechnisch in den ungenauigkeiten verliert dachte ich mir schon :) natürlich ists "einfacher" zu rechnen. aber man sollte ja nicht freiwillig noch unschärfen reinbringen.
wenn man das mit nem 2Bit- ADC rechnet wirds einfacher. 4V/4=1V oder 4V/3=1.33V binär 0 -> 0V oder 0V 1 -> 1V oder 1.33V 2 -> 2V oder 2.66V 3 -> 3V oder 4V damit ist die Frage doch erledigt, oder?
danke. ich hatte das schonmal für 3bit durchgerechnet und kam halt zu dem ergebnis. allerdings schien mir das so, als wäre ich damit allein im wald, weil wirklich überall mit 1024 gerechnet wird. selbst die hersteller der referenzspannungen werben damit, dass man 5,12V so schön durch 1024 teilen kann. deswegen war ich mir etwas unsicher ob ich nicht falsch gerechnet hätte.
Denkfehler- Vergleich mit Dezimalsystem: obwohl man durch 10 teilt, gibt es nur die Zahlen 0-9 MfG Wolfgang
@wolfgang: genau das ist ja der denkfehler, der gemacht wird. es sind eben nicht n-stellen gleich n-einheiten. sondern immer n-1 einheiten wenn du 10 zaunpfähle aufstellst, sind trotzdem nur 9 zaunelemente drin. siehe das beispiel mit dem 2-bit AD, da sieht mans gut.
Jaja, das neutrale Element machte schon den alten Griechen zu schaffen! lol LG Mike
Hi! Wieso is eigentlich noch nie einer auf die Idee gekommen, das es beim ADC 512 Schritte in negativer und 511 in Positiver Richtung gibt und der eine Schritt, der dazwischen liegt eben die 0 ist? (Angenommen man verwendet den ADC Symmetrisch) MFG Hannes
dann sinds trotzdem nur 1023 schritte. abgesehen davon kann der adc keine negative spannung zu Uref messen. die normale zahl ist immer die spanne von der zahl selbst bis zum beginn der nächsten zahl. sie ist sozusagen single-ended, da nur der anfang definiert wird. beim ADC allerdings ist die messeinheit die spanne zwischen zwei LSB, sie ist also dual-ended. somit besteht bei 1024 bit nur eine anzahl von 1023 mess-spannen, da jeweils am anfang und am ende ein bit zur definition der grenzen gebraucht wird, von hier aus aber kein wert mehr definiert ist.
Kinners, jetzt habt ihr mich aber ganz verwirrt?? wenn ich ins M16 DB schaue dann steht da: The ADC converts an analog input voltage to a 10-bit digital value through successive approximation. The minimum value represents GND and the maximum value represents the voltage on the AREF pin minus 1 LSB. Ist also reine (aber sinnvolle) Definition. Oder anders ausgedrückt: ADC = Vin*1024/Vref Wenn also Vin=Vref bekommt man ... einen Overflow. Oder ging die Frage nur darum wieviel Lücken zwischen 10 Fingern sind? (4, wenn man sie übereinander legt)
Also ich bin gleicher Meinung wie Jan!!! Die Spannung von einem Schritt zum anderen = Vref/1023 und Vout = (Vref/1023)*Eingangswert mfg Patrick
Ahh, ich seh schon... Wie wärs, wir einigen uns darauf, dass wir die richtige Definition (weil einzig logische) haben, verklagen Atmel da sie sich nicht daran halten wegen logischer Grausamkeit gnadenlos auf Schadensersatz (sagen wir 100 Megas für jeden von uns?) und sind zumindest bis zum Rest des Jahres wieder glücklich und zufrieden... ;-) Aber im ernst, Atmel hat halt nunmal festgelegt dass der ADC Wert 1024 halt Vref entspricht. Damit ist der Wert 1 = Vref/1024 und 1023 (der höchste messbare Wert) = (Vref/1024)*1023. Aber wahrscheinlich reden wir vollkommen aneinander vorbei und lassen es für heute einfach einmal gut sein.
Ahh, du siehst nichts... Am besten ist, du zeichnest die Treppe mal auf (z.b. mit 2 Bit) und du sieht von alleine, dass bei einem Eingangssignal von Vref der digitale Wert auf 11 springt. Du siehst dann ebenfalls, dass du Vref/3 teilen musst und nicht durch 4 weil es nur 3 Abstände sind von 0 bis Vref. Aber für eure "Bastleranwendungen" kommt das eine Bit eh nicht zum tragen. (Es gibt aber auch noch Präzisionsarbeiten wo es etwas anders aussieht...) Übrigens: Ist mir eigentlich egal was Atmel sagt und tut. Ich bin nicht "Atmel gezüchtet" wie viele von euch. Ich kann selber rechnen, überlegen und Schema lesen, für das brauche ich Atmel nicht. Gruss Patrick
das stimmt schon, atmel hat die mathematik nicht gepachtet, und atmel darf sich auch mal verrechnen. man kann nicht einfach sowas definieren wie da im datenblatt, denn das würde im klartext heißen 1023 = 1024 :) für fast alle anwendungen ists vermutlich egal. aber wenn man ein bischen geld in die ADC und referenzquellen investiert sollte man auch genau rechnen...
Halt mal die Luft an. Das ganze hat weder was mit "Bastlern" noch mit Atmel zu tun. Die Definition, dass Fullscale (also 2^n-1) gerade einer Spannung von Aref*(2^n-1)/(2^n) entspricht, ist nämlich in sich schlüssig. Vermutlich wirst du selbige daher auch in MAXIM Datenblättern finden können - und jetzt erzähl mir was zu "gezüchteten Bastlern".
Also nochmal... Was ich geschrieben habe, bezieht sich allgemein auf ADC (Herstellerunabhängig). Das kann auch jeder mit einer kleinen Ahnung von Digitaltechnik nachrechnen. So, und jetzt ziehe ich mich zurück für heute und wünsche noch einen diskussionsreichen Abend... Gruss Patrick
Hallo, mal ne Frage: Warum kacken sich Leute in die Hose wegen einem LSB? Von wegen Ahnung von Digitaltechnik und nachrechnen und so: Alles prima, theoretisch kann man alles fuzzelsgenau nachrechnen! Aber hat schonmal jemand nen 1,00056729 Ohm Widerstand mit ner Genauigkeit von 0,0000000001 % gesehen? Nein? Ich au net! Deswegen frag ich mich, für was des wichtig is, ob des jetz 5mV oder 5mv + 0,4µV pro Abschnitt sind, außer für ein Fehlerrechnungslaborbericht im Grundstudium Informationstechnik? Wie ich schonmal gesagt hab: Dieses eine Digit, das bei 1024 (0-1023) Schritten fehlt, wird von allen ADC-Herstellern als Toleranz angegeben. (Evtl. auch mehr) Deswegen: Blödsinn! MFG Hannes
Und ebenfalls nochmal... Was ich geschrieben habe, bezieht sich auch allgemein auf ADC/DAC und ist herstellerunabhängig. Das kann sogar jeder ohne Ahnung von Digitaltechnik nachrechnen, Grundkenntnisse der Grundrechenarten vorausgesetzt. Null: 0 Fullscale: FS = 2^n-1 Das sind genau 2^n Schritte mit dem Abstand Aref/(2^n), also das, was man gemeinhin als 1 LSB bezeichnet. Der größtmöglich darstellbare Wert ist daher nicht Aref, sondern Aref*(2^n-1)/(2^n) = FS * LSB
Ihr habt Probleme.... Nur gut, daß es Menschen wie Patrick gibt, die alles wirklich ganz genau können. Ohne solche Menschen ist ein Atmel-gezüchteter Bastler wie ich natürlich völlig aufgeschmissen. Danke, daß ich an dieser wirklich lebensnotwendigen Diskussion teilhaben durfte. Wer hats erfunden?
schön, dass ihr euch so leucht be-trollen lasst :) tatsächlich gibts da wohl zwischen atmel-datenblatt und realität einen rechenfehler von 1 LSB. zugegeben, das ist nicht viel, aber im ungünstigsten fall addiert sich das mit den anderen fehlern und dann machts schon was aus. und zur genauigkeit: es gibt genug anwendungen die präzision erfordern, z.b. strommessungen im 50-100 A bereich, bei denen am shunt nur wenige mV abfallen...
Hi Jan, lies doch das Datenblatt noch einmal. Es gibt keinen "Rechenfehler" zwischen Atmel und Realität. Das es eine Abweichung zwischen idealem Wandler und dem Tatsächlichen gibt, steht mal ausser Frage. Die darstellbaren Werte eine 2^n Wandlers gehen binär offenbar von 0 bis 2^n - 1. Dies sind genau 2^n Werte, deswegen ist der Abstand zwischen den einzelnen Werten auch gerade Aref/2^n. Dies ist gängige Definition. Es ist müßig zu spekulieren, ob dies nun in der Schweiz anders sein mag oder warum du auf deiner eigenen Rechnung beharrst. Fakt ist, dass der größte messbare Wert nicht Aref, sondern Aref*(2^n - 1)/ 2^n. Wenn du dir das einmal überlegst, lösen sich deine anfänglichen Besorgnisse nämlich auf. Schau dir mal ein R2R Netzwerk an (DAC nicht ADC), da wird dir klar, dass es schon Schaltungsbedingt ist, dass durch 2^n und nicht wie du es vorschlägst durch 2^n - 1 geteilt wird. Es gibt in deinem angeführten Beispiel 1024 Werte (einschliesslich 0 bis einschliesslich 1023). Das es dazwischen einen "Abstand" weniger gibt, spielt keine Rolle, denn nicht den "Abständen" sind Binärkodes zugeordnet, sondern den Werten selbst (aka natürliche Zahlen).
ich nehme an das bezieht sich auf mich. wo bin ich denn hier in diesem beitrag ein troll? nur weil patrick meiner meinung vertritt, muss ich ja nicht für seine methoden verantwortlich sein, oder? ich kann von mir hier nur sachliche beiträge entdecken...
Nochmal zum Verständnis: (was ich aus obigen Posting von Thomas Burkhardt herausinterpretiere): Ist es richtig, daß ein 10Bit ADC mit Uref von genau 5V nur bis maximal 5V/(2^10-1) messen kann, d.h. zwischen 4,9951V und 5V kann der Wandler nicht unterscheiden? D.h. dann auch, daß er nicht bis max. 5V wandelt oder auflöst, sondern 1 Digit darunter? Sind meine Annahmen korrekt? ----, (QuadDash).
@Thomas: Das bedeutet doch dann, daß ein 1-Bit-ADC (oder DAC) (mit Vref=5V) die Zuordnung 0=0V und 1=2,5V hat?
Hallo, > Das bedeutet doch dann, daß ein 1-Bit-ADC (oder DAC) (mit Vref=5V) > die Zuordnung 0=0V und 1=2,5V hat? @Markus: So hätt ich des au gesehen! Im klartext heisst es: 0 => 0V < Uin < 2,5V 1 => 2,5V < Uin < 5V
Hallo, Jan: Ist deine zu messende Analogspannung überhaupt so sauber? Wenn die nämlich 10mV rauschen hat dann wird das eh nichts mit 10 Bit. Das ist auch ein sehr häufiger Fehler das die Analogspannung nicht ausreichend gefiltert ist und da nützt der genauste Wandler nichts.
Darum gehts hier verdammtnochmal nicht ist das klar? Ich find das Thema sehr interessant und verfolge es, aber was mich hier gewissermaßen, zu gut deutsch gesagt "ankackt", sind Leute die meinen, dass es eh keine Rolle spielt wegen mechanischer und elektrischer Ungenauigkeiten. Das mag ja so sein aber darum gehts hier einfach nicht ! Es geht um die gewissermaßen mathematische Definition.
Hallo, hier kommt mein Senf auch noch dazu : - Zum Thema Rauschen und sonstige Genauigkeitsverfälschungen kann ich nur sagen : Total richtg ! 10 bit heißt bei 5V Aref ca. 5mV Auflösung. Den Messaufbau muss man schon ziemlich gut aufbauen, wenn er das wirklich leisten soll. - Zum Thema ADC-Schritte : Die Schrittgröße (und damit der maximal umfassbare Spannungsbereich bei einer gegebenen Bit-Zahl hängt IMHO auch von dem verwendeten Wandlungsverfahren ab. Beim AVR-ADC ist das Verfahren die "Sukkzesive Approximation". Bei diesem Verfahren wird eben mit dem maximal erzeugten Ausgabewert (alle bits = 1) NIE der Referenzspamnnungswert erreicht. (Das liegt daran, dass die Summe über (2)^-k erst bei unendlich konvergiert. Man sehe nach warum ich das hier bringe). Das Wandlungsverfahren geht folgendermaßen vor : 1. betrachtetes Bit b = MSB 2. verwendete Spannung ist U = Uref/2 3. aktueller Spannungswert des ADC Uadc= 0 4. vergleiche Eingangsspannung Uin mit Uadc + U 4a. ist Uin>Uadc+U -> (Uadc = Uadc + U), (setze b) 4b. ist Uin<Uadc+U -> (Uadc bleibt gleich), (negiere b) 5. U = U / 2 6. b ist das nächst niederwertige bit 7. falls die gewünschte Genauigkeit noch nicht erreicht ist, weiter bei 4 Dieses Verfahren kann aus o.g. Gründen Uref nicht erreichen. Es gibt noch andere Verfahren (z.B. dual-slope, direct-conversion), die anders funktionieren (wer hätt's gedacht). Diese Verfahren können auch Wertebereiche von 0 bis Uref einschließlich abbilden. Das direct-conversion-Verfahren besitzt für jede (beliebig wählbare) Schwelle einen Vergleicher, der dann einen bestimmten Zahlenwert als Ergebnis der Wandlung ausgibt. Mit direct-conversion können auch logarithmische oder irgendwelche Phantasieskalierungen des Ergebnisses realisiert werden. Bei dual-slope wird mit einer Konstantstromquelle ein Kondensator geladen und anschließend wieder entladen. Während dem ganzen Vorgang läuft ein Zähler mit einer bestimmten Frequenz. Der Zählerstand, wenn man den Kondensator wieder entladen hat ist das Wandlungsergebnis. Wenn jetzt noch jemand ein wenig Polemik über Definitionen bei der AD-Wandlung äußern möchte, dem sei gesagt, dass die Theorie wurschtegal ist, wenn im Datenblatt des ADC etwas anderes steht. Bei der technischen Realisierung (und außer dieser ist ein ADC nicht sinnvoll - wozu Werte im Kopf AD-wandeln ?) kommt es auf das Verhalten eines Steinchens an und nicht auf die theoretische (ethisch korrekte am besten noch) Verhaltensrichtlinie für Elektronikteile. MfG, Daniel
Ergänzung zu dual-slope : Natürlich wird mit dem Laden des Kondesators aufgehört, wenn die Kondensatorspannung gleich der zu wandelnden Spannung ist und mit Entladen begonnen - sont wäre das ja ein tolles Phantasieverfahren. Übrigens noch folgende kleine Anekdote : In einer meiner Vorlesungen erklärte der Dozent 90 Minuten lang AD-Wandler und zwar wirklich gut und verständlich. Am Ende meldet sich eienr und sagt : "ALso ich habe das alles auch ganz gut verstanden mit der verschiedenen Verfahren, ich muss das wahrscheinlich noch mal anschauen, aber ich denke ich hab's. Eine Frage hätte ich dann trotzdem noch : Warum macht man all den Kram mit der AD-Wandlung eigentlich - man kann den Wert doch einfach messen ?!" Darauf wusste der Dozent leider so schnell auch keine Antwort. MfG, Daniel
Eigentlich ist es doch so, dass bei den meisten AD-Wandler-Verfahren ein Vergleich, ob die gemessene Spannung grösser als eine Referenzspannung ist, durchgeführt. Da das alles diskrete Spannungswerte sind (ist nunmal bei digital so), gibt die vom ADC gelieferte Zahl die untere Grenze eines Intervalls mit der breite LSB wieder. Deswegen sind es bei 10Bit 1024 mögliche Werte (0-1023). Spannungsreferenzen haben dann Werte von 2,55V oder 5,12V, weil das der "nächste" Wert einer Messung wäre. Wenn man sich die Wertigkeit der einzelnen Bits ansieht, stellt man ja auch fest, dass das MSB Uref/2 widerspiegelt. Das setzt sich so bis zum LSB fort. Somit ist es unmöglich, festzustellen, ob es sich bei der gemessenen Spannung um Uref-LSB, Uref oder eine höhere Spannung handelt. Das sollte jetzt nur noch eine Ergänzung sein. Daniel hat Recht..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.