Forum: Mikrocontroller und Digitale Elektronik rs485 1 x master n x slaves


von KoF (Gast)


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

von Michael Wilhelm (Gast)


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

von Rufus T. Firefly (Gast)


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.

von KoF (Gast)


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?

von Sir Wedeck (Gast)


Lesenswert?

bei reichelt gibs den max487 für ca. 2€ und du kannst 128 slaves
ansprechen.

von Michael Wilhelm (Gast)


Lesenswert?

Enrweder Low Current tranceiver wie sir wedec dir gesagt hat oder jeder
Empfänger muß das Signal aktiv treiben. Lies doch mal die Posts durch.
MW

von Peter D. (peda)


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

von KoF (Gast)


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

von KoF (Gast)


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.

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.