-         
Seite 2 von 7 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 68

Thema: Ein ADC Schritt Ref/n oder Ref/(n-1)

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.754
    Blog-Einträge
    9
    Anzeige

    Um der Sache aus dem Weg zu gehen, einem Irrtum zu unterliegen, kann man auch mit dem Maximalwert des ADC rechnen. Der ist bei 8 Bit 0xFF. Wenn man durch 0xFF teilt und mit 0xFF, zur Probe, multipliziert geht die Rechnung auf. Datentyp muss nur Fließkomma sein. 0xFF entspricht einem Dezimalwert von 255, bei 256 darstellbaren Werten im Hexadezimalsystem (weil die "0" mitgezählt wird).


    MfG

    Nachtrag: hier gab es dieselbe Diskussion: https://forum.arduino.cc/index.php?topic=215673.0
    Geändert von Moppi (06.02.2020 um 10:11 Uhr) Grund: komma

  2. #12
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.579
    Blog-Einträge
    133
    Zitat Zitat von HaWe Beitrag anzeigen
    nein, bei 0 bis 255 gibt es 255 Bereiche (Quantisierungsintervalle), nicht 256 !!

    wenn z.B. nur die Werte 0,1,2,3 möglich wären (2-bit ADC, 2²=4) , entspräche
    0 -> 0 V
    1 -> 1,67 V
    2- > 3,33 V
    3 -> 5 V

    das sind 4 Werte, aber nur 3 Schritte, jeder Schritt 1/3 von 5V. Capisce?
    Aha, da habe ich wieder was gelernt. Aber nicht über den ADC.
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.754
    Blog-Einträge
    9
    Zitat Zitat von Siro Beitrag anzeigen
    Bei einem 8 Bit ADC habe ich 256 Stufen.
    Wenn ich 256 Stufen habe, wäre ein Schritt die Referenzspannung / 256
    Nehmen wir an, ich habe eine Referenz von 5 Volt, dann wäre dies also
    5 / 256 = 0,01953125 Volt

    Der höchste Wert meines ADU bei 8 Bit ist aber nicht 256 sondern nur 255
    somit entspricht der umgerechnete ADU Wert 255 nicht meiner Referenzspannung von 5 Volt
    sondern nur 4,98046874 Volt. Da fehlt doch was

    Da fällt mir noch etwa sein:

    Die Frage ist, wie der ADC die Werte aufteilt.
    So wie Searcher meint, liegen alle Bereiche innerhalb des zu messenden Spannungsbereichs.
    Wenn dem so ist, erhältst Du natürlich bei 0xFF diese 4,98046874V.
    Denn jedem Digitalwert ist ein Offset und ein Bereich zuzuordnen, der abgedeckt wird.
    Während der abgedeckte Bereich eines Wertes immer gleich ist, ist der Offset jedesmal ein anderer.
    Der Offset für den letzten Wert ist also 4,98046874V, der abgedeckte Bereich beträgt 0,01953125V.
    Macht zusammen 4.99999V. Da hast Du (Rundungsfehler) die 5V Obergrenze.
    Der letzte Wert 0xFF reicht also von 4,98046874V bis 5,0V.

    Da der Fehler, bezogen auf einen absoluten Spannungswert, bei insgesamt 0,01953125V liegt,
    musst Du eigentlich den errechneten Wert runden. Beispielsweise auf 1 Stelle nach dem Komma.
    Dann kommst Du bei den errechneten 4,98046874V auf 5,0V.

    Und noch etwas, was vielleicht irgendwie interessant ist:
    Ein Wert vom ADC entspricht einem analogen Schwellenwert. Bei langsam fallender Spannung liegt die Schwellenspannung theoretisch höher,
    bei langsam steigender Spannung liegt die Schwellenspannung niedriger. Weil ein Wert vom ADC einen Spannungsbereich abdeckt.



    MfG

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.117
    .. Der Offset für den letzten Wert ist also 4,98046874V, der abgedeckte Bereich beträgt 0,01953125V ..
    Köstlich. Da teilen wir 5 V durch 256 - oder 255 Teile und erhalten ne Zahl auf ein paar Billionstel genau. Noch dazu, wo im Datenblatt (zumindest in Atmel-42735B-ATmega328/P_Datasheet_Complete-11/2016) steht: ±2 LSB Absolute Accuracy . . . Schön, gut - es geht hier um die Theorie. Aber ich finde so wunderbare Stellenvermehrung einfach - wunderbar - köstlich.

    Ich will ja nicht päpstlicher sein als der Papst, aber die Strecke von Hamburg nach Südschwaben (wo ich wohne) auf Milliardstel aufzuteilen hieße die Entfernung auf etliche Zentimeter (wenige Dezimeter) genau anzugeben. Und wenn man das Ganze auf 256 Teile aufteilt . . . gut , sind immerhin gut 300 Zentimeter.

    .. Bei einem 8 Bit ADC habe ich 256 Stufen ..
    Also in meinen 8Bittern (siehe z.B. Datenblatt oben) können die ADCs nicht nur 8 Bit sondern üblicherweise auch 10 Bit auflösen. Die Daten stehen dann halt in zwei Registern: ADCL und ADCH. Dies nur der Vollständigkeit halber. Die verringerte Auflösung von 8 Bit ist eher ein Sonderfall, der entprechend programmiert werden kann.
    Ciao sagt der JoeamBerg

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.965
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Köstlich. Da teilen wir 5 V durch 256 - oder 255 Teile und erhalten ne Zahl auf ein paar Billionstel genau. Noch dazu, wo im Datenblatt (zumindest in Atmel-42735B-ATmega328/P_Datasheet_Complete-11/2016) steht: ±2 LSB Absolute Accuracy . . . Schön, gut - es geht hier um die Theorie. Aber ich finde so wunderbare Stellenvermehrung einfach - wunderbar - köstlich.
    richtig, es geht um die Theorie.
    Zäumen wir das Pferd von hinten auf, am Beispiel eines sehr "kleinen" 2-bit ADCs, weil das Prinzip deutlicher hervortritt:

    wie schon angemerkt, hat ein 2bit ADC 2² mögliche ADC-Werte (0,1,2,3) mit 3 Messintervallen.
    Daher wären die 5V Messspannung durch 3 zu teilen (entsprechend dem höchsten ADC-Wert), in Schritten zu 5/3=1,666

    0 -> 0 V
    1 -> 1,67 V
    2 -> 3,33 V
    3 -> 5 V

    Würde man hingegen mit 4 Intervallen rechnen, ergäbe sich, in Schritten zu 5/4=1,25:
    0 -> 0 V
    1 -> 1,25 V
    2- > 2,50 V
    3 -> (...5 V)
    Hier wird deutlich, dass dann der letzte Schritt (das letzte Intervall) zu groß wäre im Vergleich zum Messbereich und zu den anderen Intervallen.

    Bei einem 8-bit ADC mit 256 Messwerten in 255 Stufen/Intervallen (entsprechend dem höchsten ADC-Wert) ist dieses Verhalten "analog":
    5V durch 255 geteilt ergäbe gleich große Intervalle (steps), durch 256 geteilt entstünde der gleiche Fehler wie oben beim 2-bitter gezeigt.

    Daher ist mein schon im 2. Post gezeigter Vorschlag mit 255er Teiler IMO der korrekte, und nicht der mit 256.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  6. #16
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.579
    Blog-Einträge
    133
    Zitat Zitat von HaWe Beitrag anzeigen
    wie schon angemerkt, hat ein 2bit ADC 2² mögliche ADC-Werte (0,1,2,3) mit 3 Messintervallen.
    Daher wären die 5V Messspannung durch 3 zu teilen (entsprechend dem höchsten ADC-Wert), in Schritten zu 5/3=1,666

    0 -> 0 V
    1 -> 1,67 V
    2 -> 3,33 V
    3 -> 5 V

    Würde man hingegen mit 4 Intervallen rechnen, ergäbe sich, in Schritten zu 5/4=1,25:
    0 -> 0 V
    1 -> 1,25 V
    2- > 2,50 V
    3 -> (...5 V)
    Hier wird deutlich, dass dann der letzte Schritt (das letzte Intervall) zu groß wäre im Vergleich zum Messbereich und zu den anderen Intervallen.

    Bei einem 8-bit ADC mit 256 Messwerten in 255 Stufen/Intervallen (entsprechend dem höchsten ADC-Wert) ist dieses Verhalten "analog":
    5V durch 255 geteilt ergäbe gleich große Intervalle (steps), durch 256 geteilt entstünde der gleiche Fehler wie oben beim 2-bitter gezeigt.

    Daher ist mein schon im 2. Post gezeigter Vorschlag mit 255er Teiler IMO der korrekte, und nicht der mit 256.
    Falsch!

    Extrem könnte man auch einen als Input konfigurierten I/O Pin als einen 1-Bit ADC betrachten mit zwei möglichen Ausgabewerten. Die zu digitalisierende Eingangsspannung am Pin liegt zwischen GND (0 Volt) und Vcc (zB 5V). Der Ausgabe Wert ist 0 oder 1.

    Nun die Preisfrage: Es gibt zwei mögliche Ausgabewerte (entweder die 0 oder 1). Gibt es einen oder zwei Bereiche (Quantisierungsintervalle) der Eingangsspannung am Input Pin, die den Ausgabewerten zugeordnet sind? Wie sehen diese aus mit Angabe der von- bis-Werten und zugehörigen Ausgabewerte?

    @oberallgeier: Hier nur die Theorie. Die Fehler eines realen ADC sind auch in der App.-Note erwähnt, die ich oben schon mal verlinkt hatte:
    http://ww1.microchip.com/downloads/e...ote_avr120.pdf
    Dort wird findet man auch den Begriff "perfect ADC", der hier diskutiert wird.
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.965
    Zitat Zitat von Searcher Beitrag anzeigen
    Falsch!

    Extrem könnte man auch einen als Input konfigurierten I/O Pin als einen 1-Bit ADC betrachten mit zwei möglichen Ausgabewerten. Die zu digitalisierende Eingangsspannung am Pin liegt zwischen GND (0 Volt) und Vcc (zB 5V). Der Ausgabe Wert ist 0 oder 1.

    Nun die Preisfrage: Es gibt zwei mögliche Ausgabewerte (entweder die 0 oder 1). Gibt es einen oder zwei Bereiche (Quantisierungsintervalle) der Eingangsspannung am Input Pin, die den Ausgabewerten zugeordnet sind? Wie sehen diese aus mit Angabe der von- bis-Werten und zugehörigen Ausgabewerte?

    @oberallgeier: Hier nur die Theorie. Die Fehler eines realen ADC sind auch in der App.-Note erwähnt, die ich oben schon mal verlinkt hatte:
    http://ww1.microchip.com/downloads/e...ote_avr120.pdf
    Dort wird findet man auch den Begriff "perfect ADC", der hier diskutiert wird.
    Falsch!
    es geht um die Abbildung von ADC-Messwerten auf zugehörige Spannungen im gesamten Messintervall!
    Dabei wäre auch sowohl die niedrigste als auch die höchstmögliche Spannung abzubilden (zu repräsentieren).
    ein 1-bit ADC aus deinem Beispiel hat 2 mögliche Messwerte bzw. Zustände (0,1) mit 1 Intervall dazwischen (5/1 = 5):
    0 -> 0V
    1 -> 5V
    Es gibt keine Zwischenschritte oder "fließende Bereiche", da 0 und 1 Integerwerte (Natürliche Zahlen) sind, keine rationalen oder reellen Zahlen: sondern nur feste Schritte in nicht stetigen festen Stufen.
    Da die Schrittgröße beim ADC 1 ist, ist die statistische Genauigkeit beim ADC immer ±1, das gleiche gilt für das zugeordnete Spannungswert-Intervall (das hatte oberallgeier bereits angedeutet).
    Geändert von HaWe (06.02.2020 um 16:57 Uhr) Grund: typo
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    986
    Ersteinmal Danke an alle, für die Anteilnahme,
    wie erwartet, gibt es hier unterschiedlichen Ansichten.

    Was ist richtig, was ist falsch, ich weis es auch nicht,
    hatte aber grade folgendes Gedankenspiel:

    Warum gibt es Spannungsreferenzen zu kaufen die so krumm sind:
    2,048V oder 4,096V
    Weil sie genau 2^11 bzw. 2^12 entsprechen

    Somit hat man bei der entsprechenden Bitbreite pro ADU Schritt exakt 1 mV.
    Man erspart sich damit umständliche Berechnungen und ich
    vermute mal das war der Sinn dieser krummen Referenzen.

    Wenn dem so ist, dann ergibt ein maximaler Aducount beim 11 Bitter
    Wertebereich 0..0x7FF (2047 dez) einen Spannungsbereich von 0..2047 Millivolt
    Die volle Referenzspannung wird dann nie erreicht, es fehlt ein LSB
    so wie zum Beispiel bei Atmel beschrieben.
    Dies entspräche der Berechnung Vref/(2^n)
    auf den 8 Bitter bezogen wäre es also einem Divisor von 256 = Vref/n

    Die Diskussion kann man vermutlich ewig weiterführen,
    ich finde aber die Standpunkte/Erläuterungen von euch auch recht interessant.

    Wie ja schon Eingangs erwähnt geht es mir nicht darum ob meine Werte aufs letzte Bit stehen,
    sondern um die Festlegung, sofern es eine gibt, wie die korrekte Berechnung aussehen müsste.

    Es gibt hier z.B. einen Calculator:
    https://www.electronicdeveloper.de/A...Converter.aspx
    Dieser basiert meiner Meinung nach auf (n-1)

    Bei einem 2 Bit Wandler würde ich es wie folgt interpretieren.
    Ref/n 5V/4 Schritte = 1,25V Schrittweite

    ADC
    0 -> 0,00 V 0..1,24
    1 -> 1,25 V 1,25..2,49
    2 -> 2,50 V 2,50..3,74
    3 -> 3,75 V 3,75.....auch bis über Vref

    ----
    @Klebwax:
    Im Prinzip ist mir das auch egal wie die Berechnung erfolgt, da ich es auch völlig anders berechne.
    Beim Kalibrieren lege ich eine möglichst konstante Spannung an den Messeingang und merke mir den
    aktuellen Aducount. Dann weis ich, dass bei dieser Spannung mein Aducount xxx beträgt.
    Den Rest kann ich dann berechnen und verlasse mich darauf, dass sich die Messkette linear verhält.
    Zudem ist die Bitbreite des ADU damit völlig eagl, wobei "mein Code" hier auf maximal 16 Bit beschränkt ist.

    Code:
    U16 CalAtmV = 5000;  // Kalibriert wird bei exakt 5,000 Volt 
    U16 CalCount;        // gemessener Aduwert bei der Kalibrierspannung 
    
    /*----------------------------------------------------------------------------*/
    // Die Umrechnung ADU Count in Millivolt findet dann hier statt:
    
    U16 Calculate_mV(U16 adc_count)
    { S32 value;             // we need < 32 Bit value for calculation
    
      value  = adc_count;    // convert 16 bit value to 32 Bit 
      value *= CalAtmV;      // multiply with Calibration Point Voltage 
      value /= CalCount;     // divide with ADC Calibration count at Calibration Voltage
        
      return (U16)value;     // return with 16 Bit result in mV
    }
    /*----------------------------------------------------------------------------*/
    Weiter Diskussionenn habe ich unter anderem auch hier gefunden:
    https://www.mikrocontroller.net/topic/261692

    Bei Maxim habe ich folgendes gefunden:
    Klicke auf die Grafik für eine größere Ansicht

