Forum: Mikrocontroller und Digitale Elektronik I2c-Bus und die vielen Pullup's


von harald.g (Gast)


Lesenswert?

Jedes I2C-Modul wie zb Lcd-Interface,RTc oder BME280 hat Pullup's auf 
der Platine. Bisher habe ich Pullup's immer entfernt bis auf die eigenen 
Pullup's am µP.

Wie macht Ihr das ?

Wieso ist überhaupt auf jeder Platine ein Pullup paar,
obwohl ein I2c-Bus doch immer mehrere Slaves hat.

mfg
harald

von Wolfgang (Gast)


Lesenswert?

Ein Pull-up pro Bussegment
TI Application Report SLVA689 "I2C Bus Pullup Resistor Calculation"
https://www.ti.com/lit/an/slva689/slva689.pdf

Für lange Busleitungen an jedem Ende einen.

von Einer K. (Gast)


Lesenswert?

harald.g schrieb:
> Wieso ist überhaupt auf jeder Platine ein Pullup paar,

Das fliegenden Aufbauten ganz praktisch.

> Wie macht Ihr das ?

Ich schaue mir bei Prototypen eigentlich jedes Signal mit dem Oszi an.
Dabei konnte ich schon lustige Erscheinungen beobachten....
Gerade I2C ist da ein dankbarer Kandidat.

von harald.g (Gast)


Lesenswert?

Hallo Wolfgang,

dann muss ich also wie bisher "mühselig da SMD" die überzähligen 
Pullup's
von jedem Modul entfernen.

Gibt es keine andere Lösung

harald

von Einer K. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Das fliegenden Aufbauten ganz praktisch.

Korrektur:
 Das ist bei fliegenden Aufbauten ganz praktisch.

von g457 (Gast)


Lesenswert?

> dann muss ich also wie bisher "mühselig da SMD" die überzähligen
> Pullup's von jedem Modul entfernen.
>
> Gibt es keine andere Lösung

[0]

HTH

[0] https://de.wikipedia.org/wiki/Seitenschneider

von Al. K. (alterknacker)


Lesenswert?

Arduino Fanboy D. schrieb:
> Korrektur:
>  Das ist bei fliegenden Aufbauten ganz praktisch.

..glaube das hat trotzdem fast jeder verstanden.;-))

von Wolfgang (Gast)


Lesenswert?

harald.g schrieb:
> dann muss ich also wie bisher "mühselig da SMD" die überzähligen
> Pullup's von jedem Modul entfernen.

Je nach dem, wieviele Slaves du dran hast und wie groß die Pull-Ups 
sind, kannst du sie evtl. auch drin lassen. Guck nach, was dein Treiber 
kann und wie groß der resultierende Gesamtwiderstand ist.

Was hast du denn für ein Problem mit deinem I2C?

von harald.g (Gast)


Lesenswert?

Hallo Wolfgang

bis jetzt läuft alles gut da nur 4.7K als Pullup vorhanden sind.
Aber wie ist es, wenn ich bei den neuen Slave zb Bme280 oder
0,91 ole Display die Pullups nicht entferne ?

Gruß
harald

von M. K. (sylaina)


Lesenswert?

harald.g schrieb:
> Hallo Wolfgang
>
> bis jetzt läuft alles gut da nur 4.7K als Pullup vorhanden sind.
> Aber wie ist es, wenn ich bei den neuen Slave zb Bme280 oder
> 0,91 ole Display die Pullups nicht entferne ?
>
> Gruß
> harald

Kann gut gehen, muss es aber nicht. Wenns irgendwann zu viele Pullups 
sind wird der Gesamtwiderstand zu klein und der I2C-Treiber wird 
überlastet -> die Kommunikation wird zusammenbrechen.

von Karl K. (karl2go)


Lesenswert?

harald.g schrieb:
> Wieso ist überhaupt auf jeder Platine ein Pullup paar,
> obwohl ein I2c-Bus doch immer mehrere Slaves hat.

Weil es halt Dödel gibt, die die Pullups im Aufbau vergessen und dann 
bei Amazon dumme Bewertungen schreiben, dass der Sensor nicht 
funktioniert.

Prinzipiell darf I2C natürlich mehrere Pullups haben. Da keine 
Terminierung vorgesehen ist, ist auch egal, wo die Pullups sitzen. 
Natürlich empfiehlt es sich, bei Hot-plugable-Sensoren ein Pullup-Paar 
direkt an den Master zu setzen, um definierte Bedingungen zu schaffen.

harald.g schrieb:
> Gibt es keine andere Lösung

Doch: Rechnen.

Per I2C Specs muss ein Gerät für low-level 3mA schalten können (20mA bei 
Fast+, aber das brauchen wir nicht). Also sollte der Pullup für 5V nicht 
kleiner als 1,67kohm, bei 3,3V nicht kleiner als 1,1kohm sein. Real 
würde ich nicht unter 1k8 bzw. 1k2 gehen.

Nach oben begrenzt die Leitungslänge = Leitungskapazität und die 
gewünschte Datenrate den Pullup. Man kann mit 10kohm bei kurzen 
Leitungen arbeiten, man kann auch mit 10kHz Clock bei 3m Leitung 
arbeiten.

Üblicherweise arbeite ich mit 4k7 Pullups am Master. Da kann ich noch 3 
Module mit je 10k dazuschalten, und bin immer noch über der 1k8 Grenze 
für 5V. Bei 3,3V kann ich sogar 6 Module mit je 10k dazuschalten, bevor 
ich die Grenze von 1k2 erreiche.

Da der Strom nur bei laufender Datenübertragung fließt, entsteht auch 
bei Batteriebetrieb kein nennenswert höherer Strombedarf durch die 
Pullups, solange man nicht permanent Daten überträgt.

Allerdings muss man berücksichtigen, dass manche Module einen 
Levelshifter und damit je 2 10k Widerstände pro Leitung enthalten - was 
die Anzahl der möglichen Module glatt mal halbiert. Also dann nur noch 3 
Module bei 3,3V.

von Manfred (Gast)


Lesenswert?

Karl K. schrieb:
> Da kann ich noch 3 Module mit je 10k dazuschalten,

Ich habe gerade mal geschaut, hier vorhandene China-Module haben je nach 
Tageslaune 4k7 oder 10k drauf.

> Per I2C Specs muss ein Gerät für low-level 3mA schalten können

In einem realen Gerät habe ich zwei Module mit 4k7 und drei mit 10k, 
also Glück, dass es knapp außerhalb der Spec. noch funktioniert.

von A. S. (Gast)


Lesenswert?

harald.g schrieb:
> Wieso ist überhaupt auf jeder Platine ein Pullup paar,
> obwohl ein I2c-Bus doch immer mehrere Slaves hat.

Nein. Die Module sind oft zum ausprobieren, da sind sie oft die 
einzigen, da ist es gut, wenn sie out of the Box funktionieren.

In dein Design, an dein Gerät kommen deine Leiterplatten, mit den reinen 
ICs und den Pullups, die Du brauchst.

von Clemens L. (c_l)


Lesenswert?

harald.g schrieb:
> "mühselig da SMD" die überzähligen Pullup's
> von jedem Modul entfernen.

Bei SMD ist destruktives Entlöten einfach: mit einem möglichst großen 
Lötkolben den Chip so lange braten, bis das Zinn an allen Kontakten 
geschmolzen ist.

von Karl K. (karl2go)


Lesenswert?

A. S. schrieb:
> In dein Design, an dein Gerät kommen deine Leiterplatten, mit den reinen
> ICs und den Pullups, die Du brauchst.

Klar, ich löte so einen BME280 mal schnell selber in meinem Design, wenn 
ich den für meinen Datenlogger brauche.

Ich löte üblicherweise auch meine Raspis selber zusammen, die fertigen 
sind nur zum Ausprobieren.

Clemens L. schrieb:
> Bei SMD ist destruktives Entlöten einfach:

Wobei man beim Pegelwandler mit Mosfet beachten muss, dass der auch 
runter muss und die D-S Strecke dann irgendwie gebrückt wird.

von jemand (Gast)


Lesenswert?

Man kann die Pullups lassen, muss aber schauen, dass die Buslast noch 
erlaubt ist. Welche das ist, steht in den Datenblättern der 
I2C-Bausteine.

Nehmen wir mal komplett aus der Luft ein EEPROM:
https://ww1.microchip.com/downloads/en/DeviceDoc/20005202A.pdf

Hier lesen wir:
Gar nichts. Bravo Microchip :-(

Im Text steht aber, dass 2k für 400kHz nötig sind. Also können Werte 
über 2k als sicher gelten, sonst würde man das so nicht empfehlen.
Hast du als 2x4k7 im Bus oder 5x10k ist das ok. 2x2k2 wäre nicht ok.

von A. S. (Gast)


Lesenswert?

Karl K. schrieb:
> Klar, ich löte so einen BME280 mal schnell selber in meinem Design, wenn
> ich den für meinen Datenlogger brauche.

Zum einen findest Du genauso Boards ohne Pullups (wie sie's machen, 
machen sie's verkehrt)

Zum anderen kann doch das abwischen von 2 Widerständen beim Basteln 
nicht wirklich ein Problem sein. Das geht zur not mit fetter 
ausgebrannter Spitze. Dazufrickeln ist ohne Übung, passendes Hünerfutter 
und Werkzeug ungleich mehr Arbeit.

von Jobst Q. (joquis)


Lesenswert?

jemand schrieb:
> Im Text steht aber, dass 2k für 400kHz nötig sind. Also können Werte
> über 2k als sicher gelten, sonst würde man das so nicht empfehlen.
> Hast du als 2x4k7 im Bus oder 5x10k ist das ok. 2x2k2 wäre nicht ok.

Im Text steht:
Since it is an open-drain terminal, the SDA bus requires a pull-up 
resistorto VCC (typical 10 k for 100 kHz, 2 k for 400 kHz).

Die 2K sind typisch, nicht minimal. Es ist eher andersherum, um ihn mit 
400 khz betreiben zu können, muss er niedriger sein als für 100 khz, 
also nicht viel mehr als 2K.

Im Allgemeinen gibt es eher Probleme mit zu hohen PullUp-Widerständen 
als mit zu niedrigen, vor allem bei höherem Takt und längeren Leitungen. 
Sie müssen zur Leitungskapazität und den Taktzeiten passen. Und es ist 
generell besser an beiden Enden einer Leitung PullUps zu haben.

von Klaus (Gast)


Lesenswert?

jemand schrieb:
> Hier lesen wir:
> Gar nichts. Bravo Microchip :-(

Weil der Wert in der I2C Spec steht. Daher weiß ich, daß der XYZ-Chip 
3mA liefert, so er denn das I2C Logo trägt.

Also: Bravo Microchip, keinen unnötigen Platz im Datenblatt verschwendet 
und es nicht mit redundanten Informationen zugemüllt.

MfG Klaus

von spess53 (Gast)


Lesenswert?

Hi

>Hier lesen wir:
>Gar nichts. Bravo Microchip :-(

Wieso? steht doch drin:

D4 VOL Low-level Output Voltage   —   — 0.40 V   IOL = 3.0 mA, VCC = 
2.5V
                                                 ------------
Und das stimmt mit der I2C-bus Spezifikation überein:

IOL LOW-level output current VOL = 0.4 V    3  -  ... mA
---                                         ------------
MfG Spess

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.