rs485 1 x master n x slaves

Gast #141792
Lesenswert?
• ▲
▼
hallo :-)

ich habe da mal ein paar frage.
ich müßte über eine lange strecke (bis ca 800m) daten in eine richtung
an viele uC`s schicken. dabei wird lediglich vom master geschickt!!!
ein slave antwortet (bis jetzt zumindest) nie.

a)ist es möglich viele slaves paralel zu betreiben? da sie nie senden,
dürften so keine datenkollisionen erfolgen.

b)muß ein signal über diese strecke irgendwie verstärkt werden?

c)kabeltype für diese strecke (brauche ich eine gemeinsame
masseleitung)?

d)vorstellbare boudrate für 800meter oder mehr?

e)gibt es günstige bustreiber für 3,3v? kann ich eventuell auch
CAN-transreciver für das differential benutzen?

f) ... sachen die ich noch berücksichtigen muß ...

vielen dankt für hilfe

mfg
KoF
Gast #141793
Lesenswert?
• ▲
▼
RS 485 erlaubt derzeit nur 32 Teilnehmer, ich habe aber gelesen, daß es
inzwischen Treiber gibt für 128 Teilnehmer. Kabeltyp Cat5. Baudrate
20.000 bis 30.000? Die Anzahl der teilnehmer kannst du erhöhen, indem
jeder Empfänger das Signal aufbereitet (nicht nur elektrisch, sondern
auch zeitlich, also einmal durch die UART schicken). CAN bus arbeitet
meines Wissens mit RS485, die Treiber solten funktionieren.
MW
Gast #141794
Lesenswert?
• ▲
▼
Die Frage ist, wieviel sich unter "viele" verbirgt und mit welcher
Baudrate Du das abwickeln willst.

Bei etwa 100 Geräten und einer Baudrate von 9600 Baud ist mit
primitiver Zweidrahtleitung (kein TP, kein Schirm) problemlos eine
Länge von ~ 1km zu erzielen. Klingeldraht genügt völlig.
Leitungsverstärker o.ä. sind bei diesen Betriebsparametern nicht
erforderlich.
Allerdings sollten galvanisch getrennte RS485-Sender/Empfänger
eingesetzt werden.

Mit geeigneten Protokollen (Master schickt Anfrage an adressierbare
Slaves, Slaves antworten innerhalb eines gewissen Zeitfensters und
halten sonst die Schnauze) ist auch eine Halbduplex-Kommunikation kein
Problem. Das Protokoll sollte allerdings mit Prüfsummen/CRC
abgesicherte Pakete verwenden, um Übertragungsfehler erkennen zu
können.

Keine Ahnung, ob es auch RS485-Transceiver für 3.3V Versorgungsspannung
gibt, aber da würd' ich mal bei Maxim nachsehen, was die so im Angebot
haben.
Gast #141795
Lesenswert?
• ▲
▼
woran liegt es denn, das ich "nur" 32 slaves ansprechen kann?

also müßte ich wenn ich mehr habe möchte, sozusagen eine art
cableselect  benutzen :-( (mehr leitungen) oder eine art stern vom
master aus erzeugen, an dem an jedem strang 32 slaves hängen?
#141798
Lesenswert?
• ▲
▼
"e)gibt es günstige bustreiber für 3,3v? kann ich eventuell auch
CAN-transreciver für das differential benutzen?"

Geht sogar sehr gut.
Man spart dann auch die Sendeumschaltung und Kollisionen verlaufen
unblutig (kein Kurzschlußbetrieb).

Aber nicht RS-485 mit CAN mischen !

Und Abschlußwiderstände nicht vergessen !


Peter
Gast #141799
Lesenswert?
• ▲
▼
wegen den CAN-Transrecivern frage ich ja nur, weil ich da noch welche
von habe ;-)

ursprünglich wollte ich eine einfache art von hausbus realisieren (mit
CAN) aber nach einigen experimenten und tests habe ich festgestellt,
das  auf den datenverkehr vom slave her verzichtet werden kann. und da
ich lediglich  8 datenbytes (festgelegt) übertrage (eventuell noch eine
checksumme und je ein byte für start und ende der übertragung) meine
ich, das CAN hier überflüssig sein kann. und ich dieses billiger und
mit weniger codeaufwand das ganze betreiben kann. und wenn ich doch mal
daten vom slave haben will, dann werde ich nur ihm die ganze
aufmerksamkeit geben ;-) sprich alle anderen stumm machen ;-)
dazu muß ich dann wohl das protokoll umändern, aber das ist ja kein
aufwand.

aber vielen dank
Gast #141800
Lesenswert?
• ▲
▼
ok, ich denke mal, ich werde ein protoll ähnlich dem diesen nehmen!
-------------------------------------------------------------------

0x02; 0xXX; 0xXX; 0xXX; 0xXX; 0xXX; 0xXX; 0xXX; 0xXX; 0xXX; 0xXX; 0xXX;
0xXX; 0xXX; 0x03

1. byte:  0x02:   Start des protokolls
2. + 3. byte:  welcher slave (max also 65546 slaves (ok etwas
übertrieben ;-))
4. byte:  master erwartet daten = 0x00 / schreibt daten = 0xff
5. - 13. byte:  daten die der master haben will / daten, die der master
schreibt
14. + 15. byte:  checksumme
16. byte  0x03:  ende des protokolls

ok, ich werde eventuell auf die checksumme verzichten und auch sind 256
slaves wohl genug ;-)
also komme ich auf 13 bytes.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.