ZBus am PC (RS232 zu RS485 Konverter)
Inhaltsverzeichnis
Allgemeines zu ZBus )
Wichtig - erst diese Seite lesen: http://www.ethersex.de/index.php/Network_Bridges
Für den Aufbau eines RS485 Buses/Netzes gibt es einiges zu beachten. Dort ist auf Bild 1 der richtige Aufbau zu sehen.
- ZBus Protokoll
- PC Software für ein ZBus Netzwerkinterface (ZBus_Serial_Host
- Anschluss eines ATmegas an ein ZBus Netz (PDF)
ZBus an der seriellen Schnittstelle
Es gibt zwar die Möglichkeit ein ZBus Netz nur aus Ethersexen bestehend aufzubauen und dann eines als Gateway in die normale Netzwerkwelt zu benutzen (dieses Gateway hat dann einmal ZBus und einmal Ethernet). Jedoch kann man auch die serielle Schnittstelle eines normalen PCs oder sogar einen USB-zu-Seriell Konverter verwenden um ZBus mit Ethersexes zu sprechen. Dazu braucht es allerdings einen Konverter von dem RS232 das die auf der seriellen Schnitstelle gefahren wird zum RS485, dass bei ZBus normalerweise verwendet wird.
Der erste Versuch ist hier zu finden. Dieser ist allerdings noch komplizierter, braucht einen externen Attiny zum umschalten des RX/TX Pins (bei RS485 muss man zwischen Senden und Empfangen umschalten). Jedoch kann man sich dieses umschalten mit einem kleinen Trick ersparen.
Full Feautured Aufbau mit LEDs
- PC als Host node am Zbus einsetzen:
- Ein PC_Host Adapter kann so aussehen:
- - Ist auch als universal rs232-rs485 Konverter einzusetzen
- - Hat zwei rs485 Kanälen
- - Das umschalten zwischen empfangen und senden ist Baudratenunabhaengig.
- - Verkraftet eine Baudrate bis 115200.
- - Mit den Steckverbinder kann man jedes Kabel anschliessen ohne zu loeten.
- - Die Leds leuchten nur auf wenn etwas ampfangen oder gesendet wird.
- - Kein Hardware handshake.
- - J4 ist um bei kürzeren Leitungen 5V weiterzuleiten, sodass kein Extra Spannungsumwandler bei dem Node nötig ist.
- - Mit 2 extra Jumper kann auch ein RS422 eingestellt werden
Die RS232 und RS485 sind getrennt nach aussen geführt, und können somit als Entwicklungsboard zusammen mit einem AVR Net-IO ohne änderung hergenommen werden.
Der Trick mit dem Umschalten beim RS485 ist folgender: Durch die 3 Biaswiderstände (570,156 und 570 Ohm) werden die Leitungen A und B auf eine logische 1 gesetzt, der Unterschied zwischen beiden beträgt ca. 0.6V. Die Biaswiderstände muss man als Abschlusswiderstände sehen, die dürfen nicht bei jedem Node vorhanden sein, weil sonst die 485 Chips die Last nicht mehr treiben können, also nur bei ersten und beim letzen mit Hilfe der Jumper stecken.
Der DataIn Pin des 485 Chips wird fest auf 0 gelegt, also eine logische 0, nun muss man nur noch den Transmitter einschalten, wenn auch von 232 Chip eine logische 0 Ankommt, da der Transmitter Enable Pin High Active ist braucht es noch eine Invertierung des Signals durch den 74HC04. Und schon kann man prima RS485 sprechen ohne zusätzlichen Umschaltpin.
Low Feature Variante ohne LEDs
Da der 74HC04 nur verwendet wird um ein einziges Signal zu invertieren, der Rest ist nur für die Anzeige der LEDs da, kann man den ganzen Chip durch einen einzelnen Transistor und 2 Widerstände ersetzen. Bei dieser Schaltung ist weder der RS232 direkt rausgeführt, noch hat man 2 Kanäle, es ist nur die Low Budget Version, wenn man einen einfachen RS232 zu RS485 Konverter braucht.
Allerdings ist hier auch noch zu beachten, dass noch die 5V Versorgung fehlt. Diese kann man zum Beispiel wie bei der Full Featured Variante aufbauen, oder einfach einen 7805 mit der Schaltung wie im Datenblatt verwenden, um von 12/24V auf 5V zu kommen.
Bild mit fertige Platine und selbstbau Beschreibung --> RS232_zu_RS485_Converter
Software für den Konverter (Linux)
Die Software für das Einrichten eines ZBus Netzes mit einem solchen Konverter ist ein Userspace treiber, der ein Tun Device (erstellt) und darüber ZBus spricht. Die Software ist im Ethersex Repository unter contrib/ zu finden:
$ cd ~/ethersex/contrib/zbus-serial-host # Ordner Wechseln $ make # Software kompilieren $ ./zbus-serial-host -h # Hilfe anzeigen -h --help Print this help and exit -r --baudrate set baudrate -a --address adds of the interface in the form 192.168.8.1/24 -d --device set the ttyS* interface to use -m --mtu set mtu -u --up call this command, when the interface is up
Nun muss man den ZBus "Treiber nur noch starten. Um ein zbus Device zbus0 zu erstellen, dass die Addresse 10.0.1.22 und die Netzmaske 10.0.1.255 hat, bei 19200 Baud, ist folgendes zu tun:
# Der ZBus Treiber benötigt root Rechte, weil er ein Netzwerkinterface erstellt $ sudo ./zbus-serial-host -r 19200 -d /dev/ttyS0 -a 10.0.1.22/24 & # ZBus im Hintergrund starten $ ifconfig zbus0 zbus0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.0.1.22 P-t-P:10.0.1.22 Mask:255.255.255.0 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:174 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Das zbus0 Interface ist wie ein gewöhnliches Netzwerkinterface. (zb eth0). In diesem Zbus Netzwerk sollten alle Nodes Addressen aus dem Netz 10.0.1.255 haben. Sollen nun alle Rechner im Netzwerk wissen wie sie sich mit den ZBus Nodes in Verbindung setzen muss am Default Gateway (Router) noch eine Route eingetrachen werden, die sagt, wo Packete für das ZBus Netzwerk hinsollen. Angenommen der ZBus Gateway hat 10.0.0.188 als Addresse setz man die passende Route mit
ip route add 10.0.1.0/24 via 10.0.0.188
Zu beachten ist auch, dass alle ZBus Nodes die gleiche Baudrate fahren müssen (vorallem sind Quarze Pflicht!)