Wie verbinde ich mehrere i2c-Schnittstellengeräte mit einem einzigen Pin A4 (SDA) und A5 (SCL) auf Arduino?

31

Ich möchte meinem kleinen Projekt ein Echtzeituhrmodul hinzufügen. Ich möchte Uhrzeit und Datum auf meinem vorhandenen i2c 2x16 LCD-Modul anzeigen.

Sowohl das i2c-Schnittstellen-Echtzeituhrmodul als auch das 2x16-LCD-Modul verwenden den gleichen Pin A4 (SDA) und A5 (SCL) auf Arduino Uno. Nach stundenlangem Suchen im Internet kann der i2c-Bus tatsächlich viele serielle Geräte aufnehmen. Dies ist möglich, da jedes Gerät eine eigene eindeutige Adresse hat.

Meine Frage ist, wie man die zwei i2c-Schnittstellenvorrichtungen in ein einzelnes A4 und ein A5 physikalisch verdrahtet? Vielen Dank.

Banksia
quelle
2
Kurze Antwort: Verdrahten Sie sie parallel. Binden Sie die SDAs zusammen und verbinden Sie sie mit A4 und die SCLs mit A5. Dann gibt es natürlich das Pull-up-Problem, das manchmal hilft.
SDsolar

Antworten:

32

Einigen fällt es schwer, miteinander verbundene Dinge zu visualisieren. Hier ist ein Bild:

(Serviervorschlag)

schematisch

simulieren Sie diese Schaltung - Das mit CircuitLab I2C erstellte Schema ist ein Bus, sodass gleichnamige Signale miteinander verbunden werden. Mit dem Adressierungsschema kann der Mikrocontroller auswählen, mit welchem ​​Gerät er spricht. Auf dem Arduino gehen die 10k Pull-Up-Widerstände auf "VDD", was den 5V- oder 3,3V-Pins entspricht.

Gbarry
quelle
Hallo, das mag sehr einfach sein, aber ich bin neu in der Elektronik und habe diese Seite von der Google-Suche erhalten. Worauf bezieht sich uC?
Ciasto piekarz
Ich glaube, der Verweis bezieht sich auf ein uC, da das Verbindungsschema dasselbe sein sollte, sofern nicht anders angegeben.
KingsInnerSoul
uC kann ein Arduino sein. SDA ist Pin A4 und SCL ist Pin A5.
SDsolar
8
@Ciastopiekarz, μC ist die Abkürzung für "Microcontroller". Der griechische Buchstabe μ ist die Abkürzung für micro. Da μ wie u aussieht, schreiben viele Leute einfach "uC".
Foobarbecue
9

Wenn für I2C alle Slave-Geräte unterschiedliche Geräteadressen haben, sollten alle SDA-Pins miteinander verbunden sein und alle SCL-Pins sollten miteinander verbunden sein. So einfach ist das.

Natürlich sollten Sie auch Pull-up-Widerstände in beide Leitungen einbauen, wie dies für I2C erforderlich ist. Wie der Widerstandswert zu wählen , wurde hier diskutiert vor .

Das Photon
quelle
Ich habe festgestellt, dass, solange eines der Geräte der DS3231 RTC ist, keine externen Pullups erforderlich sind.
SDsolar
3
@ SDsolar, das bedeutet wahrscheinlich, dass der DS3231 interne Klimmzüge hat. Wenn Sie also dieses Gerät verwenden, stellen Sie Klimmzüge für den Bus bereit. Das ist nicht unbedingt eine gute Sache, da es Ihre Freiheit einschränkt, den Pull-up-Widerstand abhängig von der Anzahl der Geräte am Bus einzustellen.
Das Photon
Genau meine Gedanken. Das Hinzufügen externer Pullups erfolgt parallel zu dem, was im DS3231 enthalten ist, und reicht möglicherweise nicht aus, damit I2C zufrieden ist.
SDsolar
@ SDsolar, Was hat das mit der Frage von OP oder meiner Antwort zu tun? Dies ist keine allgemeine Diskussionsseite. Wenn du nur über Dinge reden willst, kannst du dich unserem Chatroom anschließen .
Das Photon
3

Verbinden Sie zwei Stifte A4-sda mit A5-scl (auf beiden Platinen uno-uno) und verbinden Sie den Widerstand von 5 V mit den entsprechenden sda-scl-Leitungen.

Bildbeschreibung hier eingeben

daedalucian
quelle
Abgestimmt, weil die Antwort nicht die ursprüngliche Frage beantwortet, nämlich "Verdrahten Sie die beiden i2c-Schnittstellengeräte physisch zu einem A4 und A5".
Oleg Mazurov
Ich konnte nicht löschen, also bearbeite ich eine (vielleicht) zufriedenstellendere Antwort
daedalucian
Teilen der Spannung ist nicht erforderlich, oder?
Clankill3r
0

I2C ist ein von Philips entwickeltes Datenübertragungsprotokoll. Wird auch als Zweidrahtschnittstelle bezeichnet, da für die Kommunikation zwei Drähte verwendet werden. SCL-Serial Clock Line. SDL-Serial Data Line. Sie müssen also die entsprechenden Pins der i2c-Geräte verbinden, sei es ein EEPROM oder ein LCD mit den SCL- und SDL-Pins des verwendeten Mikrocontrollers, und einen Pullup-Widerstand mit VDD. Da es sich um ein Adressprotokoll mit einer 7-Bit-Adresse für jedes angeschlossene Gerät handelt, können Sie bis zu 2 ^ 7 verschiedene Geräte adressieren. Normalerweise ist die I2C-Adresse eines Slave-Geräts jedoch mit einigen Bits vordefiniert, die vom Entwickler fest verdrahtet werden müssen. Dies hilft beim Anschließen der gleichen Art von Geräten mit unterschiedlichen festverdrahteten Adressteilen an den gleichen Bus.

Antony Tom Mathews
quelle
1
Alles wahr, aber es ist schade, wenn Sie mehr als eine wollen, wie die BH1750 Lichtintensitätseinheit. Ich möchte 4 von ihnen und möchte mich nicht mit I2C-Dual-Bus-Switching befassen. Außerdem haben einige Geräte wie der DS3231 interne Pullups, sodass alle externen Pullups parallel zu ihnen sind.
SDsolar