Forum: Mikrocontroller und Digitale Elektronik I2C Pullup bei vielen I2C Devices


von Jurgen H. (jache)


Lesenswert?

Hallo,

ich möchte an einen ESP32 mehrere I2C Bausteine dran hängen. Alle werden 
mit 3.3V betrieben.

Folgende Dinge hängen dran:

- OLED 0.42"
- 2 x I2C Multiplexer TCA9548 mit einmal 4 und einmal 5 INA219.
- Gyroskop MPU6050
- einzelner INA219

Welchen Widerstand sollte ich für SCL und SDA als Pullup verwenden?
Und benötige ich extra Pullups nach dem Multiplexer und somit vor den 
ganzen INA219? Oder reicht einer sehr nah am ESP32?

Ich Danke euch.

von Joachim B. (jar)


Lesenswert?

Jurgen H. schrieb:
> Welchen Widerstand sollte ich für SCL und SDA als Pullup verwenden?

so klein wie nötig, nicht so klein wie möglich.
Hängt von der Kabelkapazität ab. I2C ist nicht für Fernverbindungen und 
nicht für Sternverkabelung.

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> I2C ist nicht für Fernverbindungen

Man sollte sich manchmal vergegenwaertigen was die Is in I2C
bedeuten, dann klappt auch die Kommunikation mit dem Nachbarn. :-)

Vanye

von Jurgen H. (jache)


Lesenswert?

Ich habe keine Sternverkabelung, sondern auf dem PCB eine 0.3mm Leitung 
die über das Board geht und von da gehen immer kurze Wege (2-3cm) ab zu 
den einzelnen Komponenten.

gibt es irgendeine Formel um den Widerstand für Pullup zu berechnen? 
Oder sind die 47k i.O.?

P.S. alle Komponenten sind auch einem PCB. (also sehr kurze "Kabelwege")

: Bearbeitet durch User
von Stephan S. (uxdx)


Angehängte Dateien:

Lesenswert?

47k sind sicher viel zu viel. Bei 3.3 Volt kann man insgesamt locker auf 
1.5 bis 2 k runtergehen.

von Cyblord -. (cyblord)


Lesenswert?

Jurgen H. schrieb:
> Oder sind die 47k i.O.?

Wenn dann 4k7.

Und dann schau dir deine Signale einfach mal mit dem Oszi an ob das 
passt. Wenn du so unsicher bist.

Bei deinem Setup rechne ich da gar nicht mit Problemen. Warum rechnest 
du überhaupt damit? Sonst keine Probleme mit der Schaltung mehr?

: Bearbeitet durch User
von Klaus H. (hildek)


Lesenswert?

Jurgen H. schrieb:
> Und benötige ich extra Pullups nach dem Multiplexer und somit vor den
> ganzen INA219?

Warum schaust du nicht im Datenblatt vom TCA9548 nach? 
https://www.ti.com/lit/gpn/TCA9548A
Dort ist im Bild 13 gezeichnet, wie du ihn beschalten musst.

Und dann gibt es noch die I2C-Spec UM10204.
Dort ist der Bereich für den Pullup angegeben, abhängig vom Mode, von 
der kapazitiven Last und der Betriebsspannung (Bilder 41 und 42).

von Jurgen H. (jache)


Lesenswert?

Wenn ich als Laie das richtig verstehe, benötige ich keine Pullups an 
den einzelnen Ausgängen des TCA9548A, da bei mir Vdpum = Vdpx = 3.3V 
ist.
Sehe ich das richtig?

bei den Bildern 41 und 42 fehlt mir die Erfahrung um diese richtig zu 
interpretieren... Kann mir (als Laie) hier jemand auf die Sprünge helfen 
um rauszufinden welchen Widerstand ich direkt am ESP32 für die Pullups 
brauche?

Cyblord -. schrieb:
> Warum rechnest
> du überhaupt damit?

Ich rechne nicht wirklich damit, da ich aber noch keine Erfahrung habe 
beim nutzen mehrere I2C Komponenten wollte ich das hier im Forum einmal 
nachfragen, da ich eben auch nicht weiß, wie groß der Widerstand für SDA 
uns SCL sein sollte.

: Bearbeitet durch User
von Stephan S. (uxdx)


Lesenswert?

Viele Boards mit Sensoren haben oft schon Pullups drauf (meist 4k7), die 
musst Du natürlich berücksichtigen.

> Ich habe keine Sternverkabelung, sondern auf dem PCB eine 0.3mm Leitung
> die über das Board geht und von da gehen immer kurze Wege (2-3cm) ab zu
> den einzelnen Komponenten.

