Hallo
Ich spiele gerade am micro:bit. Irritiert bin ich, daß der A/D-Wandler
angeblich 0-1023 liefern soll aber 3 liefert, wenn ich einen der 3
großen Pins mit GND verbinde (1023 bei 3V). Eine Suche dazu lieferte mir
keine Erkenntnisse (außer das überall steht 0-1023). Hat das noch nie
einer bemerkt? Warum ist das so? Meine Kabel sind nicht zu hochohmig.
Aus dem Schaltplan
https://github.com/bbcmicrobit/hardware/blob/master/SCH_BBC-Microbit_V1.3B.pdf
werde ich auch nicht Schlau. Angeblich sollen da ja Pull-Ups sein aber
dann müßte ein offener Pin 1023 liefern - tut er nicht (~230, also frei
baumelnd).
Florian schrieb:> Angeblich sollen da ja Pull-Ups sein
ich habe keine gesehen.
Florian schrieb:> daß der A/D-Wandler> angeblich 0-1023 liefern soll aber 3 liefert, wenn ich einen der 3> großen Pins mit GND verbinde (1023 bei 3V).
Toleranzen der integrierten Peripherie.
Woher kommen deine 0V?
Florian schrieb:> Hat das noch nie einer bemerkt?
Doch, steht bestimmt auch im Datenblatt des verwendeten
Mikrocontrollers.
mfg mf
Achim M. schrieb:>> Angeblich sollen da ja Pull-Ups sein> ich habe keine gesehen.
Seite 6
Achim M. schrieb:> Toleranzen der integrierten Peripherie.> Woher kommen deine 0V?
GND ist GND.
Achim M. schrieb:>> Hat das noch nie einer bemerkt?> Doch, steht bestimmt auch im Datenblatt des verwendeten> Mikrocontrollers.
Und warum finde ich dazu nichts?
Florian schrieb:> aber 3 liefert, wenn ich einen der 3> großen Pins mit GND verbinde
Aber funktioniert der ADC grundsätzlich mit einem Potentiometer von 0
bis 3V?
Strategic Head of Lunch Planning schrieb:> Das ist halt Inselaffentechnik.> Die haben keine Erfahrung mit Spaltmassen.
Abschätzige Bemerkungen über andere Völker halte ich für nicht
annehmbar.
Florian schrieb:> Achim M. schrieb:>>> Angeblich sollen da ja Pull-Ups sein>> ich habe keine gesehen.>> Seite 6>> Achim M. schrieb:>> Toleranzen der integrierten Peripherie.>> Woher kommen deine 0V?>> GND ist GND.>> Achim M. schrieb:>>> Hat das noch nie einer bemerkt?>> Doch, steht bestimmt auch im Datenblatt des verwendeten>> Mikrocontrollers.>> Und warum finde ich dazu nichts?
Das weiß ich auch nicht.
Aber möglicherweise schaust Du nicht im Datenblatt des Chips nrf...
sondern in dem von Dir verlinkten Schaltplan. Da steht üblicherweise
nichts über Toleranzen.
Ich empfehle Dir, das Datenblatt zu suchen und evtl. (dann können wir
auch mal nachschauen) hier zu verlinken oder als Anhang zu posten.
An sich sind gewisse Ungenauigkeiten von AD-Wandlern normal. 3 Digits
sind auch nicht ungewöhnlich viel.
Im Anhang findest du einen Ausschnitt aus dem Datenblatt des nRF51822.
Der Offset-Error kann bis zu ±2% betragen, wobei ich keine Information
darüber gefunden habe, worauf sich die Prozente beziehen. Ich vermute,
sie beziehen sich auf den gesamten Messbereich so dass die angegebene
Toleranz ±20 LSB entspricht (was schon recht happig ist). Die von dir
beobachteten -3 LSB liegen also innerhalb der Spezifikation.
Hier hat einer exakt dasselbe Problem:
https://devzone.nordicsemi.com/f/nordic-q-a/5666/adc-accuracy
Die Antwort enthält auch einen Link auf eine Anleitung, wie der Offset-
und der Gain-Error per Software korrigiert werden können:
https://devzone.nordicsemi.com/f/nordic-q-a/4517/how-to-calibrate-the-nrf51-adc-to-correct-offset-and-gain-error
Bei neueren Revisionen des Controllers scheinen die beiden Fehler bei
der Herstellung vermessen und in einen nichtflüchtigen Speicher
geschrieben zu werden, so dass du den ADC nicht selber kalibrieren
musst. Die softwaremäßige Korrektur musst du aber trotzdem noch
vornehmen.
Strategic Head of Lunch Planning schrieb:> Das ist halt Inselaffentechnik.
Seit wann ist Norwegen eine Insel?
> Die haben keine Erfahrung mit Spaltmassen.
Auch ich kann mir unter einer "Spaltmasse" nichts vorstellen. Da ein
Spalt aus nichts (oder maximal aus ein wenig Luft) besteht, müsste seine
Masse sehr klein sein.
Aber hier geht es weder um Inseln noch um Massen, also behalte deine
Kommentare besser für dich.
Also ein ADC sollte doch bei GND auch 0 liefern. Toleranzen hin oder
her. Geht ja gar nicht. Und die nicht wirkenden Pull-ups erklärt mir das
auch noch nicht. Warum sind alle nur so begeistert von dem Ding?
Florian schrieb:> Also ein ADC sollte doch bei GND auch 0 liefern.
Das kommt ganz drauf an wie groß dein Spannungsabfall über den GND Pfad
ist. Der ADC misst innerhalb seiner Referenz, wenn dein GND den du da
anlegst leicht verschoben ist dann kommt auch nicht 0 raus. Das kann
verschiedene Ursachen haben. Ich mein das sind knapp 9mV das halte ich
jetzt nicht für ungewöhnlich. Was erwartest du von einem 10 Bit ADC.
Florian schrieb:> Also ein ADC sollte doch bei GND auch 0 liefern. Toleranzen hin oder> her. Geht ja gar nicht.
Ich fürchte, da unterliegst Du einer falschen Annahme.
Es wäre ratsam, falls Du Dich etwas mit AD-Wandlern und deren
Funktionsweise beschäftigst. (Elektronik-Grundlagen sind dabei
vorausgesetzt).
Je nach Funktionsprinzip läuft die Wandlung meist auf einen Vergleich
von Spannungen oder eine Umsetzung von Strömen in Spannungen hinaus.
Daran sind reale Bauteile beteiligt, die nunmal eine begrenzte
Genauigkeit haben.
Etwas kontro-intuitiv scheint das bei 0 V zu sein, aber das ist leider
eine Täuschung aufgrund der Annahme, dass es wenigstens einen absoluten
Wert gibt - und das sei die Null. Das ist aber nicht so. Auch die 0 V
sind Gegenstand eines Vergleiches (oder einer Umwandlung etc. je nach
Wandler-Prinzip).
> Und die nicht wirkenden Pull-ups erklärt mir das> auch noch nicht.
Das sollte an sich aus dem Schaltplan und der Beschreibung des
Controllers hervorgehen. Am Naheliegendsten ist die Vermutung (ich bin
zu faul und es ist zu warm für mich, das jetzt nachzuprüfen), dass,
entgegen Deiner Vermutung, die Pull-Up-Widerstände nicht an dem
fraglichen Eingang des AD-Wandlers liegen.
> Warum sind alle nur so begeistert von dem Ding?
Nun. Es gibt Unterschiede in der Genauigkeit von Wandlern. Und, wie
schon gesagt, 3 Digits sind nicht soooo viel, dass es sinnvoll ist, den
Controller resp. seinen AD-Wandler für "Schrott" zu halten.
Du siehst ja, es gibt Methoden den Fehler zu kompensieren. Und in der
Regel finden Controller in Fällen Anwendung, in denen solch eine
Abweichung tolerierbar ist.
Ich möchte nochmal darauf hinweisen, dass die Ansicht, die 0 V seien
etwas Besonderes eine Täuschung ist, die mit den Fakten nichts zu tun
hat. Ich verstehe schon, dass so eine Täuschung auftreten kann. (Das
ging mit in anderen Fällen auch so). Aber nichts desto trotz ist es eine
Fehlannahme.
Florian schrieb:> Also ein ADC sollte doch bei GND auch 0 liefern. Toleranzen hin oder> her. Geht ja gar nicht.
Aha. Dann nimm doch "einfach" einen idealen ADC. Und alle anderen
Entwickler sind wohl einfach nur zu doof, weil sie sich mit den real
verfügbaren Bauelementen abgeben und entsprechende Schaltungs- und
Kompensationstechniken einsetzen. In Deiner heilen Welt müssen
Messgeräte wohl auch niemals kalibriert und justiert werden.
Egal, welchen A/D Wandler ich bisher benutzt habe: GND ist 0. Der ATmega
schafft das auch. Und 9 mV bei 5 cm Leitungslänge finde ich happig.
Das Teil soll für Anfänger sein. Wie erklärt man denen, daß 0V nicht 0V
ist?
Florian schrieb:> Also ein ADC sollte doch bei GND auch 0 liefern. Toleranzen hin oder> her. Geht ja gar nicht.
Das Verhalten ist völlig normal. Du hast nur noch keine Erfahrung mit
Technik gemacht. Da ist gar nichts perfekt, der wirst du noch an anderen
Stellen lernen.
Florian schrieb:> Egal, welchen A/D Wandler ich bisher benutzt habe: GND ist 0. Der ATmega> schafft das auch. Und 9 mV bei 5 cm Leitungslänge finde ich happig.> Das Teil soll für Anfänger sein. Wie erklärt man denen, daß 0V nicht 0V> ist?
Es ändert nichts an den Tatsachen, wenn Du in einem Ton Behauptungen
aufstellst und Fragen stellst, der suggeriert, dass die Welt anders ist
als sie sein sollte und die Abweichung an eine persönliche Beleidigung
grenzt. Ebenso halte ich unreflektierte Gegenbeispiele für sinnlos. Im
übrigen haben Deine Formulierungen eine Geruch von Vorwurf und
Unglauben.
Aber Du musst uns unsere Behauptungen ja nicht unbesehen glauben. Die
Erklärungen gehen aus einer intensiven Beschäftigung mit den Grundlagen
hervor. Ich empfehle Dir das noch einmal - und abschliessend (soweit es
mich betrifft).
Viel Erfolg.
Florian schrieb:> Warum sind alle nur so begeistert von dem Ding?
Wer sagt das? Nach meinem Kenntnisstand ist das Produkt schon viele
Jahre bekannt, aber kaum jemand benutzt es zu hause.
Die einzigen, die es großartig loben, sind die Händler und
Fachzeitschriften, die dafür bezahlt wurden.
Für mich ist das Ding im Vergleich zu seinem Nutzen massiv überteuert.
Florian schrieb:> aber 3 liefert
...
> Egal, welchen A/D Wandler ich bisher benutzt habe: GND ist 0. Der ATmega> schafft das auch.
Reduziere deinen ADC mal auf die 10 bit, die ein AVR hat, dann hast du
auch 0.
Jeder, der mit ADC zu tun hat, kennt das nicht anders. Bei 8 bit kennt
man solche Überraschungen nicht, bei 10 bit manchmal und ab 12 bit
immer.
> Wie erklärt man denen (den Anfängern), daß 0V nicht 0V ist?
Die abweichenden Messwerte versteht man, wenn man die Funktionsweise von
Leitungen und ADC verstanden hat.
Absolute 0V kann es ohnehin nur an einem einzigen unendlich kleinen
Punkt geben: Dem Bezugspunkt. An allen anderen Punkten des Universums
kann es keine 0V geben, das ist schon rein physikalisch unmöglich.
Wenn innerhalb des Chips den ADC Eingang mit dem Referenzpunkt für 0V
verbinden könntest, dann würdest du auch absolut sicher den Messwert 0
erhalten. Aber da kommst du nicht heran. Also vergleichst du effektiv
eine Spannung von (aus deiner Sicht) Null Volt mit einer internen, die
(warum auch immer) nicht Null Volt beträgt. Daran ist überhaupt nichts
ungewöhnlich.
Florian schrieb:> Egal, welchen A/D Wandler ich bisher benutzt habe: GND ist 0. Der ATmega> schafft das auch.
Sprichst du da auf einen Arduino an? Ich will nicht wissen was die da in
Software noch so alles kompensieren....
Florian schrieb:> Und 9 mV bei 5 cm Leitungslänge finde ich happig.
mit 5cm liegst du Schätzungsweise (hab jetzt nicht explizit
nachgerechnet) bei Lambda/2 bis Lambda/4 von den WLAN Frequenzen da
wirst du dich mal wundern was man sich da so alles einfangen kann ;)
Florian schrieb:> Das Teil soll für Anfänger sein. Wie erklärt man denen, daß 0V nicht 0V> ist?
Ein Anfänger sollte als erstes lernen das in dieser Welt nichts Perfekt
oder Ideal ist. Was glaubst du wie viele Schaltungen in der Theorie
funktionieren und in der Praxis nicht. Gutes Beispiel sind Transistoren.
Klar kannst du mit einer Stromverstärkung von X und Ube 0,7V rechnen. In
der Realität wirst du feststellen, dass diese Werte nicht stimmen. Nicht
mal innerhalb einer Serie. Grade die Stromverstärkung streut teilweise
ungemein.
Florian schrieb:> Also ein ADC sollte doch bei GND auch 0 liefern.
Richtig.
Selbst ein C520 aus der S.B.Z. hat das geschafft.
Oder die AD-Wandler eines uralten 8 bit PIC.
> "massiv überteuert"
Auch richtig.
Da kann man dann ja gleich besser Phywe kaufen.
Da weiss man wenigstens was man bekommt.
> Seit wann ist Norwegen eine Insel?
Die Norweger haben den "micro:bit" ja auch nicht
der Welt aufs Auge gedrückt.
Florian schrieb:> Egal, welchen A/D Wandler ich bisher benutzt habe: GND ist 0. Der ATmega> schafft das auch.
Der ATmega48 hat laut Datenblatt einen Offset-Fehler von typisch 2 LSB,
Min- und Max-Werte sind nicht angegeben. Die würden wohl deutlich
darüber liegen. 3 LSB Fehler wie beim TE sind also durchaus auch bei
einem ATmega möglich.
Interessanterweise ist beim ATmega2560 ein negativer Wert, nämlich
-2 LSB angegeben, während die bei den meisten anderen Typen angegebene
vorzeichenlose Zahl wohl als ±-Wert angesehen werden kann.
Dieser negative Wert deutet daraufhin, dass der Hersteller den ADC
absichtlich so abstimmt, dass er tendenziell eher nach unten als nach
oben abweicht. Damit werden Leute wie Florian zufriedengestellt, die
damit bei 0V am Eingang garantiert auch eine digitale 0 als Ergebnis der
ADC-Messung sehen. Dass bei 14mV, wo man bei Aref=5V eigentlich eine
digitale 2 oder 3 erwarten würde, immer noch 0 ausgegeben wird fällt den
meisten nicht auf.
Generell ist ein positiver Offset günstiger als ein negativer, da
letzterer für kleine Eingangsspannungen nicht per Software korrigiert
werden kann.
Ein Beispiel aus der Messtechnik, wo das ebenfalls eine Rolle spielt:
Ich habe zwei Multimeter. Das erste zeigt bei einer Widerstandsmessung
mit zusammengehaltenen Messleitungen 0Ω an, das zweite 2Ω. Welches von
beiden ist das bessere?
Ich bevorzuge das zweite, weil ich den Offset von 2Ω leicht im Kopf
subtrahieren kann und dann immer zu einem vernünftigen Messwert komme.
Das erste hingegen (das übrigens deutlich teurer war), zeigt erst ab
realen 4Ω überhaupt einen Wert >0 an. Widerstände mit weniger als 4Ω
kann ich damit schlichtweg überhaupt nicht messen.
Strategic Head of Lunch Planning schrieb:>> Seit wann ist Norwegen eine Insel?> Die Norweger haben den "micro:bit" ja auch nicht> der Welt aufs Auge gedrückt.
Von denen stammt der Mikrocontroller mit dem von dir kritisierten ADC.