Forum: Mikrocontroller und Digitale Elektronik 3 Controller mit 2 Leitungen verbinden


von Peter (Gast)


Lesenswert?

Hi,

ich hab mal eine ganz banale Frage: Der I2C-Bus braucht ja zwei
Leitungen, Takt und Daten. Ich muss aber die GND-Potentiale der Geräte
auch verbinden, oder?

Konkret: Ich möchte drei Mikrocontroller verbinden, ideal wäre es, wenn
es über 2-adrigen Klingeldraht gehen würde. Die Entfernung ist mehrere
Meter (maximal 10m), beide Controller laufen mit Batterie, die
Übertragungsgeschwindigkeit ist nicht kritisch (hundert Byte pro
Sekunde würden schon reichen, mehr wäre aber auch nicht verkehrt).
Ich meine, dass ich für I2C drei Adern benötige wegen GND, bin mir aber
nicht sicher. Das ist meine erste Frage.

Meine zweite Frage: Falls ich für I2C wirklich drei Leitungen brauche,
was für Alternativen gibt es, die mit nur zwei Leitungen als Verbindung
auskommen? Oder ist es mit Hinblick auf die Entfernung von mehreren
Metern und den Programmieraufwand (I2C ist bei einem ATmega nicht so
das Problem) doch einfacher, ein 3-adriges Kabel zu nehmen?

von Arne (Gast)


Lesenswert?

I2C benötigt, wie eigentlich schon erkannt, 3 Adern. Schließlich braucht
die zweite Applikation einen Bezug, gegen das ein HIGH oder LOW erkannt
werden kann.
Sofern die einzelnen Applikationen auf I2C vorbereitet sind, wäre wohl
eine 3adrige Leitung (bzw. 2 + Abschirmung) die einfachste Wahl, doch
bedenke, daß immer nur einer der Master sein kann.

Eine Alternative wäre da noch RS-485. Ein Bussystem, daß eben mit 2
Adern auskommt und vergleichbar wie RS-232 arbeitet. Es muß dabei nicht
zwangsweise ein Master existieren, jedoch ein Protokoll, das Kollisionen
erkennt oder vermeidet. Auf diesem Bus können im Einfachsten Fall bis zu
32 Applikationen miteinander vernetzt werden... .

Gruß,
Arne

von Michael (Gast)


Lesenswert?

Daß mit RS485 löst das Problem so auch nicht; es wird noch eine
gemeinsame Masse benötigt.
Alternative: Verbindung über UART im Halbduplex; TX-Ausgänge mit OC.
Oder Übertragung mit Tonfrequenzen.

von Azrael (Gast)


Lesenswert?

Ganz generell gibts noch den 1-wire Bus von Dallas/Maxim.
Wie weit das ganze funktioniert weiß ich nich, aber die 10m sollten
drinnen sein, ob das der Bus Multimaster fähig ist weiß ich auch nicht,
aber wenn die application nicht all zu viel strom verbraucht kannst du
die geräte auch über den 1-wire bus mit strom versorgen.

Es gibt auch I2C zu 1-wire wandler,

Natürlich ist der Bus relativ langsam(20kbps oder so)

mfg Azrael

von MatthiasF (Gast)


Lesenswert?

Hallo.
Du könntest es vielleicht so machen wie das bie digitalen
Modelleisenbahnen gemacht wird. Eine Leitung is GND und auf die andere
gibst du ein Manchester Code......Du kanst dir den Code dann auf deine
Applikation anpassen. zb. eine Preamble zum erkennen eines Signales. 2
Bit adresse für 4 geräte, ein paar Ack.-Bits. Datenbits und ein
Prüfbit.....

http://www.lokodex.de/mo/m_digital_dccprot01.htm

Gruß matthias

von Arne (Gast)


Lesenswert?

@Michael
Seit wann braucht eine symetrische Übertragung eine gemeinsame Masse?
Als Abschirmung könnte ich ja noch verstehen, aber sofern sich nicht
unterschiedliche Potenziale bilden, die sich dennoch entkoppeln ließen,
reichen für RS-485 2 Adern.

Gruß,
Arne

von Peter (Gast)


Lesenswert?

Vielen Dank für die Antworten.

RS-485 sieht gut aus, vielleicht probier ich aber auch Matthias
Vorschlag.
Es ist für meine Anwendung relativ egal, ob der Bus nur einen Master
hat. Softwaretechnisch ist es mit einem Master aber vermutlich
einfacher, weil ich keine Kollisionserkennung brauche.

von Michael (Gast)


Lesenswert?

@Arne
Wie willst Du denn verhindern, daß sich nicht unterschiedliche
Potentiale bilden ?
Alle Diff-Empfänger haben einen Gleichtakteingangsbereich (common mode
voltage), der einzuhalten ist.

Gruß  Michael

von Arne (Gast)


Lesenswert?

@Michael
die einfachste Lösung wären zwei kleine Kondis oder ein Überträger mit
zwei Wicklungen, was die Sache dann vielleicht doch nicht einfacher
macht, zumal das Signal in einem FlipFlop zwischgespeicher werden
müste. Die Terminierung gegen VCC und GND wie es bei RS485 empfohlen
wird, dürfte tatsächlich nicht reichen und mein Gebastel, von dem ich
ausgegangen war hat bei genauerer Betrachtung leider eine gemeinsame
Masse - sorry.

@all
Aber einen hab ich noch ;)
TxD über Widerstand (ggf. Treiber aus Transistor/en) mit RxD
zusammenlegen und diesen zusammen mit Masse als seriellen Bus benutzen!
Einfach aber ggf. ausreichend. :D

Gruß,
Arne

von Michael (Gast)


Lesenswert?

@Arne:
Das Zusammenlegen von RX und TX Signalen, wie Du es vorschlägst, hatte
ich mit meiner 'Alternative' weiter oben gemeint. Das Thema der ser.
Kopplung von µCs ist schon öfter (über)besprochen worden, sodaß ich
dachte, ein kurzer Tipp reicht.

Gruß  Michael

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.