Hallo zusammen Ich suche nach einem Prinzip für eine automatische Adressvergabe beim RS485 nach dem daisy-chain Prinzip. D.h. der Master ist im Grundzustand nur mit dem ersten Slave verbunden. Nachdem der erste Slave seine Adresse bekommen hat schaltet er den Bus durch auf den nächsten Slave, der dann vom Master seine Adresse bekommt usw. Die Adressvergabe ist nur einmalig nach dem Einschalten der Versorgungsspannung nötig und die Versorgung bekommen alle Slaves über den Master. Als erste Lösung könnte ich ein Relais auf jedem Slave einsetzen das den RS485-Bus weiterschaltet, wobei ein Relais recht viel Strom brauch und für meine Applikation wahrscheinlich zu teuer wird. Oder kann ich die RS485-Busleitungen auch über Transistoren trennen/verbinden - und wie? Mir würde eine Übertragungsrate von 9600 Baud reichen, allerding brauche ich Kabellängen von bis zu 500m vom Master bis zum letzten Slave. Vielleicht weiss auch jemand wie ich einen schaltbaren Abschlusswiderstand realisiere (für den letzten Slave!) Vielleicht hat jemand schon was ähnliches gemacht der mir ein bischen Hilfestellung geben kann. hoffe auf viele antworten gruß tom
ich würde gar nicht den Bus als solches schalten, sondern eine weitere Leitung nehmen, die du von slave zu slave weiterschaltest. Dann müssen natürlich die slaves auch zu erst was senden, damit der Master merkt das der nächste slave bereit ist eine adresse zu beziehen.
Hallo leute ich stecke auch in dem selbem Problematik wie der TOM. Die Idee eine weitere Leitung hineinzuführen finde ich für meine Anwendung nicht effizient , da es um ein Plug and play system ist. d.h. Teilnehmer sind von einander unabhängig und können raus und wieder rein auf dem Bus. Bestimmt hat jemand sowas softwareseitig schon realisiert. Darum bitt ich um Inputs. danke Burny
wie wäre es mit ner ALOHA implementation für die addressvergabe? http://de.wikipedia.org/wiki/ALOHA danach kann man ja was andres machen.
innerhlab der letzten tage wurde schon x mal dieses thema behandelt warum schreibt keiner selbst sowas? innherhalb 3 tage bekommt man sowas problemlos hin wie es funktioniert ? wurde besprochen ... entweder 255 adressen durchpollen oder stochastisch auf den bus brüllen ob neue teilnehmer da sind
Wie wäre es wenn ihr es mit den Adressvergabe macht wie bei USB. Nach dem Einschalten hat automatisch der Slave die Adresse 0. Der Master sucht immer auf dem Bus nach der Adresse 0 wenn er eine findet ver gibt er dem Slave eine neu Adresse. Der Slave schaltet den RS485-Buss erst durch wenn er eine andre Adresse als 0 hat. Gruß Marco
Hallo, Ich habe mir für mein Heim mal selbst ein Bussystem für Licht und Heizung gebastelt. Da hatte ich die gleiche Idee das jeder Slave der jungfräulich war eine neue Adresse vom Master bekommt. Sobald die ADR vom Slave >0 war schaltete der Slave den Bus weiter zum nächsten. Wobei das viel zu teuer war und später das administrieren auch blöd da man nie wusste wo jetzt welche ADR wo ist. Ich habe es jetzt so gelöst: Nach dem programmieren das AVR (Atmega8) wir die Platine einem Test unterzogen beim Testen bekommt der Slave dann eine SerNr. . (von einer Datenbank am Computer wo DUT angeschlossen ist). Beim Busprogrammieren scant der Master die SerNr durch und vergibt dann eine ADR. Anhand der SerNr. wusste der Master welche Funktionen der Slave kann. (Lichtschalter, Temp.fühler oder ähnliche..) Die Busgeschwindigkeit von 9600 für Lichtschalter ist ausreichend. kommt immer auf die Anwendung an....
Allenfalls kann man das so machen wie hier beschrieben http://www.ibrtses.com/embedded/dynamicid.html
RS485 ist ein echter Bus, warum diesen auf Punkt-zu-Punkt kastrieren? Grundsätzlich hast Du zwei Möglichekeiten: Erstens, die Teilnehmer bekommen vorab eine eindeutige Id (z.B. beim Flashen ins EEPROM) - so mache ich das meist bei kleineren bzw. abgeschlossenen Systemen. Oder zweitens sie handeln sich eine Id beim Anschluss am Bus aus. Dazu wurden hier bereits mehrere Verfahren genannt. Kollisionen kannst Du vermeiden, indem der Master die einzelnen IDs der Reihe nach pollt. Das ist übrigens die übliche Lösung in großen RS485-Systemen im Industriebereich. Falls Du dagegen eher eventorientiert Daten übertragen möchtest, wäre eine CMSA/CD-Verfahren sicher effizienter.
das wurde schon xmal vorgeschlagen jedesmal kamen zusatzdrähte als vorschlag oder es wurde nicht mehr reagiert... hier is anscheinend jemand zu faul sich busroutinen einfallen zu lassen bzw sie selbst zu schreiben wenn man DAS schon nicht hinbekommt ist es unwarscheinlich das dieser auch nur jemals ne glühbirne zum leuchten bekommt mit dem teil Rs485 is nen simpler bus ... ALLE geräte lauschen und sind IMMER auf empfang sobald diese am bus hängen d.h. JEDER teilnehmer bekommt das protokoll zu sehen was versendet wird das wird einem zum verhängnis , kann aber auch total toll sein wenn man nur 5 teilnehmer hat kann man erstmal was bauen wo man die adresse FEST vergibt wenn man dann irgendwann den elan hat baut man sich eine erkennung mit rein erkennung wenn der neue slave angeschlossen wird ... hört er doch was aufm buss passiert wenn da grade voll die party los ist .. hält er eben die klappe irgendwann tritt der moment ein das für ein paar ms ruhe herrscht dann brüllt er eben ein "huhu"flag mit seiner seriennummer der master erkennt das und sagt eben .. alles klar ... und jetz übernimm deine aufgabe ... oder man nutzt generell das CMSA/CD-Verfahren es gibt keinen echten master und slave alle sind gleichberechtigt
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.