Zum Hauptinhalt springen

I2C-Multiplexer

Mit einem senseBox I2C-Multiplexer lassen sich bis zu acht Geräte mit gleicher Adressierung parallel über den I2C-Bus betreiben. Dadurch können zum Beispiel mehrere baugleiche Temperatursensoren angeschlossen werden.

Multiplexer

I2C-Multiplexer

Technische Informationen

  • "Plug-in-and-Go" senseBox kompatibel durch Breakout-Board mit JST-Anschluss
  • 8x JST Anschluss

Anschluss

i2c port

Die Komponente wird am I2C Port angeschlossen.

Verwendung

Der senseBox I2C-Multiplexer basiert auf dem TCA9548A von Texas Instruments, welcher bereits Bestandteil vieler Tutorials aus der Community geworden ist.

Für die Implementierung des o.g. Beispiels binden wir zuerst die benötigten Bibliotheken ein. Wire.h für die I2C Funktionalität und Adafruit_HDC1000.h für die Funktionen des Sensors.

#include <Wire.h>
#include <Adafruit_HDC1000.h> // http://librarymanager/All#Adafruit_HDC1000_Library

Nun definieren wir die Adresse des Multiplex und eine Liste von Kanälen, an denen die Sensoren angeschlossen sind.

byte multiplexAddress = 0x77;
byte channels[] = {0,1,2};

Für den Sensor erzeugen wir ein Objekt und starten dessen Instanz hinter der seriellen Verbindung in der Setup-Funktion.

Adafruit_HDC1000 hdc = Adafruit_HDC1000();

void setup() {
Serial.begin(115200);
hdc.begin();
}

In der Endlosschleife werden mithilfe einer for-Schleife die Kanäle fortlaufend gewechselt. Für jeden Kanal wird der Multiplex über seine Adresse angesprochen. Dann übergeben wir lediglich die Nummer des Kanals, an den alle Folgebefehle gesendet werden. Das geschieht so lange bis ein neuer Kanal kommuniziert wird.

for (int i = 0; i < (sizeof(channels)/sizeof(channels[0])); i++){
Wire.beginTransmission(multiplexAddress);
Wire.write(1 << channels[i]);
Wire.endTransmission();

Serial.print(channels[i]);
Serial.print(F(". channel temperature: "));
Serial.println(hdc.readTemperature());
}

Nun lassen sich die Sensoren einzeln auslesen. Man erkennt dabei minimale Abweichungen unter den baugleichen Sensoren:

0. channel temperature: 21.96
1. channel temperature: 22.09
2. channel temperature: 22.14

Äquivalent lässt sich jedes I2C Gerät mehrfach mit dem Multiplexer nutzen. Falls mehr als acht Geräte mit gleicher Kennung parallel betrieben werden sollen, lässt sich die Adressierung vom Multiplex anhand der drei Lötstellen auf seiner Rückseite und der folgenden Tabelle aus seinem Datenblatt anpassen:

Hervorgehoben in der Tabelle wurde die Standardeinstellung mit der Adressierung 0x77.