Leitungslänge I2C

Hallo Forum,
ich möchte gerne 2LCD per I2C an einen Uno anschliessen. Der Steckbrettaufbau hatte funktioniert.
Beim Absetzen des zweiten Displays : Die Busleitungen sind mit jeweils
10k als Pullup gegen Vcc angeschlossen. Das 4 adrige Kabel ist mit Vcc/Gnd und die Busleitungen
jeweils verdrillt. Bei einer Länge von ca 7 m ist nur ein LCD betreibbar.
Gibt es eine Möglichkeit dies zu verstärken, ein anderes Kabel ( abgeschirmt?) oder einen anderen Bus zu benutzen? Würde sich aus Eurer Sicht etwas ändern wenn ich 2 Arduinos verbinde ?

Danke für die Hilfe
Gruss olmuk

I2C sollte man - und daher auch die Bezeichnung - nur auf einer Leiterplatte oder mit kurzen Verbindungen einsetzen. Schon bei mehr als 50 cm können starke Probleme auftreten. Für alles was über ein längeres Kabel übertragen wird, sollte eine differentielle Schnittstelle (mit paarweisen Leitungen) eingesetzt werden, z.b. RS-485 oder Ethernet, da sind die Kabel dann auch entsprechend geschirmt.

Gruß, Marv

I2C ist nur für innerhalb eines Gerätes gedacht. 7m ist also schon sehr sehr viel.

Und 10K ist sehr groß 4,7k ist sicherlich angemessener. Und bei der Länge, vielleicht sogar 2K bis 3 K, wenn es die Partner können.

RS232 kann die Länge, ist aber kein Bus RS485 kanns und ist ein Bus(wenn man denn will)

Danke Euch - dann bin ich reingefallen und habe mich nicht richtig informiert. Es geht darum einen int und einen float zeitunkritisch zu übertragen. Gebt mir bitte mal einen Tipp hinsichtlich RS485

Hallo olmuk,
wie die Vorposter schon beschrieben haben ist i2c für diese Übertragungslänge schlecht geeignet. Dafür ist der Bus auch eigentlich nicht gedacht. Trotzdem ist es möglich i2c auch über etwas längere Kabelwege zu betrieben. Schau dir mal das IC P82B96P an. Laut Datenblatt sind damit längen bis 30m realisierbar jedoch sinkt mit der länge auch die Übertragungsrate.

Gruß
Django

Wieso brauchst Du so lange Kabel? Grüße Uwe

Es soll an einer zweiten Stelle das Display abgelesen werden und mit Verlegung in Kabelkanal kommt die Länge zusammen.....

Ich habe keine praktische Erfahrung, aber hier sollen 20m möglich sein.

agmue: .... aber hier sollen 20m möglich sein.

Bei mir funktioniert das mit dem P82B715 schon über mehrere Jahre mit normalem Telefonkabel (2x2x06) auf ca. 20 Meter fehlerfrei. Aber wie schon beschrieben, die Übertragungsrate sinkt dadurch deutlich. Das stört in meinem Projekt nicht, da ich hauptsächlich Relais und Lampen darüber schalte.

HotSystems: Aber wie schon beschrieben, die Übertragungsrate sinkt dadurch deutlich.

Danke für die Info! Reduziert sich die Übertragungsrate automatisch, oder muß ich dazu irgendwas machen?

Nein, muß man selbst kleiner programmieren. Grüße Uwe

Hier solltest Du die nötige Info finden.

HotSystems: Hier solltest Du die nötige Info finden.

Danke, habe ich überflogen, kommt in meine Linksammlung!

Laut einem Dokument von NXP (Siehe Seite 11) sollen sogar Längen bis 1000m mit i2c möglich sein. Dann jedoch lediglich mit einem Bustakt von 30kHz. Halte ich jedoch nur für eine Notlösung. Bei solchen Strecken sollte man sich echt Gedanken über ein anderes Bussystem machen. :)

Bei allen langen Leitungen hängt die Übertragung steiler Flanken hauptsächlich an zwei Dingen: richtig abgeschlossene Leitungen, und (entsprechend) leistungsfähige Treiber.

Was "lang" ist, hängt an der Taktrate, bei 1 GHz sind schon 10 cm "lang". Eine Leitung mit 150 Ohm Wellenwiderstand (Impedanz) und Abschlußwiderstand kann man nicht direkt an einen Arduino Pin anklemmen, und auch nicht sauber mit einem asymmetrischen Treiber (passiver Pullup und aktiver Pulldown) treiben.

Bei unidirektionalen Punkt-zu-Punkt Verbindungen kann man auf "twisted pair" Kabel (definierte Impedanz) und ggf. Differenzsignale (optimale Störsicherheit) zurückgreifen, bei Bussystemen (mit mehreren Stationen) und bei bidirektionalen Leitungen (wie von I2C verwendet) können keine Differenzsignale benutzt werden, da hilft nur eine möglichst saubere Anpassung an jede einzelne Verbindung.

Wenn zwei Displays über lange Leitungen angeschlossen werden sollen, dann müssen ja nicht beide am gleichen Bus hängen, und nicht einmal Signale zurückübertragen (außer wenn dort auch noch Tasten angeschlossen sind). Zudem ist fraglich, ob da eine schnelle Übertragung überhaupt notwendig ist - wie schnell soll die Anzeige denn flackern? ;-) Da wäre schon eine einfache serielle Übertragung mit RS-485 eine gute und einfache (1 Signal) Lösung. Dann kann man das Signal auch multiplexen (Treiber umschalten), das spart selbst gegenüber SPI eine Select- und eine Takt-Leitung, und man kommt mit einer einzigen UART aus. Dafür kann man dann etwas mehr Aufwand in die Treiber und Leitung stecken.

Ich habe mit RS485 schon 8km Leitung mit 150 Teilnehmern realisiert. Kann das nur empfehlen. Nach 1.5km war jeweils ein repeater angeschlossen. Die Lichtsteuerung DMX läuft auch mit 458. Größte Störungen konnte ich nicht feststellen trotz vieler großer elektrischer verbraucher.