Pullupwiderstände verringern. Aber nicht unter 2,2kOhm.
Eine Kabel mit weniger Leitungskapazität verwenden.
I2X Extender verwenden zB P82B715
I2C Accelerator verwenden
Grüße Uwe
Ein I2C Accelerator ist praktisch ein Transistor den den Bus überhalb einer bestimmten Spannungsschwelle aktiv auf HIGH zieht und bei Erreichen von fast HIGH wieder ausschaltet. Dadurch wird die Leitung schneller HIGH.
Unten Grafik mit Pullup (Sägezahn) und mit Accelerator (Rechteck).
vielen Dank für Eure Antworten. Ich hatte mich gestern Abend noch weiter mit dem Thema auseinandergesetzt und auch schon die Lösungsansätze mit dem Netzwerkkabel und dem I2C Extender P82B175 gefunden. Damit soll man sogar Kabellängen bis 100 m realisieren können.
Das mit dem LTC 4311 ist für mich neu. Und von Pullupwiederständen (verringern) hatte ich auch schon etwas gelesen. Aber da ist mir nicht klar, wie das praktisch funktioniert.
Auf jeden Fall bin ich jetzt sicher, dass es eine Lösung gibt und das ist zunächst mal das wichtigste.
Aber da ist mir nicht klar, wie das praktisch funktioniert.
Die I2C Devices ziehen die Leitungen nur auf Masse (Open Collektor bzw Open Drain Ausgänge). Irgendwie muß die Leitung dann aber wieder auf HIGH. Das macht der Pullupwiderstand. Der muß aber die Leitungskapazität füllen und Strom für die I2C Device-Eingänge liefern. Das sind zwar kleine Kapazitäten (max 400pF zulässig) und kleine Eingangsströme aber der das Laden muß schnell geschehen; Je nach Taktfrequenz auch unter 02µS. Ein kleinerer Widerstand bringt da einfach mehr Strom. Zu klein darf der Widerstand dann aber nicht sein weil die Ausgangstransistoren den Strom über den Pullupwiderstand vertragen müssen.
Ein Accelerator macht das aktiv; ein Extender hat einfach mehr Mum.
Grüße Uwe
@Uwe und wo kommt das Ding dann hin ? Irgendwo in die Mitte oder ehr auf der Slave Seite ?
Ich zwar nicht uwe, aber hier meine Antwort:
Das ist egal.
wichtig ist, das die Bedingungen aus dem Datenblatt eingehalten werden.
Während ein "normaler" Bus pullups nach gutdünken kann (Begrenzung wurde schon genannt), sollte schon ein wenig mitgerechnet werden.
Im Datenblatt (siehe oben) ab Seite 7 gibt es die Application-Infos.
Wichtig ist, das die Kapazitäten nicht ins "unendliche" gehen, damit der dynamische pullup das Signal zeitgerecht aufbereiten kann.
Oszillator schließe ich aus. Ich bin kein Elektroniker und auch nicht wirklich ein Programierer. Ich kann nur googeln und zusammensetzen. Mein aktueller Test mit einem 5 Cat_Kabel hat noch keinen Erfolg gebracht. Jetzt bliebe noch die Lösung mit den den Pullups. Aber dafür bräuchte ich einen Schaltplan oder ein Fritzing, weil ich das immernoch nicht verstanden habe.
Danke!
Michael
Pull-UP = Ziehe Hoch
Ein Pull-Widerstand ist, wie der Name vermuten lässt, ein Widerstand, Der die Leitung 'irgendwohin' zieht.
Der 'Up' zieht die Leitung nach Oben - also Vdd, der 'Dn' zieht nach Unten, also GND.
Bei I²C sind die zwei Leitungen SDA und SCL per Pull-UPs nach oben gezogen - die Bus-Teilnehmer können selber die Leitungen NUR nach Unten ziehen (mit GND verbinden).
Diese 'GND-Impulse' sieht dann der andere Teilnehmer (Master oder Slave) und 'liest den Kram mit'.
Um die Pull-UPs zu verkleinern, packst Du irgend welche Widerstände ZUSÄTZLICH auf die zwei Bus-Leitungen nach Vdd.
Egal, wie groß Du diese Widerstände wählst, der sich ergebende Gesamt-Widerstand ist danach kleiner, als vorher (weil durch alle Widerstände, egal wie groß, immer noch Strom durch geht - und die Menge an Strom vergrößert sich durch jeden weiteren parallelen Widerstand).
Nimm Was in der Größe 2k2...4k7...10k0 und stecke Diese von DSA->Vdd bzw SCL->Vdd.
Wenn danach gar Nichts mehr klappt, war der Wert zu gering - also sinnvoll oben anfangen.
Wenn 10K funktioniert, 4k7 vll. noch probieren, aber nicht mehr tiefer.
Wenn erst die 4k7 Erfolg zeigen, kann man noch die 2k2 versuchen - aber man kann hiermit auch unter das Limit drunter kommen - was Dir auch einer der Slaves übel nehmen kann.