ADS1115 identische Messwerte an 2 Kanälen

OP #5935714
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?
Angehängte Dateien:
OP #5937423
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.
Gast #5938580
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren