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
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.
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.
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
> 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
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?
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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