Forum: Mikrocontroller und Digitale Elektronik langsame Übertragung, ungeschirmtes Kabel -> welchen Bus nehmen


von data (Gast)


Lesenswert?

Ich habe mehrere Module (max 10 Stk.) welche ca. 0,5m voneinander 
entfernt sind. Sie sollen nun miteinander eine langsame Kommunikation im 
Multimaster-Betrieb bekommen. Sie sind teilweise Sternförmig, teilweise 
in Reihe verbunden. Die Anzahl der gleichzeitig aktiven Module kann von 
1 bis 10 variieren. Die Datenübertragung erfolgt über NICHTgeschirmtes 
Kabel.

Wichtig wäre mir, dass der Bus nicht mehr als 2 Datenleitungen benötigt 
und geringen Aufbauaufwand erfordert. Zeitgesteuerte Datenübertragung 
wie CAN, RS232 oder 1wire möchte ich gerne meiden.

Dazu hätte ich nun 2 Fragen.

1. Mir erscheint hierfür das I2C am sinnvollsten. Wie verhält es sich 
das dann aber mit den nötigen pull-ups? Da jedes Modul unabhängig 
voneinander Master sein soll, bräuchte jedes einnen pull-up. Würde das 
bei max. 10 parallelen pull-ups Probleme für (z.B.) einen AVR geben, 
wenn er die Leitung ziehen muss?

2. Würde jemand einen anderen Bus verwenden?

von Dennis X. (Gast)


Lesenswert?

Lass die Sache mit I²C am besten gleich sein. Es gibt zwar einen I²C 
Multi Master Modus, aber das ist wirklich nichts richtig tolles.
Für deine Verwendung sollte sicher auch ein einfacher RS485 Bus reichen. 
Protokoll kannst du dir ein eigenes Ausdenken oder du benutzt etwas wie 
Modbus etc..
Für die Realisierung von Multi-Master könnte ein Token-Passing Verfahren 
vielleicht ganz gut passen.

Grüße
Dennis

von H.Joachim S. (crazyhorse)


Lesenswert?

Genau für solche Fälle gibt es Sachen wie CAN.
Mit "zeitgesteuert" meinst du wohl sowas wie eine vereinbarte Bitrate? 
Ok, das ist eine Einschränkung. Aber damit kann man prima leben. Die 
wirklich freilaufenden (im Sinne von ziemlich undefinierter 
Taktfrequenz) MC-Systeme sind doch wirklich nicht das Argument bei 
Bus-Systemen. Ein Quarz/Resonator kostet nur wenige Cent. Im Gegenzug 
kannst du dir massiv Gedanken machen, wie du ein Multimaster-System 
wirklich perfekt (CAN ist nahe dran an "perfekt") ans Laufen bringst.
Entweder machst du da Abstriche oder an der Gesamtperformance (beliebig 
langsam kann man sich was gutes Ausknobeln). Es gibt nicht umsonst 
Sachen, die sich durchgesetzt haben. Das Rad immer wieder neu erfinden 
war/ist auch keine gute Strategie.
Soll jetzt nicht heissen, dass da kein Platz für Neues wäre. Aber wenn 
du so fragst, wie du fragst, bist du eher auf der Suche nach einer 
Sache, die es so nicht geben kann.

von Gerd E. (robberknight)


Lesenswert?

Dennis X. schrieb:
> Für deine Verwendung sollte sicher auch ein einfacher RS485 Bus reichen.

ja, das würde ich auch sagen.

> Protokoll kannst du dir ein eigenes Ausdenken oder du benutzt etwas wie
> Modbus etc..
> Für die Realisierung von Multi-Master könnte ein Token-Passing Verfahren
> vielleicht ganz gut passen.

andere Idee wenn auf dem Bus nicht so viel los ist:

du verwendest bei allen Teilnehmern Fault-protected Treiber (z.B. 
SN65HVD1781). Denen macht ein Kurzschluss nichts aus. Jetzt können die 
Teilnehmer lauschen was auf der Leitung los ist. Wenn nichts los ist und 
sie senden wollen fangen sie einfach an. Wenn ein anderer Teilnehmer im 
selben Moment anfängt zu senden gibts den Kurzschluss, den halten die 
Treiber aber aus.

Natürlich muss das Protokoll vom Empfänger eine Empfangsbestätigung 
fordern damit Du erkennen kannst daß was nicht sauber angekommen ist. Du 
sparst Dir so aber alle Mechanismen mit Token, festen Zeitschlitzen etc. 
Das macht das ganze wesentlich einfacher.

Du kannst so auch einfach IP-Pakete auf die Leitung geben. Musst halt 
eine Escape-Sequenz definieren. Aber das hat den Vorteil daß es für IP 
schon jede Menge fertige Stacks, Hilfsprogramme etc. gibt und Du kannst 
es von einem sehr einfachen Gateway aus auch sofort übers Internet 
weiter routen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Gerd E. schrieb:
> Dennis X. schrieb:
>> Für deine Verwendung sollte sicher auch ein einfacher RS485 Bus reichen.
>
> ja, das würde ich auch sagen.

