ADS1015 12-Bit Analog-Digital-Converter: Kleine Verständnisfrage

#7492052
Lesenswert?

Hallo liebe Freunde,

für ein kleines Home-Projekt habe ich mir folgenden ADC angeschafft: https://www.christians-shop.de/GY-ADS1015-12-Bit-Analog-Digital-Converter-ultra-small-ADC. Mein Projekt ist noch im Prototypenstadium, daher teste ich gerade den Konverter über einen Arduino Nano. Nun... laut Datenblatt soll das Ding in der Lage sein, 4 unabhängige ADC-Messungen durchführen zu können. Das Problem ist aber, dass das Ding nur dann funktioniert (d.h. es können Werte über die I2C Schnittstelle ausgelesen werden), wenn ich den Pin A1 des ADC-Boards mit Vcc (in meinem Fall +5V) verbinde. Sobald der Pin A1 des Boards (und nicht des Arduinos) floatet und/oder auf Masse bringe, dann funktioniert es nicht mehr (d.h. es stoppt auch die Kommunikation über I2C). Beigefügt habe ich ein Bild vom Breadboard. Auf dem zweiten Bild habe ich die kleine Steckbrücke hervorgehoben.

Auf Seite 11 des Datenblattes wird der Multiplexer dargestellt (Abb. 10). Wenn ich AIN1 (Also A1) mit +5 V verbinde, dann sollte es keinen Einfluss auf den Konverter haben (bei geöffneter Schaltung wie in Abb. 10). Aktuell habe ich den Arduino mit dem Konverter folgendermaßen verbunden:

1
Arduino -> ADS1015
2
GND     -> GND
3
5V      -> Vcc
4
A4      -> SDA
5
A5      -> SCL

während die anderen Pins vom Konverter sind folgendermaßen verbunden:

1
ADS1015
2
ADDR  -> GND (so dass die I2C Adresse vom Board b1001000 ist.
3
ALERT -> Nicht verbunden
4
A0    -> Erste analoge Spannung zum Auslesen
5
A2    -> Zweite analoge Spannung zum Auslesen 
6
A3    -> Noch nicht verbunden
7
A1    -> +5 Vcc (alles andere führt zum Nix)

Hier ist der Code, mit dem ich zurzeit versuche, alle 4 Analoge Eingänge separat einzulesen:

1
#include <Wire.h>
2

3
#define I2C_ADDRESS     B1001000
4
#define CONV_REG        B00000000
5
#define CONFIG_REG      B00000001
6
#define LOW_THRESH_REG  B00000010
7
#define HIGH_THRESH_REG B00000011
8
#define MSB_CONFIG_REG  B01000000
9
#define LSB_CONFIG_REG  B10010011
10
#define AN0_CONFIG_REG  B01000000
11
#define AN1_CONFIG_REG  B01010000
12
#define AN2_CONFIG_REG  B01100000
13

14
#define DELAY  50
15

16
byte msb_value;
17
byte lsb_value;
18

19
unsigned int x_value;
20
unsigned int y_value;
21

22
void setup() {
23
  
24
  Serial.begin(115200);
25
  Serial.println("Starting ...");
26

27
  Wire.begin();
28

29
  Wire.beginTransmission(I2C_ADDRESS);
30
  Wire.write(CONFIG_REG);
31
  Wire.write(MSB_CONFIG_REG);
32
  Wire.write(LSB_CONFIG_REG);
33
  Wire.endTransmission(true);
34

35
  Wire.beginTransmission(I2C_ADDRESS);
36
  Wire.write(HIGH_THRESH_REG);
37
  Wire.write(B10000000);
38
  Wire.write(B00001111);
39
  Wire.endTransmission(true);
40

41
  Wire.beginTransmission(I2C_ADDRESS);
42
  Wire.write(LOW_THRESH_REG);
43
  Wire.write(B00000000);
44
  Wire.write(B00001111);
45
  Wire.endTransmission(true);
46
  
47
  Wire.beginTransmission(I2C_ADDRESS);
48
  Wire.write(CONV_REG);
49
  Wire.endTransmission(true);
50

51
  Serial.println("Device configured ...");
52
  
53
  delay(1000);
54
}
55

56
void loop() {
57

58
  Wire.beginTransmission(I2C_ADDRESS);
59
  Wire.write(CONFIG_REG);
60
  Wire.write(AN0_CONFIG_REG);
61
  Wire.write(LSB_CONFIG_REG);
62
  Wire.endTransmission(true);
63

64
  delay(DELAY);
65
  
66
  Wire.beginTransmission(I2C_ADDRESS);
67
  Wire.write(CONV_REG);
68
  Wire.endTransmission(true);
69

70
    Wire.requestFrom(I2C_ADDRESS, 2, true);
71

72
    if (Wire.available()) {
73
      msb_value = Wire.read();
74
      lsb_value = Wire.read();
75
      x_value = ((msb_value & 0xFF) << 8) | (lsb_value & 0xFF);
76
      x_value = x_value >> 4;
77
  }
78
  
79
  Serial.print("X: ");
80
  Serial.print(x_value, DEC);
81
  Serial.print("\tY: ");
82
  Serial.println(y_value, DEC);
83

84
}

Ich habe sogar mit dieser Bibliothek versucht: https://github.com/RobTillaart/ADS1X15

Das Ergebnis ist exakt das gleiche. Sobald ich die Steckbrücke vom +5 Volt abstecke, dann sendet der Konverter nix über die I2C und der Arduino hängt.

Woran kann es liegen?

#7492086
Lesenswert?

X. A. schrieb:

Screenshot_2023-09-04_at_21-50-31_ADS101x_Ultra-Small_Low-Power_I2C->Compatible_3.3-kSPS_12-Bit_ADCs_With_Internal_Refere (34,2 KB)

Bist du Germanist? Willst den Titel für den längsten Dateinamen im Forum gewinnen? Das ist ein Bild im PNG Format. Blockschaltbild.png hätte es auch getan!

Hallo liebe Freunde,

für ein kleines Home-Projekt habe ich mir folgenden ADC angeschafft: https://www.christians-shop.de/GY-ADS1015-12-Bit-Analog-Digital-Converter-ultra-small-ADC.

Der Steckverbinder ist größer als der IC, wie witzig!

Nun... laut Datenblatt soll das Ding in der Lage sein, 4 unabhängige ADC-Messungen durchführen zu können.

Nicht ganz. Er hat vier Eingänge, die in beliebiger Weise NACHEINANDER konvertiert werden können.

Sobald der Pin A1 des Boards (und nicht des Arduinos) floatet und/oder auf Masse bringe, dann funktioniert es nicht mehr (d.h. es stoppt auch die Kommunikation über I2C). Beigefügt habe ich ein Bild vom Breadboard.

Dann hast du Verbindungsprobleme.

Auf dem zweiten Bild habe ich die kleine Steckbrücke hervorgehoben.

Die VCC-Verbindung zum ADC scheint unterbrochen, so wie es das Bild zeigt.

Außerdem ist die Frage hier im falschen Forum. Hier geht es um FUNKTIONIERENDE Projekte. Bitte mal verschieben.

#7492092
Lesenswert?

Moin,

Ich möchte jetzt nicht gemein sein; aber die Verdrahtung des Steckbrett sieht wirklich aus wie von Katz und Hund gemacht:-)

