Forum: Mikrocontroller und Digitale Elektronik Dynamisches Netz aus AVR


von Thomas (Gast)


Lesenswert?

Hallo

Ich möchte mehrere AVR vernetzen. Als Bussystem habe ich an RS485
gedacht, da ich einige 100m überbrücken muss/soll. Die Geschwindigkeit
spielt keine Rolle, es werden alle paar Sekunden einige Byte vom
"Master-AVR" zu den "Slave-AVR" und zurück gesendet.

Die Slaves können sich ändern, d.h. Ich schliesse z.B. 10 Slaves und 1
Master an den Bus und schalte dann ein. Die Slave müssen sich dann beim
Master anmelden. Im späteren Verlauf werden die Slave dann erst vom
Master angesprochen.

Nun das Problem: Wie realisiert man diese Anmeldung? Es dürfen sich ja
nicht alle auf einmal melden, sondern einer nach dem andern, damit
keine Konflikte entstehen. Wie würdet ihr das prinzipiell realisieren?

Gruss Thomas

von Thomas O. (Gast)


Lesenswert?

Hallo,

ich würde das so machen das der Master alles initialisieren muss.
Er sendet z.b alle paar Sekunden eine Abfrage z.b. Gerät1?, Gerät2?...
Wenn sich also Gerät2 nicht meldet dann weiß der Master es existiert
nicht. Oder musst du mittels Slaves Ereignisse überwachen und die Slave
melden sich dann gleich beim Master?

Ein anderer Vorschlag man hat eine Leitung, die ein Slave sobald er was
sendet auf High oder Low legt und jeder Slave schaut sich die Leitung
bevor er was sendet an. Also praktisch wie eine Belegtmeldung und die
Slave prüfen dann im Polling die Leitung sobald sie frei ist ziehen sie
sie auf Masse udn nehmen Kontakt auf. Also Interrupt Steuerung wäre hier
nicht so gut weil sonst alle gleichzeitig probieren.

von Christian Zietz (Gast)


Lesenswert?

Fixe Adressen für die Slaves vergeben und den Master nach dem
Einschalten einfach alle möglichen Adressen durchprobieren lassen,
scheidet aus?

von A.K. (Gast)


Lesenswert?

RS485 setzt typischerweise voraus, dass der Master die vollständige
Kenntnis des Netzes hat, und zwar von Anfang an.

Wenn jedoch Polling aller potentiellen Slaves ausscheidet, handelt es
sich topologisch nicht mehr um reines Master/Slave-Netz, sondern geht
in Richtung Peer-to-Peer. Also CAN-Bus. Kann man zwar mit RS485 auch
machen, lohnt aber wohl nicht.

von Thomas (Gast)


Lesenswert?

Thomas O.
Das anschliessende senden der Daten stellt kein Problem dar, sondern
die Initialisierung. Eine weitere Leitung braucht es meines erachtens
nicht.

Christian Zietz:
Ne, keine fixen Adressen. Die Slaves werden mit einem DS2401
ausgestattet und habe somit schon eine eigene Nummer. Diese kann ich
aber aus praktischen Gründen nicht im vorraus beim Master einstellen.

A.K.:
Naja, Master-Slave ist hier weniger auf den Bus, sondern auf die
Funktion der Geräte bezogen. CAN-Bus habe ich schon gehört, aber nie
genauer angeschaut. Wie wird das Problem mit der Initialisierung in
einem Peer-to-Peer Netz gelöst?
Kennst du da einen guten Link oder ein gutes PDF?

von Wiesi (Gast)


Lesenswert?

Das heißt, du willst auf den Slaves keinesfalls was einstellen müssen?

von Wiesi (Gast)


Lesenswert?

Also ich denke folgendes müsste gehen:

Nach dem Einschalten warten alle Slaves eine zufällige Zeit
(um die Anfangskollisionen zu minimieren) und senden dann
ihre Kennung mit einer Checksum (CRC oder so) dran.

Im Idealfall hat der Master danach alle Identifikationen.

Kommt es zu dabei zu einer Kollision, so kann das an der fehler-
haften Checksum erkannt werden. Darauf warten die Clients
welche die Collision festgestellt haben wieder eine zufällige
Zeit und probieerns nochmal.

Kurz: Ich würds a´la CSMA/CD wie bei Ethernet machen.


(Hab aber keine Ahnung, wie das mit Kollisionen bei RS485 genau
ist.)

    Wiesi

von Thomas (Gast)


Lesenswert?

Wiesi:
Ich will keine Adresse vergeben oder irgendwelche DIP-Schalter
verstellen. Jedes Gerät hat eine ID, die mit dem DS2401 vergeben wird.
Anhand dieser Nummer soll das Gerät identifiziert werden.

Ich habe CAN kurz angeschaut, ich denke das könnte es sein. Dein
Vorschlag mit CSMA/CD werde ich noch anschauen.

Danke!

von A.K. (Gast)


Lesenswert?

CAN hat den Vorteil, das der CAN-Controller das komplette
Message-Processing abnimmt. Von Arbitration (der Streit darum, wer grad
senden darf), der Überprüfung empfangener Daten (CRC) bis zur
Empfangsbestätigung. Und das ganze via SPI in einem 18pin-Gehäuse für 2
Euro (MCP2515).

Mit RS485 kann man auch Peer-to-Peer realisieren - aber es wird einige
Arbeit draus, weil man all den oben erwähnten Kram selber programmieren
muss.

Daher die Regel: RS485 ist nur dann sinnvoll, wenn alle Kommunikation
ausschliesslich vom Master initiiert wird. Lies: Polling. Wenn es
möglich sein soll, dass ein anderes Device sich unaufgefordert
einmischt, ist CAN sinnvoller.

von Thomas (Gast)


Lesenswert?

Toll, der MCP2515 übernimmt das komplette Protokol? D.h. ich muss nur
noch meine Daten an diesen senden und der macht den Rest?

Dann ist der Fall klar, es wird ein CAN-Bus. :-)

Danke!

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.