RS-485

EIA-485 (auch: RS-485) ist ein Schnittstellen-Standard für leitungsgebundene, differentielle, serielle Datenübertragung.

RS-485 ist überall dort gefragt, wo es in stark gestörten Umgebungen (Maschinenhallen) darauf ankommt, mit minimalem Bauvolumen auf einfachste Art Datenkommunikationen zu realisieren, um z.B. Geräte ein- und auszuschalten oder Daten zu transportieren. (Wikipedia: http://de.wikipedia.org/wiki/EIA-485)

rs485-2leiter.jpg

Allgemeines

Wenn man nur mit zwei Leitungen fährt, dann muss man beim Senden an die Pins ^RE und DE des MAX485 HIGH anlegen. Wenn man Empfangen will, dann muss man an die Pins ^RE und DE des MAX485 ein LOW anlegen.

Das fällt weg, wenn man mit vier Leitungen überträgt. Vier Leitungen haben den Vorteil, dass man Statusmeldungen an ALLE schicken kann und diese auch von ALLEN empfangen werden. Das ist bei zwei Leitungen nicht garantiert. Mit zwei Leitungen kommt man aus, wenn man die Kommunikation von einem MASTER aus kontrolliert und niemand ohne Aufforderung des MASTERs etwas "sagen" darf.

Wenn die Datenverbindung über zwei Leitungen stattfindet, dann muss man drei Leitungen vom µC zum MAX485 führen. TX, RX und einen Pin über den man dem MAX485 mitteilt, ob gesendet oder empfangen wird. Wenn man senden möchtet, dann legt man diesen zusätzlichen Pin auf HIGH. Und wenn man empfangen möchte, dann legt man diesen Pin auf LOW.

Wenn die Datenverbindung über vier Leitungen stattfindet, dann muss man nur zwei Leitungen vom µC zum MAX490 führen. TX und RX. Es wird nicht zwischen Senden und Empfangen unterschieden.

In beiden Fällen arbeitet man über die in den µC eingebaute UART und kannt mit dem Bascom-Befehl PRINT die Daten versenden. Und zum Empfangen von Daten kannt man mit INPUT und den anderen üblichen Befehlen arbeiten.

Außerdem muss man noch wissen, dass jeder Client die gleichen Daten empfängt. Man muss sich im Protokoll also selber darum kümmern, dass der richtige Client die Daten verarbeitet und der Master auch nur Antwort von dem Client bekommt, der vorher gefragt wurde. Dafür gibt es mehrere Protokolle. Aber das Einfachste ist wahrscheinlich, wenn man alle Clients die Kommunikation abhören lässt und im Übertragungsprotokoll zuerst übermittelt, für wen die Daten sind und an wen die Antwort zurück zu senden ist. Z.B. so:

Master an Client 1 --> "01-00:sende Status"
Client 1 an Master --> "00-01:OK"

Master an Client 2 --> "02-00:sende Temperatur"
Client 2 an Master --> "00-02:36.89"

Master an Client 3 --> "03-00:sende Luftdruck"
... Timeout
Master an Client 3 --> "03-00:ABBRUCH"
...

Diese Kommunikation bekommen zwar alle Clients mit und müssen sie auch komplett auswerten, aber alle hören auf das Kommando des Masters und stören sich somit nicht. Das ist zwar nicht ideal, aber in den meisten Fällen ausreichend. Dann gibt es noch Protokolle, die das Ganze ein wenig intelligenter machen. So, dass nicht jeder Client die ganze Kommunikation auswerten muss. Es gibt auch noch mehrere Möglichkeiten, die übertragenen Daten auf Übertragungsfehler hin zu überprüfen. Aber ob und wie ist eine Frage der Anwendung.

Halbduplex

Der MAX485 kann nur Halbduplex. Das heißt: Während man etwas von einem Baustein aus zu den anderen Bausteinen sendet, kann man nichts Empfangen. Und umgekehrt. Dafür braucht man aber auch nur zwei Leitungen. Wenn man vier Leitungen zur Verfügung hat, dann kann man mit dem MAX488 (und höher) gleichzeitig auch empfangen, während man etwas sendet.

Nur wenn man solch einen Baustein und vier Leitungen einsetzt -- nur dann fühlt sich RS-485 in Bascom wie RS-232 an.

Wenn man nur zwei Leitungen verwendet und den MAX485 einsetzt, dann muss man zuerst über einen Pin des µC den MAX485 in den Sendemodus schalten. Dann sendet man die Daten und danach setzt man den MAX485 wieder in den Empfangsmodus zurück. Jetzt darf der Client Daten an den Master zurück senden.

Wenn man kein Problem mit dieser Synchronisation hat, dann fährt man mit dem MAX485 nicht schlecht. Ansonsten würde ich zu einem höheren MAX-Baustein (z.B. MAX490) und vier Leitungen raten.

mfg Gerold :-)