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
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.
Fixe Adressen für die Slaves vergeben und den Master nach dem Einschalten einfach alle möglichen Adressen durchprobieren lassen, scheidet aus?
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.
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?
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
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!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.