Auswahl
Projekte
Impressum
lang:en   lang:de

 
 
 
Switch Um ein paar Niedervolt-Spannungen zu schalten kann man entweder Schalterleisten kaufen, die mittels SNMP programmierbar sind, oder eben eine kleine Schachtel selber bauen und die mit ein paar simplen Befehlen über den USB zu steuern sind.

Die Übersicht

Das Blockschaltbild ist sehr übersichtlich. Die Hauptkomponente ist der Microcontroller (hier IO-Warrior). Prinzipiell kann der viel mehr als ein paar GPIOs mit LEDs und Relais dran zu steuern. Mehr brauchte ich an der Stelle aber nicht, somit tut das Ding hier seinen Dienst. Allerdings ist das Ding furchtbar zu programmieren. So wie das SDK für diesen Baustein aussieht ("Industrial Code Quality"...), so läßt er sich auch programmieren. Naja, man bringt es dazu, die paar Relais zu schalten.
 

Der Schaltplan

Der Schaltplan ist entsprechend dem Blockschaltbild auch sehr übersichtlich. Keine besonders spannenden Dinge sind darin enthalten. Es ist nur zu beachten, daß es sich dabei um ein hirarchisches Design handelt.

Startseite als Postscript
USB-Unterseite als Postscript
Relais-Schalter-Unterseite als Postscript
Relais-Unterseite als Postscript

Die Leiterkarte

Die Leiterkarte liegt als Eagle Layout Datei vor.

Leiterkarten-Datei
Bibliotheks-Datei

Die Stückliste

Diese Bauteile gilt es zu besorgen
Typ Wert Bauform Menge Name(n)
CAPACITOR 100n C0805 1 C3
CAPACITOR 10n C0805 1 C1
CAPACITOR 10u ELC-2.5 2 C2 C4
DIODE 1N4148 MINIMELF 8 D1 D2 D3 D4 D5 D6 D7 D8
LED 2 mm LED2 8 D10 D11 D12 D13 D14 D15 D16 D9
74xx TTL 74573 DIL20S 1 IC2
CONNECTOR STL(Z) 1550
2-polig
conn2 8 X10 X11 X12 X13 X14 X15 X16 X17
PNP_TRANSISTOR BC556 TO-92-CBE 8 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8
RELAIS G6D-1A G6D1A 8 X2 X3 X4 X5 X6 X7 X8 X9
RESISTOR 10k R0805 8 R10 R12 R14 R16 R18 R4 R6 R8
RESISTOR 1k3 R0805 1 R1
RESISTOR 1R R0805 1 R2
RESISTOR 3k3 R0805 8 R11 R13 R15 R17 R3 R5 R7 R9
RESISTOR 470R R0805 8 R20 R21 R22 R23 R24 R25 R26 R27
RESISTOR 4k7 RN-9 1 R19
CONNECTOR USB-B-001 USB-B 1 X1
USB-slave IO-Warrior24 DIL24 1 IC1
Aluminium-Gehäuse AKG 105 30 keinen 1  

Das Gerät

Als Gehäuse ist ein ALU-Gehäuse für Karten im Euro-Format vorgesehen. Die gibt es preiswert und man kann entweder das in der Stückliste angegebene nehmen oder eins für eine komplette Euro-Karte (160 mm x 100 mm) und dieses einfach mittig durchsägen (so habe ich es gemacht). Das Ergebnis ist vielleicht nicht der Weisheit letzter Schluß, läßt sich aber durchaus sehen.
 

Das Programm

