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
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
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.
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?
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.
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...
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.
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
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...
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!
@ 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
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
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?
Hallo,
senke die Tackfrequenz um das zehnfache, und Du erhöhst die Reichweite
ebenfalls um das Zehnfache. Sonst helfen nur Extender effektiv.
Gruss Klaus.
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.
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
@ 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
>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
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