Forum: Mikrocontroller und Digitale Elektronik I2C Bus über große Distanzen - geht das??


von ipirk (Gast)


Lesenswert?

Hallo!!
Über welche Distanz kann man eigentlich eine I2C Bus verlegen, ohne 
irgendwas an der vorhandenen Standard Hardware (PIC16F877 + 2x 3k3 
Pull_up´s an SCL & SDA) zu verändern???
Ich habe vor ein LCD Display über eine Distanz von ca. 30 - 40m mit nem 
I2C Bus anzusprechen!!!
Wüd mich über ne Antwort freuen!!!
MFG ipirk

von nemon (Gast)


Lesenswert?

mit busextendern sollte das gehen

von ipirk (Gast)


Lesenswert?

Hy nemo!!
Wie kann ich das den mit vorhandenen Bauteilen (div. Standart 
Transistoren, Widerständen, ... ) lößen?? Ich will keinen Busextender 
bestellen (das Projekt is ziemlich eilig)!!
MFG

von Compy (Gast)


Lesenswert?

"Standart" isses zwar net, aber idiotensicher: SN75176BP 
(RS485-Bustransceiver)

Frohe Weihnachten

von let (Gast)


Lesenswert?

Könnte klappen. Die SDA und SCL Leitungen sollten dann aber nicht
miteinander verdrillt sein. Sonst unterhalten die sich.
Ein geschirmtes Kabel wäre auch nicht schlecht.

von Andreas K. (a-k)


Lesenswert?

Compy wrote:

> "Standart" isses zwar net, aber idiotensicher: SN75176BP
> (RS485-Bustransceiver)

Wie funktioniert sowas bei einem Bus, der inhärent bidirektional ist 
(clock stretching)? Mit CAN Transceivern mag das gehen, aber mit RS485?

von Compy (Gast)


Lesenswert?

Nachtrag: Such mal nach "Totem-Pole-Treiber", sowas ähnliches verwenden 
die AVR als Ausgänge. Die können sowohl Strom ziehen als auch schieben 
(jew. einige 10 Milliampere). Mit ausreichenden Transen sollte sich 
sowas gut eignen. Man nimmt dafür gerne ein Komplementärpaar (BC547, 
NPN, und BC557, PNP), der eine zieht nach Masse, der andre nach Vcc. Das 
entspricht dann einem Verstärker, und wenn du Vcc hoch genug wählst (12V 
oder so), gibt's auch nen ausreichenden Rauschabstand und damit 
ordentlich Signalsicherheit. Auf der Gegenseite bastelste dir mit OPV am 
einfachsten Schmitt-Trigger.

von Compy (Gast)


Lesenswert?

Andreas Kaiser sacht:
> Wie funktioniert sowas bei einem Bus, der inhärent bidirektional ist
> (clock stretching)? Mit CAN Transceivern mag das gehen, aber mit RS485?

Er muss ja nicht unbedingt bidirektional gebaut werden, zumindest was 
das clock stretching angeht. Für die Datenleitung, da hasse recht 
schäm. Evtl. ne dritte Ader verlegen? tschuldigung...

von Andreas K. (a-k)


Lesenswert?

Dafür vorgesehen: P82B715, bis 50m.

Alternative 1: Takt erheblich reduzieren und vorsorglich mit 
CRC-Kontrolle arbeiten. Dann kann in elektrisch sauberer Umgebung u.U. 
auch normales I2C funktionieren.

Alternative 2: Kein I2C. An der Position vom Display einen kleinen 
Controller fürs Display plazieren, der per RS485 angesteuert wird.

von Be M. (bemi)


Lesenswert?

Folgendes könnte auch hilfreich sein. Habe auch mal ein Projekt mit 
langen I²C-Bus Leitungen gemacht. Waren aber doch nur einige Meter 
(10m).

1.) Wähle die Pull-Up Widerstände so klein, wie es die Spzifikation der 
Bausteine zulässt.
2.) Wähle die niedriegst mögliche Übertragugnsfrequenz. Wir hatten 
damals glaube ich 7kHz als Busspeed. War das Minimum, dass man aus einem 
4MHz Takt bei einem PIC16F877 herunterteilen konnte.
3.) Verwende Leitungen mit größerem Leitungsabstand (dicke Isolierung), 
damit die Leitungskapazität sinkt. Störungen habe ich damals nicht 
großartig auf den Leitungen gesehen, aber natürlich waren die Flanken 
doch schon recht verschliffen.

