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?
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
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.
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
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
@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
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.
@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
@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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.