Ich habe bis jetzt noch keinen einfachen und funktionierenden 
RS485-Multimaster-Bus gesehen.
Versuche gabs viele. Und es gibt auch unter Extrembedingungen 
funktionierende (im Sinne von Kollisionen erkennende und sich wieder 
fangende) Lösungen. Einfach sind die nicht gerade...
Genial einfach/einfach genial sind RS485-Lösungen für single-master. Da 
kommt auch nichts anderes so schnell ran. Billig, schnell, universell. 
Multimaster ist anstrengend.

von Helge A. (besupreme)


Lesenswert?

Eine witzige Idee gabs dazu im englischen Picaxe-Forum. Da hatte einer 
ungefähr 50m dreiadriges Kabel im Haus veteilt und hat darüber so 12-15 
uC's versorgt und mit 2400 baud kommunizieren lassen. TxD -> open 
collector mit hochohmigem pullup auf jedem Board an die Datenleitung. 
Diese über Schmitt-Trigger an RxD zurückgeführt. Kollision wird erkannt, 
wenn was anderes als das gesendete Byte zurückkommt.

von Wolfgang (Gast)


Lesenswert?

data schrieb:
> Wichtig wäre mir, dass der Bus nicht mehr als 2 Datenleitungen benötigt
> und geringen Aufbauaufwand erfordert. Zeitgesteuerte Datenübertragung
> wie CAN, RS232 oder 1wire möchte ich gerne meiden.

Viele Funkdatenprotokolle mit Taktrückgewinnung und Kollisionserkennung 
(CSMA/CD) sind dafür geeignet und kommen sogar mit einer "Leitung" aus, 
wenn man die Bezugsmasse mal nicht mitzählt.
https://de.wikipedia.org/wiki/Carrier_Sense_Multiple_Access/Collision_Detection

von Gerd E. (robberknight)


Lesenswert?

H.Joachim Seifert schrieb:
> Ich habe bis jetzt noch keinen einfachen und funktionierenden
> RS485-Multimaster-Bus gesehen.
> Versuche gabs viele. Und es gibt auch unter Extrembedingungen
> funktionierende (im Sinne von Kollisionen erkennende und sich wieder
> fangende) Lösungen. Einfach sind die nicht gerade...

Meine Lösung für genau dieses Problem habe ich oben vorgestellt. Die 
eigentlichen Daten werden per TCP übertragen und wenn es zu einer 
Kollision kam gibt es vom TCP aus einen Retransmit.

Bei dieser Lösung hast Du natürlich keine Priorisierung zwischen den 
Hosts oder Nachrichtentypen wie bei CAN. Und wenn alle auf einmal senden 
wollen gibt es eine Verstopfung des Bus, dem kann man dann z.B. mit 
exponential Backoff mit etwas Beigabe von Zufallszeit beim Senden Herr 
werden.

Ein paar Sensoren und Aktoren ohne großartige Latenzgarantien kann man 
auf diese Weise sehr elegant und einfach verbinden, da die ganzen 
Bausteine der Lösung weit verbreitet, gut verfügbar und leicht zu 
handhaben sind.

Die Idee stammt übrigens nicht von mir, sondern von hier:
http://www.ethersex.de/index.php/ZBus_(Deutsch)
http://old.ethersex.de/index.php/ZBus_Protocol

von Alexander S. (esko) Benutzerseite


Lesenswert?

Helge A. schrieb:
> Eine witzige Idee gabs dazu im englischen Picaxe-Forum. Da hatte einer
> ungefähr 50m dreiadriges Kabel im Haus veteilt und hat darüber so 12-15
> uC's versorgt und mit 2400 baud kommunizieren lassen.

Gerd E. schrieb:
> http://www.ethersex.de/index.php/ZBus_(Deutsch%29

Eine ähnliche Lösung gibt es hier, mit nur zwei Adern, wobei der Pull-Up 
auf der Datenleitung recht niederohmig ist und mit 150mA die µCs 
versorgt:

http://romanblack.com/blacknet/blacknet.htm

: Bearbeitet durch User
von data (Gast)


Lesenswert?

Gerd E. schrieb:
> Dennis X. schrieb:
>> Für deine Verwendung sollte sicher auch ein einfacher RS485 Bus reichen.
>
> ja, das würde ich auch sagen.

Allerdings wird im Artikel RS-485 extra darauf hingewiesen, dass 
Stern nicht gut ist. Trotzdem noch ok?

von data (Gast)


Lesenswert?

Auszug:
"Der Leitungsaufbau erfolgt immer als eine Linie und niemals als Stern 
mit etwaigen Stichleitungen."

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Es geht dabei um Reflexionen und die sind von der 
Signalanstiegsgeschwindigkeit und Laufzeit auf dem Medium abhängig. So 
generell ist Aussage RS485 nur als ein Strang, falsch!

Bei deiner Topologie sollte das funzen. Die anderen übrigens auch, also 
i2c, CAN, usw.

Darfst halt nicht zu schnell takten. Bei 0,5m gehen locker 100kbit/sec.

von asdf (Gast)


Lesenswert?

Ich kann nur CAN empfehlen. Ich habe selten so eine ausgereifte 
Technologie gesehen. Noch dazu der Preis/Knoten.

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.