www.mikrocontroller.net

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


Autor: ipirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: nemon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit busextendern sollte das gehen

Autor: ipirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Compy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Standart" isses zwar net, aber idiotensicher: SN75176BP 
(RS485-Bustransceiver)

Frohe Weihnachten

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Compy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Compy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Be Mi (bemi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Compy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ipirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Ra. (klara)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/applicationnot...

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

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

Autor: Marko Hörner (vitis01)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Toralf Klee (Firma: privat) (anhalter)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.