Hi bin grad am rumbasteln, wie ich mit dem I²C-Bus möglichst weite Strecken überwinden kann. Bin bis jetzt auf 25m gekommen. Hab ma nen Video gemacht(nix besonderes).
Werd meine Schaltung morgen noch nachreichen falls einer ohne viel suchen nachbastel will.
Hier erst mal das Video:
Die maximale Länge der I2C Schnittstelle hängt von der Kapazität und den PullUP-Widerständen ab.
Die Kapazität hängt vom Typ des Kabels, welche Leitungen Du verwendest, und von der Länge ab.
Außerdem kann I2C mit verschiedenen Geschwindigkeiten arbeiten. Je niedriger desto länger kann der Kabel sein.
Grüße Uwe
Jo.
Nun ich habe doppelt geschirmtes CAT5e Kabel 25m von Reichelt für rund 7,5€ gekauft. Das Kabel ist nicht schlecht.
Als Pullups habe ich 4,7k genommen. Müsste man halt je nach Länge/ Anzahl Busteilnehmer ändern (Pullups sollten größer werden wenn ich micht nicht irre).
Ich habe außerdem SDA mit GND verdrillt und SCL mit VCC verdrillt. Die Schirmung habe ich einseitig auf Masse gelegt.
Am Takt habe ich bisher noch nie "rumgespielt". Es sollte also der "Standarttakt" den der Arduino/ die Lib vorgibt.
@ Uwe hab ma gelesen das manche noch Kondensatoren von SDA und SCL auf GND legen. Weisst du was das für ein Sinn hat?
Der PullUp muß kleiner gewählt werden je größer die Kapazität (Länge des Kabels) ist. Die Grenze ist 1,5kOhm.
Das Problem ist, daß der über die Kabellänge verteilte Kondensator zwischen SDA bzw SCL und Masse über den über die Kabellänge verteilte Widerstand des Kabels entladen werden muß um ein LOW signal zu erhalten bzw über den Pullup-Widerstand geladen werden für ein HIGH-Signal. Ist die Summe der Kondensatroren und Widerstände zu groß ist die Ansiegszeit der Flanken zu flach um ein ordentliches H-L Signal zu erhalten und die Schnittstelle funktioniert nicht mehr.
Ein zusätzlicher Kondensator verschlechtert eigentlich alles.
Viele Grüße Uwe
Danke für die Aufklärung!
Deswegen find ich den Chip ja so Klasse, er erhöht die zulässige Kapazität von 400 pF auf 3000 pF. Ich werd die Tage auch ma testen ob ich das Klabel verlängern kann nach den Möglichkeiten die du oben geschrieben hast(Takt, R verringern) und ob man die P82B715 mehrfach nehmen kann um die zulässiger Kapazität noch weiter zu erhöhen(mit mehr mein ich mehr als 2(2 sind im datenblatt als Beispiel vorhanden)).
Der I2C Bus wird über PullUp-Widerstande auf HIGH gezogen. Die Ausgänge der I2C Bausteine ziehen über einen Open Kollektor bzw Open Drain auf Masse. So können mehrer Ausgänge paralellgeschaltet werden. Mehrere Slave gleich wie mehrere Master.
Der P82B715 übersetzt die Standart I2C in ein "Subnetz" mit Ausgängen die einen höheren Strom auf Masse schalten kann (max 30mA entspricht 170 Ohm pullup). So kann ein größere Kapazität geschaltet (geladen oder entladen) werden. Dieses Subnetz funktioniert nur zwischen 2 oder mehr P82B715 ( so ähnlich wie ein MAX232 oder MAX485 der eine serielle Schnittstelle mit TTl Level auf andere Level / Verbindungen übersetzt und so größere Weiten überbrücken kann). Eine Größere Kapazität heißt ein längeres Kabel.
Ich glaube nicht daß man mehrere "Subnetze" in Reihe schalten kann:
I2C --- P82B715 --- P82B715 --- I2C --- P82B715 --- P82B715 --- I2C
Grüße Uwe
Hallo bytzmaster
Kannst du bitte noch den Schaltplan hochladen?
Hintergrund: ich habe 2 cat7 Kabel (12m und 22m) und 2 gleiche i2c Sensoren und jeweils die extender p82b715 nach Datenblatt (ohne zusätzliche pullups)
Mit dem kurzen Kabel funktionieren beide Sensoren.
Das lange Kabel funktioniert nur mit einem Sensor. ( ich vermute zu hohe Kapazität sensorseitig und schließe defektes oder falsch gelötetes Kabel aus)
Würden diese pullup widerstände helfen?
Vielen Dank für euren Rat
Das dieser Tread schon einige Jahre her ist, ist dir wohl aufgefallen?
Ich setze selber I2C über längere Kabel ein und das funktioniert prima.
Ich vermute einen Schaltungsfehler.
Von welchen Pullup-Widerständen sprichst du?
Ich spreche von dem pull up widerstand zwischen den beiden P82b715 extendern. (Bisher keiner verbaut.)
Bei einem schaltungsfehler würde das lange Kabel ja an keinem der Sensoren funktionieren. (Tut es aber an dem einen). Das kurze Kabel funktioniert an beiden
Evtl. kaputter extender? Wie kann man das testen? Da mit Sensor verlötet ist tausch der beiden nicht möglich
Mein Aufbau sieht so aus
(<> ist ein Stecker)
Arduino - p82b715 <>Cat7 <> p82b715(Sensor 1)
<>Cat7 <> p82b715 (sensor2)
Ist es wichtig, dass sdl und gnd verdrillt verlaufen? Ich habe 8 Litzen im Kabel (4x2 Kabel verdrillt und in Folie) und jeweils sda/scl/gnd/ vcc einzeln in einem der 4 Stränge
Ja, die Pullups sind wichtig. Je länger die Strecke, desto kleiner der Widerstand.
Deinen Aufbau versteh ich nicht.
Du brauchst für jeden zweig 2 Extender.
Die kabel müssen paarweise (GND + sda / VCC + scl) verdrillt sein.
Sda und scl können auch vertauscht werden.
HotSystems:
Du brauchst für jeden zweig 2 Extender.
Ich stecke entweder Kabel 1 oder 2 ein. Und dabei habe ich je 2 Extender im Einsatz.
Okay danke für deine Tipps, dann versuche ich es mal mit Pullups und verdrillten Adern.
Wie viele widerstände hast du zwischen den beiden extendern (gebufferte Seite) verbaut.
Mich wundert nur, dass das erste kürzere Kabel 10m ohne all das funktioniert
Fraser-Island:
Ich stecke entweder Kabel 1 oder 2 ein. Und dabei habe ich je 2 Extender im Einsatz.Okay danke für deine Tipps, dann versuche ich es mal mit Pullups und verdrillten Adern.
Mich wundert nur, dass das erste kürzere Kabel 10m ohne all das funktioniert
Ok, mit dem Umstecken ist es jetzt klar, hatte das so nicht verstanden.
Und das kürzere Kabel funktioniert, weil es so gerade noch die Toleranzeen einhalten.
Fraser-Island:
Wie viele widerstände hast du zwischen den beiden extendern (gebufferte Seite) verbaut?
Du hast mir sehr geholfen, Dankeschön!!!
Fraser-Island:
Du hast mir sehr geholfen, Dankeschön!!!
Ok,
ich habe immer nur je Leitung einen Widerstand auf der "Masterseite" eingebaut. Also am Controller.
Bei mir sind das 330 E bei ca. 20 m Kabel.
Hier findest du noch ein Schaltbild dazu: