ADS1115 Genauigkeit (16bit)

In welchem Fall weist dieser die 16bit Genauigkeit auf?

Bei mir springt der Wert in 16er Schritten zwischen 0 und 65k.

SPS habe ich auf 128 gestellt.

Danke!

patrick_bit4bit:
In welchem Fall weist dieser die 16bit Genauigkeit auf?
Bei mir springt der Wert in 16er Schritten zwischen 0 und 65k.
SPS habe ich auf 128 gestellt.

Also so eine genaue Beschreibung mit geheimem Aufbau und geheimen Code ist mir eine genaue Antwort wert.

Wenn Du mehr erwartest, dann bitte komm mit Infos.

Ich tippe mal darauf, daß nur 15bit genutzt werden, also das +/- bei der FSR bei Punkt 9.3.3. im Datenblatt übersehen wurde.

Gruß André

@ my_xy_projekt → eventuell hast du ja jetzt mehr Information, als das mir bereits bekannte Datenblatt parat.
Ich habe auch die Kommentare drin gelassen, falls diese noch zur Urteilsfindung beitragen.

#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */


void setup(void) 
{
 Serial.begin(115200);
 Serial.println("Hello!");
 
 Serial.println("Getting single-ended readings from AIN0..3");
 Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
 
 // The ADC input range (or gain) can be changed via the following
 // functions, but be careful never to exceed VDD +0.3V max, or to
 // exceed the upper and lower limits if you adjust the input range!
 // Setting these values incorrectly may destroy your ADC!
 //                                                                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
 ads.begin();
 Serial.println("started");

}

void loop(void){
//int16_t adc0 = ads.readADC_SingleEnded(0);
 int16_t adc0 = ads.readADC_SingleEnded(1);
 float resistance = 10.2;
 float mV = adc0 * 0.0078125;
 float mA = mV/resistance;

 float output = mapfloat(mA, 0, 20, 20, 125); 

 //Serial.print("mA: "); Serial.println(mA);
 //Serial.print("mV: "); Serial.println(mV);
 Serial.print("AIN0: "); Serial.println(adc0);
 //Serial.print("temp: "); Serial.println(output);
 //Serial.println(" ");
 delay(100);

}

float mapfloat(float x, float in_min, float in_max, float out_min, float out_max){
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

@ SpaghettiCode
Da hast du Recht, ich glaube der Sensor hat nur 15bit im positiven Bereich.
Aber warum dann in 16er Schritten? dann müsste der ja in 2er Schritten springen, oder nicht?

Bei mir springt der Wert in 16er Schritten zwischen 0 und 65k.

Also liest Du Werte des gesamten Spannungsbereich.
Fehlt die Masseverbindung der Meßspannung?

SPS habe ich auf 128 gestellt.

Was bedeutet das? Ist das ein PWM Ausgang?

Grüße Uwe

Hallo,

... ich glaube der Sensor hat nur 15bit im positiven Bereich.

Damit bist du ganz nah dran. Das ist abhängig von der Konfiguration.
Du treibst irgendwas mit einem 10,2 Ohm Widerstand. Vermutlich misst du den Spannungsabfall.
Mist du Single-Ended oder Differenz?
Zur Messung, 9.5.4 hast du komplett gelesen?
Die Antwort darauf löst deine Frage.

Ein Schaltplan wäre nicht falsch.

@ Uwe:
SPS ... Samples pro Seconds = 128

SPS Speicher Programierbare Schaltung.
Grüße Uwe

Hallo,

SPS ... Speicherprogrammierbare Steuerung :grin:

@Do_Arduino

Die Information unter 9.5.4 ist mir leider zu hoch und übersteigt meinen Wissensbereich.
Kannst du das bitte kurz erleutern?

Ich habe mich eher auf diesen Artikel bezogen (siehe Anmerkung…jpeg).

Wenn das also stimmt, dass der im positiven Bereich 15bit hat, dann würde es ja bedeuten dass die Ausgabe von 0-32768 festgelegt ist. Das mit den 16er Sprüngen leuchtet mir immer noch nicht ganz ein.

normalerweise sollte dieser ja jeden beliebigen Wert zwischen 0-32k (bei 15bit) annehmen können, oder liege ich da falsch?

anbei einen Entwurf meiner elektronischen Schaltung. :slight_smile: seid gnädig bezüglich der Optik.

Danke!

Ein Beispiel vom Output, um es sich besser vorstellen zu können.

Die Werte sind alle auf Basis von AIN0 berechnet.

Das mit den 16er Sprüngen leuchtet mir immer noch nicht ganz ein.

Kann die Sprünge nicht bestätigen:

AIN0: 1409
AIN0: 1412
AIN0: 1415
AIN0: 1415
AIN0: 1416
AIN0: 1417
AIN0: 1415
AIN0: 1416
AIN0: 1417
AIN0: 1415
AIN0: 1418
AIN0: 1416
AIN0: 1416
AIN0: 1416
AIN0: 1418
AIN0: 1415
AIN0: 1417

Kannst du mir den Link zu deiner library posten?

wie sieht dein code dazu aus?

patrick_bit4bit:
Kannst du mir den Link zu deiner library posten?

wie sieht dein code dazu aus?

Habe natürlich deinen Code verwendet.
Und auch die gleiche Lib, in der frischesten Variante.
Das Ganze mit der gerade aktuellen IDE 1.8.13
Allerdings mit der AVR-GCC 9.3 mit aktiviertem gnu++17 (C++17)

Das ist ja genau der Grund, weswegen man hier immer den problematischen/fehlerhaften Code posten soll.
ZUM testen!

:sunglasses: :sunglasses: :sunglasses:

Da hast du vermutlich recht bezüglich dem Code-Post.

Ich habe die library von github bezogen und zwar zweimal, wobei bei der 2ten library die cpp auf ADS1115 umgeschrieben worden ist.
Ergebnis ist das gleiche.

jetzt probier ichs mal mit der library von Arduino IDE des Verwaltungsprogramm.
Danke fürs Testen! Hilft mir schon sehr weiter, jetzt wo ich weiss das es nicht am Code liegt.

Und auch die gleiche Lib, in der frischesten Variante.

→ aktualisiert

Das Ganze mit der gerade aktuellen IDE 1.8.13

→ bereits die aktuellste gehabt

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?

welches Board hast du verwendet?

Das gleiche wie du.

--> was genau machst du da?

Dieses!

wie kannst du wissen welches Board ich verwende? :slight_smile:

welches Board hast du verwendet?
Das gleiche wie du.

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.

Adafruit_ADS1X15.zip (13.9 KB)

patrick_bit4bit:
wie kannst du wissen welches Board ich verwende? :slight_smile:

Meine heilige Kristallkugel sagte mir:
Du verwendest einen UNO.
Die ist sich so sicher, dass es schon knistert.