Hallo,
Ich habe zuhause ein Siemens 80c535 Board auf 19“-Einschubkarte.
Mit dieser Karte lernen wir in der Schule das Programmieren am MC mit
Assembler. So weit ich weiß habe ich auch eine rs485 Schnitstelle.
Unmittelbar vor der Schnittstelle ist ein IC MAX481.
Zum Programmieren benutzen wir die rs232 Schnittstelle.
Jetzt muß ich aber zu übungszwecken den Bus ans laufen bekommen.
Gibt es da ein tutorial oder ähnliches?
Wäre super wenn ihr mir helfen könntet.
Leider bin ich ein totaler Anfänger auf diesem Gebiet.
Danke
Gruß Heinz
Nun, ich nehme an, der verwendete Mikrocontroller hat zwei serielle
Ports, also zwei UARTs, einen für den RS232-Anschluß und einen für
RS485.
Wenn ich mal, ohne den Anspruch auf wissenschaftliche Korrektheit zu
erheben, ein paar Faustregeln und Erkenntnisse aus der Praxis beisteuern
dürfte:
RS485 arbeitet immer halbduplex, d.h. es kann nicht gleichzeitig
gesendet und empfangen werden - sollte man dies versuchen, liest man nur
die gerade gesendeten Daten zurück, was aber bei anspruchsvolleren
Anwendungen zur Kollisionserkennung sinnvoll sein kann.
RS485 benutzt im Gegensatz zu RS232 nur 2 Datenleitungen. Die
Pegeldifferenz zwischen beiden, bzw. ob diese positiv oder negativ ist,
wird vom Empfänger ausgewertet. Der Wechsel von 0 auf 1 oder umgekehrt
entsteht also durch Polaritätsumkehr. Zur Abschirmung wird hin und
wieder Masse mitgeführt. Kann hilfreich sein, muß nicht.
RS485 ist als Bus verwendbar. Oftmals ist dabei ein Gerät Master, und
die anderen Slaves. Slave-Geräte senden nicht von sich aus, sondern
antworten nur auf Anfragen des Masters. Zur Unterscheidung der Geräte
wird oft eine Adressierung verwendet. In "reinen" RS485-Systemen, wo
eine direkte Anbindung von PCs micht erforderlich ist, wird oft ein
UART-Modus mit 9 Datenbits verwendet. Das neunte Bit wird zur
Unterscheidung benutzt, ob die restlichen acht ein Datenbyte oder eine
Adresse darstellen. Diese Betriebsart ist aber nicht verpflichtend. Man
kann die Schnittstelle auch wie RS232 im mit 8 Detenbits verwenden.
RS485 wird üblicherweise über verdrillte, unabgeschirmte Kabel verlegt.
Auf kurze Distanz tut es jede Art von Litze oder Klingeldraht, verdrillt
oder nicht. Entscheidend ist aber der Abschluß mit etwa 100 Ohm
(Terminierung), die an einem Ende, oder verteilt auf beide Enden des
Kabelstranges als 2x 200 Ohm ausgeführt sein können. Diese stellen eine
Last für die Bustreiber dar, denn RS485 ist eine Stromschnittstelle: Die
Sender, auch Treiber genannt, sorgen dafür, daß ein bestimmter,
definierter Strom fließt. Dabei stellt sich i.A. eine Spannung von etwa
+/-3 Volt ein. Der Wert des Abschlußwiderstandes ist nicht kritisch, 120
Ohm funktionieren genauso wie 56, letzteres erhöht natürlich den
Stromverbrauch.
Der Max481-Baustein, genauso wie seine etwas primitiveren Verwandten vom
Typ SN75176, hat zwei Eingänge, die wahrscheinlich mit Portleitungen des
Mikrocontrollers verbunden sind. Diese werden üblicherweise als "DE"
(Driver Enable) und "RE" (Receiver Enable) bezeichnet. da eine dieser
Leitungen invertiert, also Low-aktiv ist, kann man auch beide verbinden
und über eine einzige Portleitung steuern. In diesem Fall ist der
Empfänger immer aus, wenn der Treiber an ist, man liest also die
gesendeten Daten nicht mit. Will man das, kann RE auch dauernd aktiviert
bleiben und DE bei Bedarf zugeschaltet.
Die RS485-Treiberbausteine erlauben, falls man das so will, hohe
Bitraten, teilweise bis in den Megabit-Bereich, falls der UART das
hergibt. (In der Praxis wohl eher nicht). 115k sollten aber möglich
sein, obwohl ich selber so etwas nur bis 9600 Baud betrieben habe -
daran waren aber die langsamen Optokoppler schuld, weil meine
Applikation galvanische Trennung benötigte. bei direktem Anschluß sollte
viel mehr gehen.
Ach ja, die ganze Sache ist trotz allem polaritätsabhängig. Die "A" und
"B" Signalleitungen sollten nicht vertauscht werden (d.h. an allen
Geräten gleich angeschlossen).
Also, kurz zusammengefaßt, RS485 kann ähnlich wie RS232 benutzt werden,
man muß aber zum Senden die Datenrichtung über den entsprechenden Pin
umschalten. Es gibt Möglichkeiten, RS485 auf RS232 zu wandeln, falls man
einen PC über Terminalprogramm anschließen will. Der PC versteht
allerdings keinen 9-Bit-Modus. Soweit ich das verstehe, definiert RS485
mehr oder weniger die Hardwareseite der Schnittstelle, impliziert aber
kein bestimmtes Protokoll. Wenn man darüber kein fertiges Gerät, sondern
beispielsweise ein weiteres selbst programmiertes Mikrocontrollerboard
anspricht, ist eigentlich jedes gewünschte serielle Datenformat und
Protokoll möglich.
Ich kenne mich mit dem genannten Controller nicht genau aus aber der
Wandler den du beschreibst beruht auf dem System, dass er zum senden
über einen Portpin des Mikrocontrollers diesen Befehl erhält. du kannst
mit RS232 immer auf den Controlle zugreifen, da diese Vollduplex kann
RS485 hingegen kann nur Halbduplex. Schliess also die Prog-Leitungen
ganz normal an, verende die gleiche Schnittstelle wie zum Progen, da das
Progen durch einen String eingeleitet wird den der µc eigentlich
erkennen sollte und in den PROG-Modus schaltet.
Gruss
Jochen
RS485-Hausbus.de.vu
Grober Patzer:
>RS485 arbeitet immer halbduplex,
Der halbduplexe Variante ist ein Multimaster-Bus - es können also
mehrere Leute "ungefragt" anfangen zu "reden".
Es gibt aber auch eine Vollduplex-RS485. Bei dieser Variante kommt nur
ein Master zum Einsatz, dessen TXD-Leitungen an diverse Slaves verteilt
wird.
Die Slaves wiederum hängen alle gemeinsam an den RXD-Leitungesn des
Masters.
Insgesamt gibt es also 4 Leitungen bei der Vollduplex-Variante.
Die zweidraht-Variante wird aber häufiger benutzt.
JA, das ist korrekt allerdings werden für volldublex 2 Bustreiber
benötigt wovon einer immer auf Empfang steht und einen der im
Bedarfsfall auf senden gestellt wird.
Ist aber wie gesagt eine sehr seltene Methode,
"Dauergespräche" zwischen den Komponenten sind nicht die Regel. Also
kann auch Softwaremässig geschaut werden ob der Bus frei ist und dann in
den Sendemodus schaltet.
JOCHEN
rs485-hausbus.de.vu
Nabend,
> Wenn ich mal, ohne den Anspruch auf wissenschaftliche Korrektheit zu> erheben, ein paar Faustregeln und Erkenntnisse aus der Praxis beisteuern> dürfte:
Wenn ich die Faustreglen und Erkenntnisse mal ein wenig korrogieren
dürfte . . .
> RS485 arbeitet immer halbduplex, d.h. es kann nicht gleichzeitig
Meistens. RS485 kann auch vollduplex arbeiten.
> RS485 benutzt im Gegensatz zu RS232 nur 2 Datenleitungen. Die
RS232: single ended, also Signal + Masse
RS485: differentiell, Positives Signal (A) , dazu inverse Signal (B),
Masse
> RS485 wird üblicherweise über verdrillte, unabgeschirmte Kabel verlegt.> Auf kurze Distanz tut es jede Art von Litze oder Klingeldraht, verdrillt> oder nicht. Entscheidend ist aber der Abschluß mit etwa 100 Ohm> (Terminierung), die an einem Ende, oder verteilt auf beide Enden des> Kabelstranges als 2x 200 Ohm ausgeführt sein können. Diese stellen eine
AUA!!! Entweder richtig oder gar nicht!
Sinnvollerweise sollte das verdrille Kabel ca. 100 Ohm Impedanz haben
(+/- 10%). Ethernet-Patchkable sind ideal. Es gehen aber auch andere.
Ein RS485 Strang wird immer an beiden Enden mit 100 Ohm terminiert.
2x200 Ohm an einem Ende ist Nonsense. Die Terminierung kann man sparen,
wenn die Kabel realtiv kurz sind und die Tranceiver langsam. Z.B. der
MAX487 ist speziell verlangsamt, um bei kurzen Kabeln (<10m) auch ohne
Terminierung ordentliche Signale zu erhalten.
> Last für die Bustreiber dar, denn RS485 ist eine Stromschnittstelle: Die
Falsch. RS485 ist ein Spannungsschnittstelle.
> +/-3 Volt ein. Der Wert des Abschlußwiderstandes ist nicht kritisch, 120> Ohm funktionieren genauso wie 56, letzteres erhöht natürlich den> Stromverbrauch.
Und ist totaler Nonsens! Entweder richtig oder gar nicht! Siehe oben.
> Der Max481-Baustein, genauso wie seine etwas primitiveren Verwandten vom> Typ SN75176, hat zwei Eingänge, die wahrscheinlich mit Portleitungen des> Mikrocontrollers verbunden sind. Diese werden üblicherweise als "DE"
Was heisst hier "wahrscheinlich"? Es muss (sinnvollerweise) mit RX/TX
vom UART im Controller verbunden werden.
> hergibt. (In der Praxis wohl eher nicht). 115k sollten aber möglich
Geht praktisch mit allen RS485 Tranceiver. Man sollte aber dabei auf die
"slew rate limited" Versionen zurückgreifen. Spart bei kurzen Leitungen
die Terminierung und bei längeren EMV Probleme.
MfG
Falk