Grüße,
Bernd

von Tim (Gast)


Lesenswert?

Du kannst statts der Pullups auch Konstantstromquellen benutzen.
Dadurch werden die Flanken etwas steiler.

Ansonsten wirst du bei 30M nicht um einen Busextender
(82B715/82B96) herumkommen.
Du solltest auf jeden Fall den Bus entsprechend langsam machen,
nicht mehr als einen Master haben und die Übertragung mit einer CRC 
absichern.
Ein parr Dioden zum Schutz könnten auch nicht schaden...

von Compy (Gast)


Lesenswert?

Ahh, nochwas: falls du mit AVR arbeitest, da hatte ich mal bös Prassel 
mit.

Beobachtung: 19"-Rack, sechs Karten mit Slaves plus Controller 
eingesteckt und alle paar Minuten blieb die Kiste hängen, Neustart hat 
geholfen.

Lösung: Der Controller hat gesendet, dabei ging ein Takt flöten, ergo 
kam das Acknowledge auch nicht mehr zur richtigen Zeit an. Der 
Controller hat also gewartet und gewartet und gewartet...

Lösung: Beim AVR mit eingebautem TWI: Wachhund loslassen, Timeouts 
einbauen und alle Fehlerbedingungen vernünftig auswerten!

von Falk B. (falk)


Lesenswert?

@ Tim (Gast)

>Du kannst statts der Pullups auch Konstantstromquellen benutzen.
>Dadurch werden die Flanken etwas steiler.

Bringt wenig.

>Ansonsten wirst du bei 30M nicht um einen Busextender
>(82B715/82B96) herumkommen.

Quark. Ich hab vor einiger Zeit eine kleine Platine in der Hand gehabt, 
die lief über 400m (ja, vierhundert Meter) über ein geschrimtes Kabel 
mit I2C. Mit sagenhaften 500 Hz (kein Witz), was aber weniger an der 
Kabellänge sondern eher an der tierischen EMV-Schutzbeschaltung lag.

>Du solltest auf jeden Fall den Bus entsprechend langsam machen,
>nicht mehr als einen Master haben und die Übertragung mit einer CRC
>absichern.

Was schwierig wird, wenn das LCD das nicht direkt unterstützt. Ausserdem 
ist das meist unkritisch, wenn mal ein paar Zeichen falsch angezeigt 
werden.

MFG
Falk

von ipirk (Gast)


Lesenswert?

Hallo!!
Danke mal für die Antworten!!!
Hab mir gerade das Datenblatt vom P82B715 angesehen, den müsste ich doch 
selbst mit nem OPV (LM358) nen Transistor (BC547) und den Widerständen 
zusammenstoppeln können oder????
MFG

von Simon K. (simon) Benutzerseite


Lesenswert?

Compy wrote:
> Ahh, nochwas: falls du mit AVR arbeitest, da hatte ich mal bös Prassel
> mit.
>
> Beobachtung: 19"-Rack, sechs Karten mit Slaves plus Controller
> eingesteckt und alle paar Minuten blieb die Kiste hängen, Neustart hat
> geholfen.
>
> Lösung: Der Controller hat gesendet, dabei ging ein Takt flöten, ergo
> kam das Acknowledge auch nicht mehr zur richtigen Zeit an. Der
> Controller hat also gewartet und gewartet und gewartet...
>
> Lösung: Beim AVR mit eingebautem TWI: Wachhund loslassen, Timeouts
> einbauen und alle Fehlerbedingungen vernünftig auswerten!

Eigentlich sollte der AVR doch bei jedem Übertragungs-Start neu 
synchronisieren, oder nicht?

von Klaus R. (klara)


Lesenswert?

Hallo,
senke die Tackfrequenz um das zehnfache, und Du erhöhst die Reichweite 
ebenfalls um das Zehnfache. Sonst helfen nur Extender effektiv.
Gruss Klaus.

