Arduino I2C mehrere Geräte
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:
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
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!
(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:
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