www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dynamisches Netz aus AVR


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Zietz (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Wiesi (Gast)
Datum:

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

Autor: Wiesi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.