Ich arbeite öfters mit I2C und weiß, das es auf die Pull-Ups drauf an kommt.
Nun stellt sich mir die Frage, ich habe ein STM32F407.... nutze von diesem den I2C Bus 100KHz Clockrate, nun habe ich an dem I2C Bus 1.8K auf SCL und 1.8K auf SDA zu VCC 3.3V, bei 100 KHz. (Master)
Ich möchte aber nun an den I2C Bus 5 weitere Platinen als Slave anschließen mit einem STM32F103.... über RJ45 Steckverbinder.
Müsste ich an den 5 Platinen jeweils auch immer 2 Pullups bestücken, oder reicht es, wenn das lediglich nur der Master hat?
Bin mir da etwas unschlüssig, aber wäre dann ja bei dem selben Bus, doppelt gemoppelt.. würde sich das auch negativ auswirken?
Je mehr pull-ups, umso niedriger der pullup-widerstand (R-Parallelschaltung) - irgendwann kommt der Punkt, an dem die treiber-pins den Bus nicht mehr weit genug runter ziehen können, und es funktioniert nicht mehr.
Die meisten Fertigmodule haben PullUps von 10K. Davon kann man problemlos mehrere in einem Bus haben. Es ist auch gut, auf beiden Seiten PullUps zu haben, besonders bei längeren Zuleitungen.
Die meisten Fertigmodule haben PullUps von 10K. Davon kann man
problemlos mehrere in einem Bus haben.
Das ist der Arduino-Kompromiss zwischen "geht nicht", weil Pull-Up vergessen und "geht nur mit einem Slaves", weil bei mehreren der Strom für die Treiber zu hoch wird.
Die meisten Fertigmodule haben PullUps von 10K. Davon kann man
problemlos mehrere in einem Bus haben.
Mag ja noch gehen bei sehr kurzen Verbindungen. Ich selber würde trotzdem mindestens 1mA spendieren: bessere Flanken, bessere Störsicherheit.
Also höchstens 3k3 in 3V3-Systemen bzw. 4k7 in 5V-Systemen.
Und wer fragt heute noch in mikrocontroller.net wo man doch
alles mit chatGPT erschlagen kann.
Kann man: "Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an jedem Bus verwendet werden, nicht an jeder Karte. Diese Widerstände sind wichtig, um die Datenleitungen auf ein definiertes logisches Niveau zu ziehen und Stabilität in der Kommunikation zu gewährleisten. Typischerweise werden Pull-up-Widerstände zwischen den SDA- und SCL-Leitungen und der Versorgungsspannung platziert."
Und wer fragt heute noch in mikrocontroller.net wo man doch
alles mit chatGPT erschlagen kann.
Kann man: "Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an
jedem Bus verwendet werden, nicht an jeder Karte. Diese Widerstände sind
wichtig, um die Datenleitungen auf ein definiertes logisches Niveau zu
ziehen und Stabilität in der Kommunikation zu gewährleisten.
Typischerweise werden Pull-up-Widerstände zwischen den SDA- und
SCL-Leitungen und der Versorgungsspannung platziert."
Je mehr pull-ups, umso niedriger der pullup-widerstand
(R-Parallelschaltung) - irgendwann kommt der Punkt, an dem die
irgendwann kommt der Punkt, an dem jeder merkt, dass I2C für Chip-2-Chip Kommunikation ausgelegt ist, bei dem die Anzahl der Teilnehmer bekannt ist.
Bei Board-2-Board nutzt man keinen (aktiven) I2C-Bus sondern nur die Spannungen und geht an Ort und Stelle über einen Treiber.
Damit ist der Bus spannungssicher und stromunabhängig.
Du brauchts nur einmal irgendwo einen Lastwiderstand gegen VDD und GND und nimmst so Stromeinkopplungen weg. (wegen du = R * di !)
Auf den boards baut man hinter dem Treiber sein eigenes maximal niederohmiges I2C-Netzwerk.
Also höchstens 3k3 in 3V3-Systemen bzw. 4k7 in 5V-Systemen.
... und mindestens 1k / 1,5k füge ich hinzu.
Das Interessante ist dann, wenn der Teilnehmer versucht, Clock-Stretching oder ähnliche Spässe zu machen und mit seinen 3mA maximum auf die manche Chips ausgelegt sind, gegen die vielen pulls kämpft.
Also höchstens 3k3 in 3V3-Systemen bzw. 4k7 in 5V-Systemen.
... und mindestens 1k / 1,5k füge ich hinzu.
Das Interessante ist dann, wenn der Teilnehmer versucht,
Clock-Stretching oder ähnliche Spässe zu machen und mit seinen 3mA
maximum auf die manche Chips ausgelegt sind, gegen die vielen pulls
kämpft.
Warum das denn?
meine 1.8K waren eigentlich schon laut Datenblatt falsch, denn im Datenblatt von meinem STM32F407 stehen 2x 4k7 Widerstände drin.
meine 1.8K waren eigentlich schon laut Datenblatt falsch, denn im
Datenblatt von meinem STM32F407 stehen 2x 4k7 Widerstände drin
Die Minimal- und Maximalwerte der I2C-Pullup-Widerstände berechnet man aus den Stromgrenzen und der Gesamtkapazität am Bus. Ich kann mir nicht vorstellen, dass das Datenblatt des STM32F407 4k7-Widerstände VORSCHREIBT. Wo soll das genau stehen?
Inwiefern? Ist doch eine passende und korrekte Antwort.
"Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an
jedem Bus verwendet werden, nicht an jeder Karte."
Das ist falsch. Mit PullUp-Widerständen an jeder Karte werden kapazitive und induktive Einstreungen auf die Leitung reduziert. Deshalb sind sie zu empfehlen.
irgendwann kommt der Punkt, an dem jeder merkt, dass I2C für Chip-2-Chip
Kommunikation ausgelegt ist, bei dem die Anzahl der Teilnehmer bekannt
ist.
Ka, die Anzahl sollte konstant sein.
Bei Board-2-Board nutzt man keinen (aktiven) I2C-Bus sondern nur die
Spannungen und geht an Ort und Stelle über einen Treiber.
Das ist mir zu pauschal vereinfacht. Ich nutze Arduino und Boards mit z.B. D/A-Wandler oder Strommessung, läuft einwandfrei. Die liegen allerdings im selben Gehäuse, der gesamte I2C ereicht maximal 30cm - das finde ich unkritisch und dürfte im Rahmen seiner Spezifikationen bleiben.
"Ja, für eine I2C-Verbindung sollten Pull-up-Widerstände an
jedem Bus verwendet werden, nicht an jeder Karte."
Das ist falsch. Mit PullUp-Widerständen an jeder Karte werden kapazitive
und induktive Einstreungen auf die Leitung reduziert. Deshalb sind sie
zu empfehlen.
Ich denke auch, dass das nicht schadet. Es bleibt aber zu beachten, dass die Summe aller nicht zu niederohmig wird. In der Praxis bekommt man einen echten Bus mit Abschluß an den beiden Enden kaum umgesetzt, das wird eher ein Stern oder Baum.