Mehrere I2C Geräte an Arduino Mega

Hallo,

ich habe jetzt schon ein bisschen was über I2C gelesen, jedoch konnte ich in keinem Forumbeitrag eine passende Antwort zu meiner Frage finden.

An meinem Arduino Mega 2560 möchte ich zwei, später drei I2C Geräte anschließen. Hierbei habe ich ein 20x4 LCD, welches immer angeschlossen ist und einen Grove Sunlight Sensor, der nicht durchgängig angeschlossen ist, er ist absteckbar.

Wenn ich das so richtig verstanden habe, muss man die SDA und SCL Leitungen beider Geräte parallel schließen und und die Verbindung zu beiden Geräten ist da. Nun habe ich aber noch gelesen, dass man, wenn man mehrere I2C Geräte benutzt, Pull-Up Widerstande benutzen muss. Außerdem bin ich etwas verwirrt, da in manchen Beiträgen geschrieben wurde, dass einige Geräte schon ihre eigenen Pull-Ups mitbringen.

Also meine Frage(n): Wie muss die Schaltung bei mehreren I2C Geräten aussehen, braucht man Pull-Up Widerstände, wenn ja wie viele und wie groß müssen diese sein?

Übrigens schrieben manche, die Größe der Widerstände hänge von der Länge der Kabel ab. Diese sind bei mir ca. 20cm lang.

Vielen Dank für eure Antworten!

Außerdem bin ich etwas verwirrt, da in manchen Beiträgen geschrieben wurde, dass einige Geräte schon ihre eigenen Pull-Ups mitbringen.

Was ist daran verwirrend? Wenn du fertige Plantinen oder Module kaufst ist da alles drauf

I2C ist ein Bussystem und du kannst mehrere I2C-Baugruppen daran betreiben.
Darauf achten, dass keine Adresse doppelt vorkommt.

Du brauchst in jedem Fall Pullup-Widerstände (4,7k). Bei 20 cm passt das.
Länger sollten die Kabel auch nicht werden, dann kommen andere Dinge zum Tragen.
Ob welche vorhanden sind, sagen evtl. die Datenblätter oder du kannst nachmessen.

Was Du geschrieben hast, nehme ich zwecks Klärung pingelig auseinander:

TobiSombos:
... wenn man mehrere I2C Geräte benutzt, Pull-Up Widerstande benutzen muss.

Die PullUp-Widerstände benötigst Du immer, unabhängig von der Anzahl der angeschlossenen Geräte.

TobiSombos:
Außerdem bin ich etwas verwirrt, da in manchen Beiträgen geschrieben wurde, dass einige Geräte schon ihre eigenen Pull-Ups mitbringen.

Bei Platinen kann alles mögliche drauf sein, auch PullUp-Widerstände.

TobiSombos:
Also meine Frage(n): Wie muss die Schaltung bei mehreren I2C Geräten aussehen, braucht man Pull-Up Widerstände, wenn ja wie viele und wie groß müssen diese sein?

PullUp-Widerstände benötigst Du immer. Ein durchschnittlicher Wert liegt bei 4,7 kOhm, Bereich ungefähr 1 kOhm bis 10 kOhm. Es gilt die Summe aller parallel geschalteter Widerstände.

Der Mega2560 hat 10 kOhm drauf, Deine weiteren I2C-Teilnehmer kenne ich nicht.

TobiSombos:
Übrigens schrieben manche, die Größe der Widerstände hänge von der Länge der Kabel ab. Diese sind bei mir ca. 20cm lang.

I2C ist für interne Kommunikation in elektronischen Geräten konzipiert, 20 cm sind unkritisch.

Möchte man größere Distanzen überbrücken, so kann man "Tricks" anwenden. Dazu gehören niedrige PullUp-Widerstände genauso wie eine niedrigere Taktrate oder spezielle Erweiterungs-ICs. Für Dich ist das bei 20 cm aber nicht relevant.

Ein nützliches Mittel zur Ermittlung der verwendeten Adressen ist ein Arduino-Programm als I2C-Scanner.

agmue:
Es gilt die Summe aller parallel geschalteter Widerstände.

Das stimmt nicht. Mehrere Pullups sind parallel, nicht in Reihe.

Also 1/Rges = 1/R1 + 1/R2 + ...

Gruß Tommy

Tommy56:
Das stimmt nicht.

"parallel geschaltete Widerstände" sind keine Reihenschaltung und "1/R1 + 1/R2 + ... " ist eine Summe. Was also soll da nicht stimmen?

Wenn Du Deine Formel als Ergänzung sehen würdest, könnte ich Dir sofort zustimmen. Alleine Deinem Widerspruch muß ich widersprechen.

die Summe aller parallel geschalteter Widerstände

Ist nunmal mathematisch als Rges = R1+R2+R3+... definiert und das ist für parallelgeschaltete Widerstände falsch!
Oder willst Du jetzt eine eigene Mathematik einführen, die die Summe anders definiert?

Gruß Tommy

Hi

Dann benennen wir den Leitwert als eben Diesen und sagen: Die Summe der Leitwerte (=1/R) entspricht dem Gesamt-Leitwert.
Und Da passt die Formel wieder.
Für zwei Widerstände, Die man parallel schaltet, gibt's auch noch (R1*R2)/(R1+R2)
Siehe auch hier

Einheit des Leitwert ist übrigens das Siemens (und hat wohl Nichts mit dem Konzern zu tun), S.

MfG

Doch, die ist nach dessen Mitgründer Werner von Siemens benannt.

Gruß Tommy