Und wie gross ist das Board?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Jurgen H. schrieb:
> Und benötige ich extra Pullups nach dem Multiplexer
Ich würde erwarten, dass das im Datenblatt dieses Bausteins stehen 
müsste. Und tatsächlich...

Jurgen H. schrieb:
> Wenn ich als Laie das richtig verstehe, benötige ich keine Pullups an
> den einzelnen Ausgängen des TCA9548A, da bei mir Vdpum = Vdpx = 3.3V ist.
Woraus liest du das worin ab?

> Sehe ich das richtig?
Auf der ersten Seite des DB steht: "External pullup resistors pull the 
bus up to the desired voltage level for each channel." Als muss explizit 
"each channel" für sich terminert werden.

Und auch bei den "Pin Functions" steht in jeder Zeile explizit: "Connect 
to VDPU through a pull-up resistor".

Jurgen H. schrieb:
> bei den Bildern 41 und 42 fehlt mir die Erfahrung um diese richtig zu
> interpretieren...
Welches Datenblatt hast du da? Im Datenblatt 
https://www.ti.com/lit/ds/symlink/tca9548a.pdf ist auf Seite 26 beim 
Bild 20 Schluss...

: Bearbeitet durch Moderator
von Stephan S. (uxdx)


Lesenswert?

Lothar M. schrieb:
> Welches Datenblatt hast du da? Im Datenblatt
> https://www.ti.com/lit/ds/symlink/tca9548a.pdf ist auf Seite 26 beim
> Bild 20 Schluss...

Im von mir verlinkten UM10204 steht das

von Jurgen H. (jache)


Lesenswert?

Stephan S. schrieb:
> Viele Boards mit Sensoren haben oft schon Pullups drauf (meist 4k7), die
> musst Du natürlich berücksichtigen.

Ich habe keine fertigen Boards, sondern die Module direkt auf einem PCB. 
Somit hat bei mir keines Pullups.

Stephan S. schrieb:
> Und wie gross ist das Board?

Insgesamt ca. 12x10cm. Da ist aber auch noch der ESP32 mit drauf.

Lothar M. schrieb:
> Und auch bei den "Pin Functions" steht in jeder Zeile explizit: "Connect
> to VDPU through a pull-up resistor".

Ok, also doch nach jedem Ausgang am Multiplexer noch zusätzlich Pullups.

Sehe ich es dann richtig, dass nach jedem Ausgang vom Multiplexer zu den 
INA219 Sensoren ein 4k7 Pullup für SCL und SDA passt?

Für den PullUp am ESP32, wo alle meine I2C Bausteine dran hängen komme 
ich leide nicht weiter. Da fehlt mir noch das wissen bzw. das 
geschrieben zu verstehen...

von Cyblord -. (cyblord)


Lesenswert?

Jurgen H. schrieb:
> Sehe ich es dann richtig, dass nach jedem Ausgang vom Multiplexer zu den
> INA219 Sensoren ein 4k7 Pullup für SCL und SDA passt?

An jeden I2C Bus muss EIN Paar Pullups. Das ist doch nicht so schwer.

Jetzt bleibt nur die Frage wie viele I2C Busse hast du mit Multiplexern 
usw?

von Jurgen H. (jache)


Lesenswert?

Das verstehe ich ja, mir war aber nicht klar, dass hinter dem 
Multiplexer immer wieder ein "neuer" I2C Bus entsteht. Aber das habe ich 
verstanden und werden hinter dem Multiplexer für jedes angeschlossene 
Gerät ein paar Pullups einbauen.

Mein Hauptbus mit

- OLED 0.42"
- 2 x I2C Multiplexer TCA9548
- Gyroskop MPU6050
- einzelner INA219

bekommt auch ein paar Pullups, hier habe ich habe noch nicht verstanden 
welchen Wert diese Widerstände bekommen sollen?

: Bearbeitet durch User
von Klaus H. (hildek)


Lesenswert?

Jurgen H. schrieb:
> Sehe ich es dann richtig, dass nach jedem Ausgang vom Multiplexer zu den
> INA219 Sensoren ein 4k7 Pullup für SCL und SDA passt?

Der passt dann, wenn für die gewählte I2C-Geschwindigkeit und die 
vorhandenen kapazitiven Lasten die Anstiegszeiten noch dem Datenblatt 
entsprechen - für die Sensoren und den Mux. Auch die Leitungslängen und 
eine eventuell störende Umgebung sollten mit einfließen.

