Forum: Mikrocontroller und Digitale Elektronik RS485 an I2C ?


von Mike B. (jehan)


Lesenswert?

Hallo,

ich habe ein I2C-Bus mit einem Mikrocontroller als Master und mehrere 
PCF8574 als Slaves. Nun möchte ich dieses bestehende System 
hardwaremäßig über ein RS485-Bus laufen lassen, wobei ich an einen 
I2C-RS485-Wandler gedacht habe. Habe irgendwo mal gelesen, daß dies 
sogar recht einfach ginge ... irgendwie nach jedem I2C-Baustein ein MAX 
485 hängen und diese bi-direktional zusammenschalten ...
Geht das überhaupt so einfach ?

Gruß Mike
: Gesperrt durch Moderator
von Frank B. (frankman)


Lesenswert?

Mike B. wrote:
> Hallo,
>
> ich habe ein I2C-Bus mit einem Mikrocontroller als Master und mehrere
> PCF8574 als Slaves. Nun möchte ich dieses bestehende System
> hardwaremäßig über ein RS485-Bus laufen lassen, wobei ich an einen
> I2C-RS485-Wandler gedacht habe. Habe irgendwo mal gelesen, daß dies
> sogar recht einfach ginge ... irgendwie nach jedem I2C-Baustein ein MAX
> 485 hängen und diese bi-direktional zusammenschalten ...
> Geht das überhaupt so einfach ?
>
> Gruß Mike

Nein, so einfach geht das nicht, RS485 und I2C sind vom Aufbau her 
unterschiedlich:

I2C hat eine Daten und eine Clock-Leitung.
RS485 ist bidirektional und differenziell.

d.H. bei I2C wird ein bit so übertragen das zuerst die Data-Leitung 
einen Pegel annimmt, dann wird auf die Clock-Leitung auf Null gezogen, 
und der Empfänger übernimmt den Zustand der Data- Leitung.

Bei RS485 wird ein Bit so übertragen, das die Leitung dabei kurz oder 
lang ein oder ausgeschaltet ist . Differenziell bedeutet hier, das es 
nicht explizit eine Masse oder GND gibt, sondern das für die 
Datenleitung eine zweite Leitung existiert. Soll zwischen Null und Eins 
umgeschaltet werden, so werden die beiden Leitungen umgepolt.
Also ist immer eine Leitung Eins und die Andere Null oder umgekehrt. Das 
kann man nicht so einfach zusammen mixen....
von Mike B. (jehan)


Lesenswert?

Hallo Frank,

ja, das ist im Prinzip schon richtig.

Ich habe es so ähnlich noch in Erinnerung :

- Pull-up-Widerstände an SCL und SDA belassen.
- Danach an SCL und SDA die RS485-Treiber mit ihren 
Abschluß-Widerständen  dran hängen.
- Beim SCL ersten Treiber des MAX485 beim Master die Datenrichtung auf 
"Senden" und beim Slave auf "Empfang" legen.
- Beim SDA zweiten Treiber des MAX485 beim Master sowohl Slave jeweils 
auf "Empfang" und "Senden" legen und beide Datenleitungen bidirektional 
zusammen zu einer Leitung legen.
- Protokoll ist der RS485 eigentlich egal.

So ähnlich habs ich damals gelesen ...

Vielleicht gehts so oder ähnlich oder ist das totaler Unsinn ?

Gruß0 Mike
von Frank B. (frankman)


Lesenswert?

Mike B. wrote:
> Hallo Frank,
>
> ja, das ist im Prinzip schon richtig.
>
> Ich habe es so ähnlich noch in Erinnerung :
>
> - Pull-up-Widerstände an SCL und SDA belassen.
> - Danach an SCL und SDA die RS485-Treiber mit ihren
> Abschluß-Widerständen  dran hängen.
> - Beim SCL ersten Treiber des MAX485 beim Master die Datenrichtung auf
> "Senden" und beim Slave auf "Empfang" legen.
> - Beim SDA zweiten Treiber des MAX485 beim Master sowohl Slave jeweils
> auf "Empfang" und "Senden" legen und beide Datenleitungen bidirektional
> zusammen zu einer Leitung legen.
> - Protokoll ist der RS485 eigentlich egal.
>
> So ähnlich habs ich damals gelesen ...
>
> Vielleicht gehts so oder ähnlich oder ist das totaler Unsinn ?
>
> Gruß0 Mike

Könnte gehen, bringt aber nix:
1. Du benötigst 2 Leitungen für die SCL Leitung ( RS485 A und B)
2. Du benötigst 2 Leitungen für die SDA Leitung ( RS485 A und B)
3. Du benötigst 1 Leitung um Sender und / oder Empfänger von Senden auf 
Empfangen umzuschalten...
4. und wie möchtest Du diese Umschaltung realisieren?


Wenn Du unbedingt die Reichweite von I2C verlängern möchtest, dann gibt 
es dafür extra IC´s (Analog Devices, wenn ich mich nicht irre oder 
Linear Technology)


Wenn Du unbedingt RS485 nehmen möchtest, dann würde ich einen yC 
dazwischen setzen, der das Protokoll umsetzt. ( RS485 ist das gleiche, 
wie RS 232, also LT485 oder MAX485 an die RXD und TXD-Leitung des 
Prozessors anschließen und dann mit zwei Portpins oder integrierter 
I2C-Funktion "übersetzen"

Aber beides Mixen wollen wird nix....leider...
von STK500-Besitzer (Gast)


Lesenswert?

>- Beim SDA zweiten Treiber des MAX485 beim Master sowohl Slave jeweils
>auf "Empfang" und "Senden" legen und beide Datenleitungen bidirektional
>zusammen zu einer Leitung legen.
Der MAX-Baustein braucht eine Steuerleitung für die Richtung.
So einfach ist das also nicht.
Dazu wäre ein CAN-Transceiver wie PCA82C250 (oder so ähnlich) wesentlich 
besser geeignet, da damit auf der RS485-Seite keine Kurzschlüsse möglich 
sind.
Auf der TTL-Seite sollte man die Sende- und die Empfangsleitung noch 
durch einen Open-Kollektor-Baustein in der Empfangsleitung entkoppeln - 
auch eine Kurzschlußquelle.

>- Protokoll ist der RS485 eigentlich egal.
Das stimmt.
von Stephan S. (uxdx)


Lesenswert?

nimm doch eine I2C Range Extender, z.B. PCA9615 
https://www.nxp.com/docs/en/data-sheet/PCA9615.pdf
von Wastl (hartundweichware)


Lesenswert?

Stephan S. schrieb:
> nimm doch eine I2C Range Extender, z.B. PCA9615

Heisser Tip ..... nach kaum 18 Jahren.
von Stephan S. (uxdx)


Lesenswert?

Wastl schrieb:
> Stephan S. schrieb:
>> nimm doch eine I2C Range Extender, z.B. PCA9615
>
> Heisser Tip ..... nach kaum 18 Jahren.

Uppps ... :-(
"Mit Brille wäre das nicht passiert" ;-)
: Bearbeitet durch User
von Nick (b620ys)


Lesenswert?

Warum willst du denn am I2C festhalten? Suchst du eine RS485-I2C-Bridge? 
Das ist aber letztendlich sinnlos, weil du die bridge dann an jedem 
Knoten brauchst.
Sowas z.B.: PI7C9X1170


Also gleich RS485 ohne Umweg über I2C.

Ah, sorry, habs übersehen, dass das ein alter thread ist. :-(
: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Stephan S. schrieb:

Hallo Stephan S.,

kannst du einmal ehrlich erklären wie man auf einen 18 Jahre alten 
Thread überhaupt antworten kann? Suchst du alte Beiträge um eine Antwort 
zu geben? Das ist doch überhaupt nicht nachvollziehbar wie man einen 
uralten Thread ausbuddelt um eine Antwort zu schreiben. Wie geht das? 
Was machst du? Dafür fehlt jede Logik. Was ist das für eine Schwachsinn?

> Uppps ... :-(
> "Mit Brille wäre das nicht passiert" ;-)

Das kann keine Ausrede sein. Der Thread ist ja nicht in den Top Ten. Du 
musst ja danach gesucht haben um dann antworten zu wollen. Du hast ja 
keine Frage gestellt, du hast eine Antwort gegeben. Das macht alles 
keinen Sinn.
: Bearbeitet durch User
von Klaus (feelfree)


Lesenswert?

Veit D. schrieb:
> . Du musst ja danach gesucht

Man muss aber nicht explizit einen alten Thread suchen, sondern einfach 
nach einem Thema, an dem man gerade selbst arbeitet oder Fragen hat. Und 
da guckt man halt nicht immer aufs Datum.

Ich sehe keinen Grund, da irgendeine Absicht zu unterstellen.
von Roland F. (rhf)


Lesenswert?

Veit D. schrieb:
> Das macht alles keinen Sinn.

Reg dich ab, es muss nicht immer alles einen Sinn ergeben.

rhf
von H. H. (hhinz)


Lesenswert?

Roland F. schrieb:
> Veit D. schrieb:
>> Das macht alles keinen Sinn.
>
> Reg dich ab, es muss nicht immer alles einen Sinn ergeben.

Den 7. gibts schon mehr als 20 Jahre nicht mehr.
von Veit D. (devil-elec)


Lesenswert?

Klaus schrieb:

> Ich sehe keinen Grund, da irgendeine Absicht zu unterstellen.

Na wenn du meinst.
von Carsten-Peter C. (carsten-p)


Lesenswert?

Moin,
ich habe mal überlegt einen MAX491 hinter einen I2C Buffer P82B96 zu 
schalten, um die Reichweite zu erhöhen. Hab ich aber doch nicht 
getestet.
Gruß
 Carsten
von Stephan S. (uxdx)


Lesenswert?

Veit D. schrieb:
> Stephan S. schrieb:
>
> Hallo Stephan S.,
>
> kannst du einmal ehrlich erklären wie man auf einen 18 Jahre alten
> Thread überhaupt antworten kann? Suchst du alte Beiträge um eine Antwort
> zu geben? Das ist doch überhaupt nicht nachvollziehbar wie man einen
> uralten Thread ausbuddelt um eine Antwort zu schreiben. Wie geht das?
> Was machst du? Dafür fehlt jede Logik. Was ist das für eine Schwachsinn?
>
>> Uppps ... :-(
>> "Mit Brille wäre das nicht passiert" ;-)
>
> Das kann keine Ausrede sein. Der Thread ist ja nicht in den Top Ten. Du
> musst ja danach gesucht haben um dann antworten zu wollen. Du hast ja
> keine Frage gestellt, du hast eine Antwort gegeben. Das macht alles
> keinen Sinn.

zu Erklärung: ich hatte 2 Fenster offen, das andere war 
Beitrag "Gibt es Sensoren für Luftfeuchtigkeit über 1-Wire?"

und da ist meine Antwort halt ins falsche Fenster gerutscht. Reicht das 
als Erklärung?
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.