Grundsätzlich können an einem I2C Bus bis zu 127 Geräte gleichzeitig betrieben werden. Es lauern dabei jedoch einige Fallstricke.

Zuerst gilt sicherzustellen, dass keine der Geräte dieselbe Adresse verwenden. Viele erlauben die Auswahl aus mehreren Adressen. Bei einigen sind das zwei Möglichkeiten (z.B. bei BH1750), bei anderen können ganze 3 Bits frei bestimmt werden (also 8 mögichen Adresse, z.B. LCD-I2C Adaptermodul).

Dann ist es wichtig, dass alle angeschlossenen Geräte mit den passenen Spannungen versorgt werden. Nicht nur als Betribsspannung, auch die Ein- und Ausgänge (SDA, SCL) müssen beachtet werden. Die häufig angebotenen Arduino Module auf der basis von 3,3V Chips enthalten einen Spannungswandler zur Versorgung und ein PullUp-Widerstand je Datenleitung zur 3,3V-Schiene zur Begrenzung der Spannung. Das funktioniert nur soweit gut, bis ein 5V-Modul mit eigenen PullUps angeschlossen wird. Dadurch kann die Spannung an den Datenleitungen auf gefährliche Werte ansteigen. Die richtige Lösung ist die Verwendung eines Level Shifters. Mit einem 5/3,3V Level Shifter können mehrere 5V und 3,3V Geräte gleichzeitig betrieben werden. Ein Level Shifter enthält bereits PullUps für beide Teile der I2C-Buses, die Widerstände auf den Modulen werden überflüssig.

Die überflüssigen PullUps können schnell zu einem weiteren Problem führen: durch die Parallelschaltung mehreren davon, wird der Gesamtwiderstand immer geringer. Zunächst führt das zu einem unnötig hohem Stromverbrauch, irgendwann fällt das ganze Bus aus. Also sollten die unnötigen PullUps möglichst ausgelötet werden.

 

Kommentare (0)

Cancel or