mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Sven J. (sven_j829)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)
A0: 3458    Spannung: 648mV   A1: 16972   Spannung: 3182mV
A0: 16972    Spannung: 3182mV   A1: 16971   Spannung: 3182mV
A0: 16971    Spannung: 3182mV   A1: 16990   Spannung: 3185mV
A0: 16990    Spannung: 3185mV   A1: 16992   Spannung: 3186mV
A0: 16992    Spannung: 3186mV   A1: 16990   Spannung: 3185mV
A0: 16990    Spannung: 3185mV   A1: 17235   Spannung: 3231mV
Wechsel auf GND
A0: -865    Spannung: -162mV   A1: -1555   Spannung: -291mV
A0: -1555    Spannung: -291mV   A1: -917   Spannung: -171mV
A0: -917    Spannung: -171mV   A1: -558   Spannung: -104mV
A0: -558    Spannung: -104mV   A1: -557   Spannung: -104mV
Folgenden Sketch habe ich verwendet.
#include <Arduino.h>
#include <Adafruit_ADS1015.h>

const byte KANAL_1 = 0;
const byte KANAL_2 = 1;
const byte KANAL_3 = 2;
const byte KANAL_4 = 3;
Adafruit_ADS1115 ads(0x48);

void i2c_start(){
  ads.begin();

}

void setup() {
  Serial.begin(115200);
  i2c_start();      //Geräte am I2C-Bus starten
}

void loop() {
  int16_t rohwert, referenz, voltage, refVolt;
  rohwert = ads.readADC_SingleEnded(KANAL_1);
  referenz = ads.readADC_SingleEnded(KANAL_2);
  //diffVolt= ads.readADC_Differential_0_1();
  voltage = map(rohwert,0,32765,0,6144);
  refVolt = map(referenz,0,32765,0,6144);
  Serial.print("A0: ");
  Serial.print(rohwert);
  Serial.print("    Spannung: ");
  Serial.print(voltage);
  Serial.print("mV   A1: ");
  Serial.print(referenz);
  Serial.print("   Spannung: ");
  Serial.print(refVolt); 
  Serial.println("mV");
  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?

Autor: Weg mit dem Troll ! (Gast)
Datum:

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

Autor: Sven J. (sven_j829)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat ein identisches Ergebnis

Sven J. schrieb:

Wechsel auf GND
> A0: -865    Spannung: -162mV   A1: -1555   Spannung: -291mV
> A0: -1555    Spannung: -291mV   A1: -917   Spannung: -171mV
> A0: -917    Spannung: -171mV   A1: -558   Spannung: -104mV
> A0: -558    Spannung: -104mV   A1: -557   Spannung: -104mV
> 

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was passiert, wenn du zwei mal hintereinander Kanal 1 und dann zwei mal 
hintereinander Kanal 2 misst?

Autor: Sven J. (sven_j829)
Datum:

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

Autor: Teo D. (teoderix)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven J. (sven_j829)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: Lorenz R. (lorenz_r)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: schnuppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.