Forum: Mikrocontroller und Digitale Elektronik Buskollision RS485


von Bernd (Gast)


Lesenswert?

Mal eine kleine Frage zum RS485 Bus...

Ich benutze den MAX485 und habe den receiver immer aktiviert. Dachte mir 
nun, dass ich um kollisionen zu verhindern den Treiber manuell 
aktivieren muss bevor ich was sende.

Ich habe zwei Teilnehmer am Bus, der eine Sendet einen Befehl, der 
andere antwortet leicht verzögert darauf. Wenn der "Master" (von dem der 
Befehl ausgeht) jetzt sendet und ich den Drive-Enable aktiv lasse (also 
dauerhaft sende) kommt es nicht zu einer Kollision - ich empfange die 
Antwort meinees "Slaves" weiterhin ohne Probleme.

Wie ist das zu erklären? Ich dachte, ich würde den Bus "übertreiben" 
wenn ich Drive Enable dauerhaft an lasse. Oder kommt es nur zu 
Bus-Kollisionen wenn auch beide tatsächlich senden?

von Falk W. (dl3daz) Benutzerseite


Lesenswert?

Bernd wrote:
> Mal eine kleine Frage zum RS485 Bus...
...
> Wenn der "Master" (von dem der
> Befehl ausgeht) jetzt sendet und ich den Drive-Enable aktiv lasse (also
> dauerhaft sende) kommt es nicht zu einer Kollision - ich empfange die
> Antwort meinees "Slaves" weiterhin ohne Probleme.
>
> Wie ist das zu erklären? Ich dachte, ich würde den Bus "übertreiben"
> wenn ich Drive Enable dauerhaft an lasse. Oder kommt es nur zu
> Bus-Kollisionen wenn auch beide tatsächlich senden?

Das könnte ich mir so erklären, daß der Daten sendende Treiber genügend 
Pegel gegen den gerade nicht sendenden aufbringt, daß der Receiver die 
Daten noch lesen kann.

Wenn beide gleichzeitig Daten übertragen, wird Müll auf dem Bus sein.

Falk

von Bernd (Gast)


Lesenswert?

Mein wandler ist ganz (sehr) ähnlich zu diesen hier:

http://www.e-lab.de/diverse/RS232-485sch.pdf

Ich hab halt keine Ahnung wie ich die RTS Leitung vernünftig in LabView 
ansteuern kann. LV hat zwar funktionen um die leitung zu setzen/nicht zu 
setzen aber das funktioniert nicht in real time (wenn ich die Leitung 
setze und direkt danach sende kann es sein, dass er erst mit dem Senden 
anfängt und danach den Drive Enable setzt). Wartezeiten bringen leider 
auch nichts, weil ich das gleiche Problem auch beim Beenden des 
Sendevorgangs habe - wenn der Slave antwortet dann kann es sein, dass 
die Drive-Enable Leitung des Masters noch gesetzt ist (weil das 
"disablen" des RTS auch nicht in realtime erfolgt). Ich müsste den Slave 
auch ewig lang warten lassen bis er was senden darf weil ich ja keine 
möglichkeit habe den Bus auf Aktivität ab zu fragen.

von Andreas K. (a-k)


Lesenswert?

Wenn du dir die Pegel auf dem Bus aussuchen kannst, also kein bereits 
fertiges Gerät mit einbinden musst: Nimm statt RS485-Treiber einfach 
CAN-Treiber. Keinen CAN-Bus wohlgemerkt, nur die Treiberbausteine 
dadurch ersetzen. Dann löst sich das Problem in Luft auf und die 
Enable-Leitung gleich mit.

von Franz (Gast)


Lesenswert?

Hallo,

in LabVIEW kannst du einfach RTS setzen und beim Senden den Treiber 
aktivieren.
Ein Terminal für RS485 unter LabVIEW findest Du unter

http://schulen.eduhi.at/htlbraunau/lehrer/ploetz/Labbsp/index.html

"Terminal 3".

Gruß
Franz

von Falk W. (dl3daz) Benutzerseite


Lesenswert?

Bernd wrote:
> Mein wandler ist ganz (sehr) ähnlich zu diesen hier:
>
> http://www.e-lab.de/diverse/RS232-485sch.pdf
>
> Ich hab halt keine Ahnung wie ich die RTS Leitung vernünftig in LabView
> ansteuern kann.

Ich auch nicht (kein LabView)
...

> (weil das
> "disablen" des RTS auch nicht in realtime erfolgt).

Den Spaß hatte ich mit einem eigenen Programm und einem 
USB-RS232-Adapter. RTS kam nicht in Realtime.

Ich habe mir damit geholfen, daß ich mir einen USB-RS485 mit einem AVR 
und den Treibern von ww.obdev.at(?) gebastelt habe.

Mit dem TXC-Flag des USART kann man die Richtung recht gut steuern.

Falk

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.