Forum: Mikrocontroller und Digitale Elektronik RS485 - automatische Adressierung


von tom (Gast)


Lesenswert?

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

von klausy (Gast)


Lesenswert?

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.

von burny (Gast)


Lesenswert?

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

von burny (Gast)


Lesenswert?

keine Idee???
 ich abe den Post raus gegraben

von BrainHunter (Gast)


Lesenswert?

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.

von gast (Gast)


Lesenswert?

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

von Marco S. (masterof)


Lesenswert?

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

von bkd (Gast)


Lesenswert?

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....

von Purzel H. (hacky)


Lesenswert?

Allenfalls kann man das so machen wie hier beschrieben
http://www.ibrtses.com/embedded/dynamicid.html

von linux-frickeler (Gast)


Lesenswert?

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.

von gast (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.