von Anonymous (Gast)


Lesenswert?

(Read first the application note AN444).


P82B715 I²C bus extender:
http://www.nxp.com/acrobat_download/datasheets/P82B715_6.pdf

Application Note AN444:
Using the P82B715 I2C extender on long cables:
http://www.nxp.com/acrobat_download/applicationnotes/AN444.pdf

One mile long I2C communication using the P82B715:
http://www.nxp.com/acrobat_download/applicationnotes/AN452.pdf

Where to buy in small quantities:
schuricht.de
Art.No: 649003

von Marko H. (vitis01)


Lesenswert?

Man kann aber auch Software TWI machen, dann kommste bis in den 
Herz-Bereich runter mit dem Bus-Speed ... sollte dann auf alle Fälle 
gehen

von Niels H. (monarch35)


Lesenswert?

Marko Hörner wrote:
> Man kann aber auch Software TWI machen, dann kommste bis in den
> Herz-Bereich runter mit dem Bus-Speed ... sollte dann auf alle Fälle
> gehen

Nicht zwangsläufig. Wenn das Kabel zu dünn ist, ist der ohmsche 
Widerstand im Weg.

Der OP hat ausser übertrieben viele Satzzeichen noch nichts darüber 
gesagt, was für eine Verkabelung ihm überhaupt vorschwebt. Unter 
Umständen braucht er ja garkeine Treiber.....

Die Probleme, mit denen zu Rechnen ist, basieren nämlich einzig und 
allein auf Effekte, die je nach verwendeter Verkabelung unterschiedlich 
stark auftreten. Insofern finde ich es quark, gleich mit Treibern zu 
arbeiten.

von HansHans (Gast)


Lesenswert?

Ich hatte mal einen Versuch gemacht,
mit je einem 82B715 I²C bus extender auf jeder Seite.
(1.Seite M32 zweite Seite ein M75 Temperatursensor )

dazwischen : Cat5e Netzwerk Paschkabel

Dann habe ich immer mehr Patchkabel dazu gesteckt
bei 50m+30m+15m+10m+5m hatte ich keine
lagen Patchkabe bzw. Verbinder mehr und musste
den Versuch also bei 110m abbrechen obwohl ich die
Temperatur immer noch richtig vom LM75 auslesen
konnte. Takt war damals 50 Khz.

Gruß HansHans

von Falk B. (falk)


Lesenswert?

@ HansHans (Gast)

>dazwischen : Cat5e Netzwerk Paschkabel

Paschkabel? Dreimal ne Sechs gewürfelt? ;-)

>den Versuch also bei 110m abbrechen obwohl ich die
>Temperatur immer noch richtig vom LM75 auslesen
>konnte. Takt war damals 50 Khz.

Naja, als grobe Peilung OK, aber wirklich gescheite Aussagen liefert nur 
ne Messung mit nem Oszi.

MfG
Falk

von HansHans (Gast)


Lesenswert?

>Naja, als grobe Peilung OK

So war es auch gedacht , bzw. war es halt einfach mal so ein Versuch
ich hätte aber nicht gedacht überhaupt soweit zu kommen .
Hätte auch gerne noch weitere Patchkabel dazu gesteckt aber ich hatte 
keine mehr......

>Messung mit nem Oszi.

Ich habe leider nur ein sehr altes analog Oszi

von Toralf K. (Firma: privat) (anhalter)


Lesenswert?

Eine einfachere Variante - siehe 
http://www.i2cchip.com/constant_current_pullup.html

Die Schaltung ersetzt die PULL-UP Widerstände durch eine Stromquelle!
In der Praxis sollte man diese Schaltung durch Serienwiderstände von 
vielleicht 10 Ohm plus Schutzdiden an jedem Boardseitiegen IIC-Anschluß 
ergänzen. Zusätzlich auch noch PULL-UP Widerstände von 20 bei 50 kOhm an 
jedem Boardseitiegen IIC-Anschluß, damit bei abgezogenen Kabel 
(Kabelbruch) auch noch ein definierter Pegel anliegt.

Ich habe diese Schaltung mit 400kHz ohne Probleme über mehr als 5m im 
Einsatz.

Toralf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.