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

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(Low Feature Variante ohne LEDs)
 
(5 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
== '''Zbus ( ein RS485 netzwerk mit IP''' ) ==
+
== '''Allgemeines zu [[ZBus]]''' ) ==
  
 
Wichtig - erst diese Seite lesen: http://www.ethersex.de/index.php/Network_Bridges
 
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 [http://archive.chipcenter.com/embapps/emba062.htm beachten]. Dort ist auf Bild 1 der richtige Aufbau zu sehen.
  
Für den Aufbau eines RS485 Buses/Netzes gibt es einiges zu beachten: http://archive.chipcenter.com/embapps/emba062.htm
+
* [[ZBus Protokoll]]
 
+
* PC Software für ein ZBus Netzwerkinterface ([[ZBus_Serial_Host]]
Bild 1 unten gibt einen richtigen Aufbau wieder.
+
* Anschluss eines ATmegas an ein ZBus Netz ([http://www.ethersex.de/index.php/Bild:Zbus.pdf PDF])
 
 
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 ==
 
== ZBus an der seriellen Schnittstelle ==
Zeile 33: Zeile 27:
 
: - 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.
  
 +
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.
  
;'''Beispiel node mit atmega8'''
+
Bild mit fertige Platine und selbstbau Beschreibung --> [[RS232_zu_RS485_Converter]]
[[Bild:Zbus_node_PoE.png|800px]]  
 
  
''Zbus node mit atemaga8''
+
== 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:
  
;'''Um den PC das Zbus bei zu bringen geh zu:'''
+
  $ cd ~/ethersex/contrib/zbus-serial-host # Ordner Wechseln
:~/ethersex/contrib/zbus-serial-host und gebe
+
   $ make # Software kompilieren
   make
+
   $ ./zbus-serial-host -h # Hilfe anzeigen
:ein, damit wird zbus-serial-host gebaut.
+
  -h --help      Print this help and exit
:Wie normal hat man unter Linux mit rechten zu tun.
+
  -r --baudrate  set baudrate
:Wenn man als user nun :
+
  -a --address  adds of the interface in the form 192.168.8.1/24
  ./zbus-serial-host
+
  -d --device    set the ttyS* interface to use
versucht aus zu fuehren kommt: ./zbus-serial-host: Couldn't open tun device
+
  -m --mtu      set mtu
  su
+
  -u --up        call this command, when the interface is up
und dein password abgeben fuer root und als root weiter machen.
+
 
jetzt als root:
+
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-serial-host -h
+
 
ausfuehren.
+
  # Der ZBus Treiber benötigt root Rechte, weil er ein Netzwerkinterface erstellt
Dann soll folgende ausgabe kommen:
+
   $ sudo ./zbus-serial-host -r 19200 -d /dev/ttyS0 -a 10.0.1.22/24 & # ZBus im Hintergrund starten
-h --help      Print this help and exit
+
   $ ifconfig zbus0
-r --baudrate  set baudrate
+
  zbus0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00   
-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 77:
 
             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!)
 +
 
 +
[[Kategorie:ZBus]]

Aktuelle Version vom 17. September 2009, 08:39 Uhr

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 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.

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