Go Down

Topic: ADS1115 Genauigkeit (16bit) (Read 1 time) previous topic - next topic

patrick_bit4bit

Quote
Und auch die gleiche Lib, in der frischesten Variante.
--> aktualisiert
Quote
Das Ganze mit der gerade aktuellen IDE 1.8.13
--> bereits die aktuellste gehabt

Quote
Allerdings mit der AVR-GCC 9.3 mit aktiviertem gnu++17 (C++17)
--> was genau machst du da?

welches Board hast du verwendet? Müsste ja eig unrelevant sein oder?


combie

Quote
welches Board hast du verwendet?
Das gleiche wie du.


Quote
--> was genau machst du da?
Dieses!

Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

patrick_bit4bit

wie kannst du wissen welches Board ich verwende? :)

Quote
welches Board hast du verwendet?
Das gleiche wie du.

patrick_bit4bit

Eventuell kannst ja noch jemand bei Gelegenheit versuchen - diese Library ist auf ADS1115 angepasst was die Adressen der SPS, Gain, etc... angeht.

Meinen Code habe ich unter "examples" --> "custom" --> "custom.ino" gelegt.

combie

#19
Jul 02, 2020, 10:09 pm Last Edit: Jul 02, 2020, 11:44 pm by combie
wie kannst du wissen welches Board ich verwende? :)
Meine heilige Kristallkugel sagte mir:
Du verwendest einen UNO.
Die ist sich so sicher, dass es schon knistert.
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Doc_Arduino

#20
Jul 02, 2020, 10:12 pm Last Edit: Jul 03, 2020, 11:09 am by Doc_Arduino
Hallo,

da ich den IC nicht habe, kann ich nur an Hand vom Datenblatt helfen.
combie scheint den IC vor sich liegen zu haben.  ;)

Im Grunde hast du es ja schon verstanden, vielleicht nur noch nicht verinnerlicht und umgesetzt.
Also, wenn du Single-Ended misst, dann kann der IC nur im positiven Bereich messen - Masse bezogen.
Demzufolge sind nur 15 Bit Ausgabe möglich - die positive "Hälfte". Das Maximum 0x7FFF sind jedoch 32.767 und nicht 32.768. Das steht in 9.5.4 unter "Note".

Jetzt musst du dem IC nur noch sagen das er Single-Ended messen soll. Sonst hängt der 2. Diff-Eingang vermutlich in der Luft und wird vermutlich zu Fehlmessungen führen. Dazu schaust du dir das Config Register Field MUX in 9.6.3 an. Oder nutzt die Lib dazu.

Wenn du unbedingt den 16Bit Messbereich haben möchtest, sollte nichts dagegen sprechen Differential zu messen. Nur das du den 2. Bezugseingang auf Masse klemmst. Aber, dass ändert nichts an deinem Messwert den du bekommst. Denn du misst dann auch nur Massebezogen im positiven Bereich. Tipp. Verwechsel nicht Messbereich mit Messauflösung.

Wegen deinen 16er Sprüngen. In welcher Auflösung gibt denn dein "20mA Sensor" seinen Strom raus? Solltest man in die Überlegung einbeziehen. Oder arbeitet dieser rein analog?

Edit:
Vielleicht solltest du auch erstmal mit einem Festspannungsteiler messen/testen um andere Fehler auszuschließen, wie zum Bsp. deinen Sensor.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

patrick_bit4bit

@Doc_Arduino

Danke für deine Hilfe.

Dass der ADS1115 15bit bei Single_Ended misst ist mir klar sowie auch der Wert von 0 bis 32k reicht.
Das sehe ich auch aus meinen Ergebnissen, dass dieser bei ca 200mV rund 25000 ausgibt.

Das komische jedoch ist, dass der nicht jede beliebige Zahl dazwischen annimmt - immer nur in 16er Schritten.
Ich habe es jetzt auch mit einem Mega2560 versucht und das gleiche Ergebnis erhalten.
Schon langsam weis ich nichtmehr was ich noch versuchen kann...


