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?