Forum: Mikrocontroller und Digitale Elektronik ADS1015 12-Bit Analog-Digital-Converter: Kleine Verständnisfrage


von X. A. (wilhem)



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?

: Verschoben durch Moderator
von Magnus M. (magnetus) Benutzerseite


Angehängte Dateien:

Lesenswert?

X. A. schrieb:
> Aktuell habe ich den Arduino mit dem Konverter folgendermaßen verbunden:
> Arduino -> ADS1015
> GND     -> GND
> 5V      -> Vcc
> A4      -> SDA
> A5      -> SCL

X. A. schrieb:
> Woran kann es liegen?

Deine blanke Drahtbrücke (5V -> VCC) steckt nur einseitig im Steckbrett.

von Helmut -. (dc3yc)


Lesenswert?

X. A. schrieb:
> Woran kann es liegen?

1. am fehlenden Schaltplan
2. Steckbretter sind generell Sch...e
3. Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

: Bearbeitet durch User
von Falk B. (falk)


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!


> 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.

: Bearbeitet durch User
von Gerhard O. (gerhard_)


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

: Bearbeitet durch User
von Gerhard O. (gerhard_)


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

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

So

von Manfred P. (pruckelfred)


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.

von X. A. (wilhem)


Lesenswert?

Magnus M. schrieb:

> Deine blanke Drahtbrücke (5V -> VCC) steckt nur einseitig im Steckbrett.

Ja... das wars...
Danke!

von X. A. (wilhem)


Lesenswert?

Ich bin kein Germanist.
Das mit dem langen Titel war ein Versehen.
Ich habe die Datei verlinkt und dann den Beitrag veröffentlicht.
Leider kann ich den ursprünglichen Thread nicht bearbeiten.

von Falk B. (falk)


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.

von Norbert (der_norbert)


Lesenswert?

Manfred P. schrieb:
> Das ist halt der Fluch von Mikrocontrollersystemen, alles nacheinander.

Apropos ADCs, noch nie einen STM32F407 in Händen gehalten, richtig? ;-)

Es gibt ein Leben nach den AT90xxxx µCs…

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.