Name:	MCP3221_1_LSB.jpg
Hits:	6
Größe:	28,6 KB
ID:	34798

    Siro

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.579
    Blog-Einträge
    133
    Zitat Zitat von HaWe Beitrag anzeigen
    es geht um die Abbildung von ADC-Messwerten auf zugehörige Spannungen im gesamten Messintervall!
    Nein. Es ging um die Frage die Siro gestellt hatte:
    Zitat Zitat von Siro Beitrag anzeigen
    Frage
    wie berechne ich einen ADU Schritt.
    Ich bin der Meinung, daß es bei einem 8-Bit ADC VRef/256 sind, wie es aus der Application Note des Herstellers zu verstehen ist.
    Das bestreitst du und behauptest daß es VRef/255 sind.

    Lies dir also nochmal meine Frage durch und versuche von dem 1-Bit ADC auf einen 8-Bit ADC zurückzuschließen. Oder muß ich dazu multiple choice Antworten formulieren.

    In jedem Fall verstehe ich nicht, was die Pfeile in
    0 -> 0V
    1 -> 5V
    bedeuten sollen.
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.965
    @Siro:
    ich würde die Volt-Bereiche beim 2-bitter völlig anders interpretieren, wobei diese natürlich willkürlich numerisch gesetzt sind und nicht statistisch oder stochastisch verifiziert (was der bessere Weg wäre, über statistische Messreihen mit einem berechenbaren Signifikanzniveau):

    0 -> 0 V (0...0,83)
    1 -> 1,67 V (0,84...2,50)
    2 -> 3,33 V (2,51...4,16)
    3 -> 5 V (4,17...5,0)

    Diese basieren dann nach wie vor auf dem Intervall-Teiler 5/3, nicht 5/4, denn es sind nach wie vor 3 Intervalle und nicht 4 !
    Analog gilt das dann bem 8-bitter für 5/255.

    das Zeichen
    ->
    kennzeichnet eine mathematische Abbildung ("Funktionswert") von einem Wert auf einen anderen.
    Geändert von HaWe (06.02.2020 um 17:54 Uhr)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

Seite 2 von 7 ErsteErste 1234 ... LetzteLetzte

Ähnliche Themen

  1. Entscheidungshilfe Schritt oder Getriebemotor
    Von Atmega328 im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 30.04.2014, 16:38
  2. Antworten: 5
    Letzter Beitrag: 09.10.2013, 10:50
  3. Suche Drehtisch/Schwenkkopf für Kamera (Schritt oder Servo)
    Von MasterFX im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 5
    Letzter Beitrag: 13.07.2013, 07:28
  4. Schritt- oder Getriebemotor?
    Von logliner im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 22
    Letzter Beitrag: 28.08.2012, 14:47
  5. welchen motor, schritt oder servo?
    Von x3oo im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 23.03.2010, 21:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •