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

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.

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.