Arduino I2C mehrere Geräte

Arduino multiple I2C slaves

Der Anschluss von mehr als ein I2C-Geräten an einen Arduino ist einfach, wenn man einige Grundregeln beachtet.

I2C Grundlagen

Der I2C-Bus ist als serielles Mehrpunkt-Verbindungssystem konzipiert.
Er war also immer für die Verwendung mit mehreren Geräten gedacht.

Aber wie können sie sich die gleichen Pins am Arduino teilen?

Hier ist ein einfaches Layout:

 I2C

Der µC-Master ist der Arduino, mit mehreren I2C-Slaves, die über die SDA- und SCL-Leitungen angeschlossen sind.

Der Trick liegt in den 2 Pullup-Widerständen Rp!

I2C pullup Widerstände

Sie werden benötigt, um den Geräten zu helfen, die benötigten Anstiegsgeschwindigkeiten zu erreichen. Abhängig von der i2c-Busgeschwindigkeit werden unterschiedliche Anstiegszeiten benötigt.

Im Standardmodus mit 100khz ist eine maximale Anstiegszeit von 1000ns in Ordnung, im schnellen Modus mit 400khz sollte die Anstiegszeit 300ns nicht überschreiten.

Wenn Sie es einfach nur in Gang bringen wollen, nehmen Sie 4,7k und es wird funktionieren, wenn Sie nur 1 Slave haben.

Aber wir wollen es doch richtig machen, oder?

Die Größe hängt von der Gesamtkapazität in der Schaltung ab, also musst du in den Datenblättern nachsehen und die Kapazität aufsummieren, um unsere Cb zu erhalten, dann kannst du die Formel nachschlagen:

Rp(max) = tr/0,8473 x Cb

Dabei ist tr die zulässige Anstiegszeit für das Signal, die je nach Busgeschwindigkeit mit 1µs oder 300ns anzusetzen ist.

Siehe die TI Application note: SLVA689 I2C Bus Pullup Widerstand Berechnung

Und was nun? Was passiert, wenn der Widerstand falsch ist?

I2C falscher pullup Widerstand

I2C wrong pullup resistor

Wenn der Widerstand zu hoch ist, steigt das Signal zu langsam an, was zu fehlenden Bits führt -> Probleme.

Aber auch zu niedrige Werte führen zu Problemen, da sie zu viel Strom ziehen, also nicht unter 1k gehen.

Es empfiehlt sich, zuerst die Berechnungen durchzuführen und dann ein Oszilloskop anzuschließen und die Werte zu überprüfen.

I2C bus slave address conflict

Jedes Gerät muss eine eindeutige Adresse haben. Prüfen Sie also Ihre Datenblätter und stellen Sie sicher, dass die Geräte alle eindeutige Adressen haben!

 

I2C Bus mit unterschiedlichen Spannungen

Das Mischen von 5V- und 3V-Geräten ist möglich, aber schließen Sie sie nicht einfach zusammen!

I2C Level shifter(AN97055)

Es wird ein bidirektionaler Pegelwandler benötigt. Üblich ist die Verwendung von Mosfets mit Klemmdioden.

Schau in die Application Note 10441 from NXP es geht um  "Level shifting techniques in I2C-bus design"

Auch die alte Application Note AN97055 "Bi-directional level shifter for I2C-bus and other systems." ist eine ausführlichere Lektüre darüber.


Quellen:

NXP AN10216 I2C Manual

Silabs AN0011 I2C Master and Slave Operation

TI SCAA106 Troubleshooting I2C Bus Protocol

DSScircuits Effects of varying I2C pullup resistors

NXP AN10441 Bidirectional level shifter for I2C

Phillips AN97055 Bi-directional level shifter for I2C-bus and other systems

 

Comments powered by CComment