Die Beispiele, die der Hersteller des IO-Warrior liefert, sind zwar prinzipiell lauffähig, aber in keinem guten Zustand. "Industrial Code Quality" eben. Und das bedeutet nur: Es geht prinzipiell und meistens.
Wenn man nur mal eben die kleinen Programm-Schnipsel verwendet, erwecken sie den Eindruck, als ob sie funktionieren und man meint ein Gefühl dafür zu bekommen, wie sie funktionieren.
Wie immer steckt der Teufel aber im Detail. Sicher, wer lesen kann ist klar im Vorteil, aber ein Programm das den Portstatus liest, suggeriert, das dies möglich ist. Das im Datenblatt steht, das es nicht geht, überliest man dann schnell. Ich bin wohl zu sehr Atmega verwöhnt, wo der Ausgangsstatus jederzeit zurück gelesen werden kann.
Zuerst kämpft man damit, das der Baustein nur manchmal den Portstatus zurück gibt. Nämlich immer dann, wenn man vorher ein Kommando gesendet hat. Da versteht man plötzlich, warum die Demoprogramme mit select() und einem Timeout warten. Nur hilft einem die zugehörige Fehlermeldung nichts, weil man den IO-Warrior nicht kennt...
Das Ende vom Lied ist nun, daß man den letzten Portstatus (also die Schaltstellung der Relais und LEDs) lokal auf dem Host speichern muß, weil man den nicht vom IO-Warrior zurückbekommt. Und weil es keine atomaren "Setzen" und "Löschen"-Befehle gibt, sondern man immer nur den binären Wert für den gesamten Port an den IO-Warrior senden kann.
Warum speichern? Weil das Werkzeug zum Schalten kein Programm sein soll, welches ständig läuft, sondern ein einfaches Kommando, das man dann aufruft, wenn man es braucht. Und dafür muß eben der letzte Zustand persistent gemacht werden.
Die Benutzung ist wie folgt vorgesehen:
$ switcher --on backup

In diesem Beispiel soll die Funktion backup aktiviert werden. Ziel dieses Programmes ist es, die Funktion (hier backup) und was passieren soll (hier --on) von dem zu trennen, was im Hintergrund für Daten an den IO-Warrior geschickt werden müssen, um das zu erreichen.
Daher weiß das Programm switcher nur, wie es die Daten an den IO-Warrior aufbereiten muß. Die Parametrisierung erfolgt über eine Konfigurationsdatei:
# /etc/switcher.conf
# setup each function and how to control them
#
# Function: backup
# Handled by an external switch based on the IO-Warrior USB device
#
# Connected is a USB harddisk, that needs 5V and 12V
# to work. Both supplies are controlled via this switch.
# bit 6+7 are switching the relais 1+2
# bit 8+9 are switching the LEDs 1+2
#
function backup
{
   protocol = iowarrior
   node = /dev/usb/iowarror0
   only_user = { }
   only_group = { }
}
# What to do, to switch this function OFF
action backup_off
{
   set = { 6, 7, 8, 9 }
}
# What to do, to switch this function ON
action backup_on
{
   clear = { 6, 7, 8, 9 }
}

Hier ist also aufgeführt, was switcher tun soll, damit die Funktion backup ein- oder ausgeschaltet werden kann.
D.h. um die Funktion backup einzuschalten, müssen im IO-Warrior die Bits 6, 7, 8 und 9 gelöscht werden. Um backup auszuschalten, diese vier Bits gesetzt werden.
Die Konfigurationsdatei ist so aufgebaut, daß es möglich ist, mehrere Geräte, die ein einfaches Schalten ermöglichen, hier zentral aufgenommen werden können. Es ist also nicht auf den IO-Warrior beschränkt. Der Abschnitt function liefert jeweils den Namen des Subsystems (protocol) und einen Device-Node, um darauf zuzugreifen. Darüber ist es auch möglich, mehrere gleichartige Geräte zu unterscheiden, aber alle zentral zu verwalten.
Weiterhin kann man festlegen, wer was darf. Man kann einzelne Funktionen auf Benutzer oder Gruppen einschränken. Im Beispiel oben wird keine Einschränkung für die backup Funktion festgelegt, somit sind die Klammern leer.

Die Quellen

Die Quellen können hier geladen werden. Sie verwenden die autotools zur Konfiguration und sollten sich daher mit dem Dreisatz configure/make/make install übersetzen und installieren lassen.
Sollten Probleme beim Bauen oder Benutzen auftreten, bitte eine Mail an: switcher at kreuzholzen dot de