Forum: Mikrocontroller und Digitale Elektronik ADS1115 identische Messwerte an 2 Kanälen


von Sven J. (sven_j829)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich beginne gerade wieder ein wenig mit Electronic und Microcontrollern 
zu spielen und bin auf folgendes Phänomen gestoßen.

Wenn ich einen Kanal auf über einen ADS1115 mit einem ESP32 auslesen, 
klappt das wie erwartet und ich bekomme Werte, die passen.
Wenn ich aber einen weiteren Kanal auslese (in diesem Fall die 
Versorgungsspannung als Referenz) wird nur bei der ersten übertragenen 
Messung der Wert von Kanal 1 korrekt angezeigt, danach haben Kanal 1 und 
Kanal x immer annähernd Gleiche Werte. völlig unabhängig vom Kanal. Und 
unabhängig von der Referenzspannung (VCC oder GND)
1
A0: 3458    Spannung: 648mV   A1: 16972   Spannung: 3182mV
2
A0: 16972    Spannung: 3182mV   A1: 16971   Spannung: 3182mV
3
A0: 16971    Spannung: 3182mV   A1: 16990   Spannung: 3185mV
4
A0: 16990    Spannung: 3185mV   A1: 16992   Spannung: 3186mV
5
A0: 16992    Spannung: 3186mV   A1: 16990   Spannung: 3185mV
6
A0: 16990    Spannung: 3185mV   A1: 17235   Spannung: 3231mV
Wechsel auf GND
1
A0: -865    Spannung: -162mV   A1: -1555   Spannung: -291mV
2
A0: -1555    Spannung: -291mV   A1: -917   Spannung: -171mV
3
A0: -917    Spannung: -171mV   A1: -558   Spannung: -104mV
4
A0: -558    Spannung: -104mV   A1: -557   Spannung: -104mV
Folgenden Sketch habe ich verwendet.
1
#include <Arduino.h>
2
#include <Adafruit_ADS1015.h>
3
4
const byte KANAL_1 = 0;
5
const byte KANAL_2 = 1;
6
const byte KANAL_3 = 2;
7
const byte KANAL_4 = 3;
8
Adafruit_ADS1115 ads(0x48);
9
10
void i2c_start(){
11
  ads.begin();
12
13
}
14
15
void setup() {
16
  Serial.begin(115200);
17
  i2c_start();      //Geräte am I2C-Bus starten
18
}
19
20
void loop() {
21
  int16_t rohwert, referenz, voltage, refVolt;
22
  rohwert = ads.readADC_SingleEnded(KANAL_1);
23
  referenz = ads.readADC_SingleEnded(KANAL_2);
24
  //diffVolt= ads.readADC_Differential_0_1();
25
  voltage = map(rohwert,0,32765,0,6144);
26
  refVolt = map(referenz,0,32765,0,6144);
27
  Serial.print("A0: ");
28
  Serial.print(rohwert);
29
  Serial.print("    Spannung: ");
30
  Serial.print(voltage);
31
  Serial.print("mV   A1: ");
32
  Serial.print(referenz);
33
  Serial.print("   Spannung: ");
34
  Serial.print(refVolt); 
35
  Serial.println("mV");
36
  delay(5000);


Leider habe ich zur Zeit nur einen ADS zur Hand, um ausschließen zu 
können, das es ein Bauteilfehler ist!
Hat jemand eine Idee, wo hier der fehler liegt?

von Weg mit dem Troll ! (Gast)


Lesenswert?

Dann mach doch mal auf einem Kanal einen Kurzschluss nach GND rein. Der 
muss dann Null anzeigen.

von Sven J. (sven_j829)


Lesenswert?

Hat ein identisches Ergebnis

Sven J. schrieb:

Wechsel auf GND
1
> A0: -865    Spannung: -162mV   A1: -1555   Spannung: -291mV
2
> A0: -1555    Spannung: -291mV   A1: -917   Spannung: -171mV
3
> A0: -917    Spannung: -171mV   A1: -558   Spannung: -104mV
4
> A0: -558    Spannung: -104mV   A1: -557   Spannung: -104mV
5
>

von Wolfgang (Gast)


Lesenswert?

Was passiert, wenn du zwei mal hintereinander Kanal 1 und dann zwei mal 
hintereinander Kanal 2 misst?

von Sven J. (sven_j829)


Lesenswert?

Meinst du, den selben Wert in 2 Variablen schreiben, im Sinne von
1
rohwert = ads.readADC_SingleEnded(KANAL_1);
2
 referenz = ads.readADC_SingleEnded(KANAL_1);
Werde ich morgen testen.

von Teo D. (teoderix)


Lesenswert?

Sven J. schrieb:
> Meinst du, den selben Wert in 2 Variablen schreiben, im Sinne von

Nein, er will wissen ob genügen Zeit ist, das sich die Kapazitäten des 
ADCs auf das Potential des andere Kanal aufladen können, oder ob du nur 
den Rest vom Ersten misst. Dies Info müsste sich auch irgendwo im 
Dabla verstecken.

von Sven J. (sven_j829)


Lesenswert?

Ich vermute jetzt doch einen Bauteilfehler.
Ich habe es mit dem Beispielcode von der adafruit-Seite probiert.
https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/arduino-code
Auch in diesem finde ich, genauso wenig wie im Datenblatt, Hinweise auf 
notwendige Verzögerungen.

Aber auch mit dem Code scheinen sich die Eingänge gegenseitig zu 
beeinflussen. Ist ja uach im Kern kein Unterschied. Einzig der AI2 
arbeitete unabhängig von der Beschaltung der anderen Eingänge.
Ich habe mir jetzt mal neue bestellt und werde es dann testen.

Danke für die Denkanstöße.

von Lorenz R. (lorenz_r)


Lesenswert?

Sind die Kanäle mit etwas verbunden oder nicht, weil wenn sie an nichts 
angeschlossen sind, kann es durchaus sein, dass ein Kanal den nächsten 
beeinflusst.

: Bearbeitet durch User
von schnuppi (Gast)


Lesenswert?

wenn die Impedanz am Eingang der Nachbarkanäle recht hoch ist (oder sie 
gar floatend sind) kann es durchaus passieren, dass die Kanäle ähnliche 
Werte anzeigen.

also: Der Ausgangswiderstand deiner Quellen (alle eingänge) muss niedrig 
sein um das Potenzial auf eindeutige (definierte) Werte zu bringen.

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
Noch kein Account? Hier anmelden.