ZBus am PC (RS232 zu RS485 Konverter): Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
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 [[media:Zbus_node_PoZbus_RS232_RS485_RS422.png]]
+
: - Mit 2 extra Jumper kann auch ein RS422 eingestellt werden  
[[Bild:Zbus_node_PC_PoZbus.png|800px]]
 
''Schaltplan PC am Zbus (aka) universal rs232 extender (ohne hardware handshaking)''
 
  
[[Bild:P1010069.jpg|400px]]  [[Bild:P1010070.jpg|400px]]
+
<gallery>
''Bastel Bilder von PC an Zbus (aka) rs232 extender''
+
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>
  
[[Bild:P1010073.jpg|400px]]  [[Bild:232.png|400px]]
+
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.
  
[[Bild:485.png|400px]]          [[Bild:2576T.png|400px]]
+
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.  
  
''Bastel Bild nach 40m kabel mit schaltplaene die darauf 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.
  
Die rs232 und rs485 sind getrennt nach aussen gefuehrt.
+
== Low Feature Variante ohne LEDs ==
Somit kan man es als entwicklungsboard einsetzen und ein avr-net-io ohne aenderung an die zbus haengen.
+
[[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:
  
;'''Beispiel node mit atmega8'''
+
  $ cd ~/ethersex/contrib/zbus-serial-host # Ordner Wechseln
[[Bild:Zbus_node_PoE.png|800px]]
+
  $ 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:
  
''Zbus node mit atemaga8''
+
   # 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
;'''Um den PC das Zbus bei zu bringen geh zu:'''
+
   $ ifconfig zbus0
:~/ethersex/contrib/zbus-serial-host und gebe
+
  zbus0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00   
   make
 
:ein, damit wird zbus-serial-host gebaut.
 
:Wie normal hat man unter Linux mit rechten zu tun.
 
:Wenn man als user nun :
 
  ./zbus-serial-host
 
versucht aus zu fuehren kommt: ./zbus-serial-host: Couldn't open tun device
 
  su
 
und dein password abgeben fuer root und als root weiter machen.
 
jetzt als root:
 
  ./zbus-serial-host -h
 
ausfuehren.
 
Dann soll folgende ausgabe kommen:
 
-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
 
Annahme du willst ein baudrate von 19200 an /dev/ttyS0 mit ip=10.0.1.22 und netmask 255.255.255.0
 
Dann gibt man folgendes ein:
 
   ./zbus-serial-host -r 19200 -d /dev/ttyS0 -a 10.0.1.22/24
 
Mit
 
   ifconfig
 
soll zbus jetzt auftauchen als netz interface.
 
ausgabe soll sowass sein:
 
  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
 
             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 interface ist wie ein gewohnliches internetz interface. (zb eth0)
+
 
Alle Zbus ethersexen sollen eine IP in 10.0.1.x haben.
+
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
Annahme: den PC hat als ip 10.0.0.188
+
 
Mit eingabe von:
 
 
   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
sollten alle ethersexe erreichbar sein die an Zbus angeschlossen sind und richtig mit Zbus kompiliert sind.Das bedeutet auch das alles was an Zbus haengt mit die gleiche baudrate laufen muss.
+
 
 +
Zu beachten ist auch, dass alle ZBus Nodes die gleiche Baudrate fahren müssen (vorallem sind Quarze Pflicht!)

Version vom 1. September 2009, 14:56 Uhr

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

Rs232-rs485.png

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!)