In vielen Datenblättern und in der I2C-Spec sind die meisten Angaben für 
3mA Strom durch den PU zu finden. Ganz so viel muss es nicht sein, aber 
unter 1mA würde ich nicht gehen.

Lothar M. schrieb:
> Im Datenblatt
> https://www.ti.com/lit/ds/symlink/tca9548a.pdf ist auf Seite 26 beim
> Bild 20 Schluss...
Dort ist das Bild 13 zunächst mal interessant, wie ich schon schrieb. 
Und auch die Bilder 14-16.
In der I2C-Spec dann die Bilder 41 und 42 für die Wahl des 
Widerstandswerts.
In beiden Dokumenten ist auch ein Gleichung für Rp_min und Rp_max 
angegeben.

: Bearbeitet durch User
von Manfred P. (pruckelfred)


Lesenswert?

Jurgen H. schrieb:
> 2 x I2C Multiplexer TCA9548 mit einmal 4 und einmal 5 INA219.

Du hast das Datenblatt des INA219 angeschaut? Die Multiplexer sind 
überflüssig, es lassen sich 16 verschiedene I2C-Adressen festlegen!

von Joachim B. (jar)


Lesenswert?

Jurgen H. schrieb:
> Ich habe keine Sternverkabelung, sondern auf dem PCB eine 0.3mm Leitung
> die über das Board geht

echt? 0,3mm?

: Bearbeitet durch User
von Tobias S. (x12z34)


Lesenswert?

Jurgen H. schrieb:
> bekommt auch ein paar Pullups, hier habe ich habe noch nicht verstanden
> welchen Wert diese Widerstände bekommen sollen?

Warum willst Du EINEM Bus mehrere Pullups verpassen? Oder meinst Du mit 
"ein paar Pullups" vielleicht "ein Paar Pullups"? Kleiner aber feiner 
Unterschied ;-) Ein Paar pro I²C-Bus reicht (mit wenigen Ausnahmen) 
vollkommen aus.

Weiter oben wurden bereits sinnvolle Werte genannt:

Stephan S. schrieb:
> 47k sind sicher viel zu viel. Bei 3.3 Volt kann man insgesamt locker auf
> 1.5 bis 2 k runtergehen.

Cyblord -. schrieb:
> Wenn dann 4k7.

Klaus liefert eine Erklärung für diese Werte:

Klaus H. schrieb:
> In vielen Datenblättern und in der I2C-Spec sind die meisten Angaben für
> 3mA Strom durch den PU zu finden. Ganz so viel muss es nicht sein, aber
> unter 1mA würde ich nicht gehen.

Je mehr Geräte an demselben Buis hängen, desto größer wird die 
Lastkapaziät und desto kleiner müssen die Pullup-Widerstände werden. Du 
solltest allerdings noch kein Problem haben.

Mit anderen Worten: Mit 1k bis 10k bist Du vermutlich im grünen Bereich 
(UM10204, Grafik 41). Erst recht, wenn Du Dich auf den Kernbereich 
beschränkst und irgendwas so um die 2k-4k7 nimmst.

von Sebastian W. (wangnick)


Lesenswert?

Jurgen H. schrieb:
> bei den Bildern 41 und 42 fehlt mir die Erfahrung um diese richtig zu
> interpretieren

Jurgen H. schrieb:
> Mein Hauptbus mit
>
> OLED 0.42"
> 2 x I2C Multiplexer TCA9548
> Gyroskop MPU6050
> einzelner INA219
>
> bekommt auch ein paar Pullups, hier habe ich habe noch nicht verstanden
> welchen Wert diese Widerstände bekommen sollen?

Bild 42 sagt dir, dass die Pullup-Widerstände (bei 3V Busspannung) nicht 
kleiner als 1k sein sollen. Warum? Weil sonst in einen Busteilnehmer, 
der den Bus auf Low zieht, mehr als 3mA fließen würden.

Bild 41 sagt dir, dass die Pullup-Widerstände nicht größer als 10k (bei 
100pF Gesamtlastkapazität) bzw. 5k (bei 200pF Gesamtlastkapazität) sein 
sollen.

Also such dir aus den Datenblättern der obigen Teilnehmer deines 
Hauptbus, und eventueller Kabel, die Einzellastkapazitäten heraus, 
addiere sie, und dann benutze Bild 41 (oder die darüber angegebene 
Formel) um die Maximalgröße der Pullup-Widerstände zu bestimmen.

Je kleiner die Pullups desto schöner die steigenden Flanken, aber desto 
mehr Strom fließt.

LG, Sebastian

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.