ZBus am PC (RS232 zu RS485 Konverter): Unterschied zwischen den Versionen
Zeile 33: | Zeile 33: | ||
: - Kein Hardware handshake. | : - Kein Hardware handshake. | ||
: - J4 ist um bei kürzeren Leitungen 5V weiterzuleiten, sodass kein Extra Spannungsumwandler bei dem Node nötig ist. | : - 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 | + | : - Mit 2 extra Jumper kann auch ein RS422 eingestellt werden |
− | |||
− | |||
− | + | <gallery> | |
− | + | Bild:232.png | RS232 zu TTL | |
+ | Bild:485.png | TTL zu RS485 | ||
+ | Bild:2576.png | Schaltnetzteil für Nodeversorgung | ||
+ | Bild:P1010069.jpg | ||
+ | Bild:P1010070.jpg | ||
+ | Bild:P1010073.jpg | ||
+ | </gallery> | ||
− | + | 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 == | |
− | + | [[Bild:Rs232-rs485.png|250px|right]] | |
+ | 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. | ||
+ | == 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 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ./zbus-serial-host -r 19200 -d /dev/ttyS0 -a 10.0.1.22/24 | ||
− | |||
− | ifconfig | ||
− | |||
− | |||
− | |||
inet addr:10.0.1.22 P-t-P:10.0.1.22 Mask:255.255.255.0 | 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 | UP POINTOPOINT RUNNING NOARP MULTICAST MTU:174 Metric:1 | ||
Zeile 89: | Zeile 79: | ||
collisions:0 txqueuelen:500 | collisions:0 txqueuelen:500 | ||
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) | RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) | ||
− | Das zbus0 | + | |
− | + | 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 | 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!) |
Version vom 1. September 2009, 13:56 Uhr
Inhaltsverzeichnis
Zbus ( ein RS485 netzwerk mit IP )
Wichtig - erst diese Seite lesen: http://www.ethersex.de/index.php/Network_Bridges
Hier findet man die Anschlussbelegung von atmega8 mit atmega644 per MAX485 http://www.ethersex.de/index.php/Bild:Zbus.pdf
Für den Aufbau eines RS485 Buses/Netzes gibt es einiges zu beachten: http://archive.chipcenter.com/embapps/emba062.htm
Bild 1 unten gibt einen richtigen Aufbau wieder.
Dort kann man am ende des Artikel auch als pdf downloaden. Die bilder der HTML Version sind deutlicher als die der PDF-Version.
Protokoll siehe: http://www.ethersex.de/index.php/ZBus_Protokoll
Den PC als Host siehe: http://www.ethersex.de/index.php/ZBus_Serial_Host
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.
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!)