Forum: Mikrocontroller und Digitale Elektronik RS-485 Master-Slave Adressierung


von Thomas E. (rc_flyer)


Lesenswert?

Hallo,

ich habe eine Frage zum RS-485 Bus.
Wenn ich einen Master und mehrere Slaves auf dem Bus habe, wie kann ich 
jeden einzelnen Slave ansprechen? Bzw. wir weise ich jedem Slave eine 
Adresse zu?
Ist das Abhängig vom verwendeten Protokoll zb UART oder Modbus oder 
benötigt jeder Slave ein Treiberbaustein mit einer festgelegten Adresse?

Vielen Dank für eure Antworten!

von Falk B. (falk)


Lesenswert?

Thomas E. schrieb:
> ich habe eine Frage zum RS-485 Bus.
> Wenn ich einen Master und mehrere Slaves auf dem Bus habe, wie kann ich
> jeden einzelnen Slave ansprechen?

Über ein passendes Protokoll.

> Bzw. wir weise ich jedem Slave eine
> Adresse zu?

Per DIP-Sachalter oder in dessen Software.

> Ist das Abhängig vom verwendeten Protokoll zb UART oder Modbus oder

Ja.

> benötigt jeder Slave ein Treiberbaustein mit einer festgelegten Adresse?

Siehe oben.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Thomas E. schrieb:
> RS-485

RS-485 legt erstmal nur die elektrische Übertragungsart fest. Die 
gebräuchliche serielle Übertragung mit z.B. 8N0 ist eigentlich schon von 
UART/RS-232 entliehen und könnte auch was beliebig anders sein. Sowas 
wie Adressierung kennen die aber alle erstmal nicht. Genaugenommen noch 
nichtmal so Begriffe wie Master/Slave. Prinzip ist einer sendet und alle 
anderen hören zu. Was du da sendest und was die Empfänger ggf. damit 
anstellen ist rein deine Sache und muss von dir entsprechend in einer 
höheren Protokollschicht in deiner Software passend implementiert 
werden.

von Thomas E. (rc_flyer)


Lesenswert?

Irgend W. schrieb:
> RS-485 legt erstmal nur die elektrische Übertragungsart fest. Die
> gebräuchliche serielle Übertragung mit z.B. 8N0 ist eigentlich schon von
> UART/RS-232 entliehen und könnte auch was beliebig anders sein. Sowas
> wie Adressierung kennen die aber alle erstmal nicht. Genaugenommen noch
> nichtmal so Begriffe wie Master/Slave. Prinzip ist einer sendet und alle
> anderen hören zu. Was du da sendest und was die Empfänger ggf. damit
> anstellen ist rein deine Sache und muss von dir entsprechend in einer
> höheren Protokollschicht in deiner Software passend implementiert
> werden.

Danke soweit für die Antwort!

Wenn ich jetzt verschiedenen Servos am Bus habe und nur einen bestimmten 
ansteuern will, wie kann ich das konkret machen?
Noch konkreter, wie weis der entsprechende Slave das er angesprochen 
wird?
Läuft das über den Treiber der eine bestimmte Adresse hat, die ich dann 
Header des verwendeten Protokolls definiere?

von Oliver R. (orb)


Lesenswert?

Thomas E. schrieb:
> Wenn ich jetzt verschiedenen Servos am Bus habe und nur einen bestimmten
> ansteuern will, wie kann ich das konkret machen?

Simpelste Möglichkeit:
Du schickst immer zwei Bytes. Im ersten steht die Nummer des Servos, im 
zweiten der Sollwert.
Die Servos lauschen am Bus und wenn das erste Byte ihre Nummer ist, 
werten sie das zweite aus, sonst machen sie nichts.
Das ganze kannst Du dann nach belieben mit Rüchmeldungen, Prüfsummen etc 
ergänzen.

Beitrag #7542087 wurde vom Autor gelöscht.
von Peter D. (peda)


Lesenswert?

Thomas E. schrieb:
> Wenn ich jetzt verschiedenen Servos am Bus habe und nur einen bestimmten
> ansteuern will, wie kann ich das konkret machen?

Das sollte in der Protokollbeschreibung des unbekannten Servos stehen.
Eine Möglichkeit ist der 9-Bit Mode. Das 9. Bit legt fest, ob eine 
Adresse oder Daten übertragen werden. Nicht adressierte Slaves können 
dann ihre UART so konfigurieren, daß Datenbytes ignoriert werden.
Die Adreßzuweisung könnte z.B. über Jumper oder Befehle erfolgen.

: Bearbeitet durch User
von Hannes (taurus16)


Lesenswert?

Moin,
nicht jedes RS485 Gerät ist dafür gedacht mit anderen in einem Netz 
betrieben zu werden ;)

Stell doch hier mal deinen Servotyp rein, dann können wir besser helfen.

Gruß
Hannes

von Rainer W. (rawi)


Lesenswert?

Oliver R. schrieb:
> Simpelste Möglichkeit:
> Du schickst immer zwei Bytes. Im ersten steht die Nummer des Servos, im
> zweiten der Sollwert.

Dann musst du dem Empfänger nur noch mitteilen, welches Byte das erste 
ist (falls er einmal außer Tritt kommt). Dafür brauchst du ein weiteres 
Bit.

Irgend W. schrieb:
> Die gebräuchliche serielle Übertragung mit z.B. 8N0 ist eigentlich schon von
> UART/RS-232 entliehen

Das macht dem Empfänger die Sache nicht leicht. Wenigstens ein Stop-Bit 
sollte man sich gönnen, damit der Empfänger sich schneller wieder 
synchronisieren kann, falls bei der Übertragung einmal etwas schief 
geht.

von Harald K. (kirnbichler)


Lesenswert?

Rainer W. schrieb:
> Das macht dem Empfänger die Sache nicht leicht.

"Irgend" hat sich vertippt, er wollte 8n1 schreiben. Auf Start- und 
Stopbit können UARTs nicht verzichten, aber auf Parity. Das Startbit ist 
implizit immer an Bord, das Stopbit wird gezählt, weil auch andere 
Mengen als eines auftreten können.

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

Schau dir mal MODBUS an.

http://de.wikipedia.org/wiki/Modbus

https://simplymodbus.ca/

Das verwende ich für Basteleien seit 10 Jahren. Das ist sogar einem 
ATMEGA168 beizubringen.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Hans-jürgen H. schrieb:
> Das verwende ich für Basteleien seit 10 Jahren.

Er will ja irgendwelche ungenannte fertigen Servos nehmen.

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.