Wie genau die Sensoren sind, die später zu messen sind ist momentan noch unrelevant. Aber ja da hast du recht, diese können auch eine kleinere Auflösung haben...

Den Sensor habe ich als Fehlerquelle ausgeschlossen. Warum sollte der genau in diesen Steps arbeiten?! Auch wenn ich keinen Stromfluss habe bzw. keinen Sensor dran, dann pendelt der Wert zwischen -32, -16, 0, 16 ,32, etc... herum

my_xy_projekt

#22
Jul 03, 2020, 12:54 pm Last Edit: Jul 03, 2020, 01:07 pm by my_xy_projekt
Auch wenn ich keinen Stromfluss habe bzw. keinen Sensor dran, dann pendelt der Wert zwischen -32, -16, 0, 16 ,32, etc... herum
Nur zum Verständnis: Der AIN des 1115 Open übergibt Dir 16er Schritte?

Quote
Das komische jedoch ist, dass der nicht jede beliebige Zahl dazwischen annimmt - immer nur in 16er Schritten.
Den Sensor habe ich als Fehlerquelle ausgeschlossen. Warum sollte der genau in diesen Steps arbeiten?!
Wenn ich Deine 16bit nehme und mir Deine Einleitung ansehe:

Code: [Select]
Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
schwant mir, das 16*0.1875 genau 3 egibt. Der kippt nicht mit 16 bit, sondern mit 1.

Da stimmt die Auflösung nicht - falscher/gefälschter Chip? Vielleicht auch nicht. Wer weiss.

Wenn Ich Deine 25000 nehme und durch 16 teile, komme ich dahin, wo combie schon war - nämlich 4stellig.
Und hätetst Du Deine Werte nicht als Foto sondern normal als Ausgabe reinkopiert, hätte man das ggfls. sogar noch nachrechnen können.
25600/16 -> 1600
25616/16 -> 1601
25664/16 -> 1604

Irgendwas ist faul.

patrick_bit4bit

Ja genau, die Werte kommen direkt aus dem ADS1115.

Code: [Select]
//                                                                ADS1015  ADS1115
  //                                                                -------  -------
  //ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  //ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  //ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  //ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV


Der ADS1115 gibt lt. Datenblatt 16bit aus, das heisst ich muss die bits bei höchstem Gain mit 0.0078125mV multiplizieren.

Hier zum Vergleich die Ausgabe von der Messung 0- ~190mV:
Gain_2/3:
Code: [Select]
AIN0: 0
 AIN0: 48
 AIN0: 128
 AIN0: 176
 AIN0: 224
 AIN0: 320
 AIN0: 368
 AIN0: 448
 AIN0: 512
 AIN0: 560
 AIN0: 656
 AIN0: 688
 AIN0: 800
 AIN0: 848
 AIN0: 896
 AIN0: 960


Gain_4:
Code: [Select]
AIN0: 0
 AIN0: 256
 AIN0: 512
 AIN0: 976
 AIN0: 1392
 AIN0: 1648
 AIN0: 2192
 AIN0: 2528
 AIN0: 2976
 AIN0: 3344
 AIN0: 3664
 AIN0: 3968
 AIN0: 4480
 AIN0: 4800
 AIN0: 5232
 AIN0: 5616
 AIN0: 5776


Gain_16:
Code: [Select]
AIN0: -16
 AIN0: 1072
 AIN0: 2976
 AIN0: 4336
 AIN0: 5936
 AIN0: 7824
 AIN0: 8880
 AIN0: 10816
 AIN0: 12144
 AIN0: 13424
 AIN0: 15568
 AIN0: 16688
 AIN0: 18016
 AIN0: 20176
 AIN0: 21232
 AIN0: 22992
 AIN0: 22960
 AIN0: 23104
 AIN0: 22864
 AIN0: 23008
 AIN0: 22976
 AIN0: 23104



Sehr seltsam das Ganze... wahrscheinlich sind die Dinger wirklich billige Kopien...
Oder ich mache Grundlegend etwas falsch...




patrick_bit4bit

GELÖST!