Es gibt in der Bucht sehr erschwingliche Steckbrett Jumper Sets in verschiedener Konfektionierung mit bis zu 840 Drahten in Normlängen mit 2.54mm Schritten und verschiedenen Farben und vorgebogen. Damit macht man sich sein Leben viel leichter und kann dann auch besser "vorzeigbare" und verfolgbare Steckbrettverdrahtungen erstellen. Dann passieren auch nicht so leicht "vermeidbare" Verbindungsfehler.

Z.B. hier:

https://www.ebay.com/itm/364084853385?

VG, Gerhard

#7492094
Lesenswert?

von Falk B. (falk) 2023-09-04 15:11 Lesenswert? • ▲ ▼ X. A. schrieb:

Screenshot_2023-09-04_at_21-50-31_ADS101x_Ultra-Small_Low-Power_I2C->Co mpatible_3.3-kSPS_12-Bit_ADCs_With_Internal_Refere (34,2 KB)

Bist du Germanist? Willst den Titel für den längsten Dateinamen im Forum gewinnen? Das ist ein Bild im PNG Format. Blockschaltbild.png hätte es auch getan!...

Das kenne ich bei mir auch mit Greenshot Screen Capture Program. Der erdenkt sich so lange Dateischwänze. Ich benenne sie deswegen meistens neu.

Gerhard

#7492109
Lesenswert?

Falk B. schrieb:

Nun... laut Datenblatt soll das Ding in der Lage sein, 4 unabhängige ADC-Messungen durchführen zu können.

Nicht ganz. Er hat vier Eingänge, die in beliebiger Weise NACHEINANDER konvertiert werden können.

Das ist halt der Fluch von Mikrocontrollersystemen, alles nacheinander.

Wenn nicht gerade extreme Anforderungen an die Geschwindigkeit existieren, kann man den ADS1015 frei laufen lassen und sich zu jeder beliebigen Zeit einen Meßwert holen.

#7492160
Lesenswert?

Manfred P. schrieb:

Falk B. schrieb:

Nun... laut Datenblatt soll das Ding in der Lage sein, 4 unabhängige ADC-Messungen durchführen zu können.

Nicht ganz. Er hat vier Eingänge, die in beliebiger Weise NACHEINANDER konvertiert werden können.

Das ist halt der Fluch von Mikrocontrollersystemen, alles nacheinander.

Ohje! Jetzt ist das Normalste der Welt schon ein Fluch. Bisher hat die Welt damit ganz gut funktioniert.

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