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