Du hast mich auf eine Idee gebracht... ich habe jetzt einfach versucht den ADS1015 zu nehmen und tada:
Code: [Select]
AIN0: 193
 AIN0: 194
 AIN0: 194
 AIN0: 193
 AIN0: 193
 AIN0: 251
 AIN0: 335
 AIN0: 422
 AIN0: 544
 AIN0: 618
 AIN0: 736
 AIN0: 829
 AIN0: 901


Der ADS1015 hat nur 12bit....

So ne Sch**** - muss ich sofort wieder zurückschicken. Bei meinen 3 Modulen steht dick und fett ADS1115 drauf...

Danke Jungs für die Hilfe!

combie

#25
Jul 03, 2020, 01:51 pm Last Edit: Jul 03, 2020, 01:54 pm by combie
Quote
combie scheint den IC vor sich liegen zu haben.  ;)
Jawoll!
So, es ist.
Restbestände....
Ein Effekt des "im Dutzend billiger beim FC"


Quote
Wenn Ich Deine 25000 nehme und durch 16 teile, komme ich dahin, wo combie schon war - nämlich 4stellig.
Ne soweit habe ich nicht gedacht.
Denn Motor/Sensor, mir fehlt.
Ebenso das Datenblatt zu diesen.(könnte ja wider Erwarten informativ sein)

Mein Test erfolgte mit Poti und dran rum drehen.
Ist also eher ein zufälliger Wert aus dem Spektrum der Möglichkeiten/Potistellungen.
Die leichte Wertstreuung meiner Daten ist ein Resultat der Brummeinstreuung durch einfaches "Finger auf das Poti legen"

Und doch:
Einige wenige Punkte habe ich nachgerechnet, und mit einem Multimeter verglichen, die Werte waren recht plausibel.
Gut genug, um mit einer 2 Punkt Kalibrierung (Geradengleichung), das Faß zu zu machen.
(dann spart man sich viel des Rechenaufwandes)


Grundsätzlich:
Von 16er Sprüngen ist weit und breit nichts zu sehen.


---------

Nachtrag:
Tja, ADS1115 vs. ADS1015
Interessant!
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

my_xy_projekt

GELÖST!

Du hast mich auf eine Idee gebracht... ich habe jetzt einfach versucht den ADS1015 zu nehmen und tada:
Ja. hab ich wohl so gemeint .... 1bit

Ne soweit habe ich nicht gedacht.
Denn Motor/Sensor, mir fehlt.

Mein Test erfolgte mit Poti und dran rum drehen.
Ich hab garnichts davon hier.
Doch nen Poti schon. ;)
Heute hat mich die Überschlagrechnung beim Code lesen nicht im Stich gelassen.

Da war dann das in Einklang bringen der Werte mit denen des OP ein Versuch wert.
Ohne Deine hätte ich das nicht aufgedröselt.

my_xy_projekt

Bei meinen 3 Modulen steht dick und fett ADS1115 drauf...
Auf der Platine oder auf dem Chip?
Für die Suche auf letzterem und für Risse in Leiterplatten etc. habe ich mir eine Farbkamera angeschafft.

Suchmaschiene Deiner Wahl: DP-M04
(gibt es so wohl nicht mer, aber irgendein Nachfolger)

patrick_bit4bit

Auf der Platine, die habe ich extra bei AZ Delivery bestellt... nicht von AliExpr..

Auf dem Chip kann ich das Logo von Texas Instruments, 92 und BOGI entschlüsseln.

Mit der Library für ADS1015 funktioniert alles sauber. Die 12 bit stören mich zwar, aber ich kann den Fehler zumindest eingrenzen.

Das komische ist, dass alle 3 gleich ticken...

Ich habe zur Sicherheit noch eine weitere Library probiert, die aber auch gleiche Werte liefert..

Doc_Arduino

Nachtrag:
Tja, ADS1115 vs. ADS1015
Interessant!
na jetzt wird es lustig wenn beim TO der falsche IC drauf sitzt.  :)

@TO: wenn du dich beim bestellen nicht vertan hast > eiskalt reklamieren.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up