zurück zum Artikel

Grafisches Status-Display am USB-Port

Mäusekino

Praxis & Tipps | Praxis

Ein zusätzliches Minimal-Display am PC ist mehr als nur ein Gimmick für verspielte Case-Modder: Auch bei ausgeschaltetem Hauptmonitor informiert es über eingegangene E-Mails, das gerade abgespielte MP3-Musikstück oder den aktuellen Netzwerk-Traffic. Unser Projekt wartet sogar mit einem grafikfähigen Display auf, das die Informationen deutlich anschaulicher darstellen kann als die bekannten Text-Anzeigen.

Schaltungen, die ein mehrzeiliges Text-Display als Statusanzeige zum Beispiel mit der PC-Druckerschnittstelle verbinden, kursieren seit Jahren im Internet; im Zubehör-Handel erfreuen sich derartige Displays, oft aufgewertet mit einem USB-Interface, großer Beliebtheit. Bei Server-Rechnern beispielsweise gehört ein kleines Display, das Traffic, Fehlermeldungen und Speicherbedarf anzeigt, durchweg zum guten Ton - der Admin erkennt dann auch ohne angeschlossenen Monitor, wie es dem Server gerade geht. Ein sicher ebenso häufiger Anwendungsfall ist der Multimedia-PC, der eine solche Anzeige als alternatives User-Interface bereithält.

Nachteil vieler kommerzieller und der meisten hobbymäßigen Lösungen ist die ausschließliche Textanzeige. Das beschränkt die Visualisierung auf grobschlächtige Balken und nicht immer aussagekräftiges Zahlenwerk. Ein Grafik-Display, wie wir es im Folgenden für Windows-Rechner vorstellen, hat nicht nur den Vorteil einer besseren Visualisierbarkeit, relevante Daten lassen sich auch prominenter darstellen und aus größerer Entfernung besser ablesen. Besonders elegant an unserer Lösung ist nicht nur der integrierte IR-Fernbedienungsempfänger, sondern auch die Tatsache, dass sich das Display räumlich getrennt vom Rechner aufstellen lässt.

Die Schaltung entspricht bis auf einige notwendige Erweiterungen der IO-Warrior24-Applikation. Ein Erweiterungsstecker macht den späteren Anschluss von Bedienungstasten oder Drehgeber möglich.

Bereits in [1] haben wir mit dem IO-Warrior einen universellen USB-Interface-Chip vorgestellt, der unter anderem den Anschluss eines LC-Textdisplays erlaubt [2]. Der IO-Warrior-Chip ist aber prinzipiell in der Lage, auch kleine Grafik-Displays anzusteuern, zumal deren Interface sich elektrisch kaum von dem der Text-Displays mit HD44780-Controller (einem Quasi-Industriestandard) unterscheidet. Mit etwas Nachhilfe auf Treiber-Seite lässt sich ein Grafik-Display - in unserem Fall eines mit 128 x 64 Pixeln - problemlos ansteuern. Auch bei den kleinen Grafik-Displays hat sich so etwas wie ein Standard durchgesetzt, hier dominieren KS0107/8-kompatible LCD-Controller.

Im Unterschied zu einem Text-Display mit vielleicht 80 ASCII-Zeichen (4 Zeilen zu je 20 Zeichen) ist das über USB zu übertragende Datenvolumen (sofern man im Zeitalter der Gigabit-Netze hier überhaupt von einem „Volumen“ sprechen kann) bei einem Grafik-Display deutlich größer. Ein 128x64-Display benötigt für einen vollständigen Bildaufbau ein ganzes Kilobyte allein an Pixel-Informationen (1 Bit pro Pixel), also mehr als zehnmal so viel wie eine 80-Zeichen-Textanzeige.

Da der IO-Warrior-Chip nicht blockorientiert arbeitet, sondern die für das LCD bestimmten Bytes einzeln verpackt über den USB schickt, benötigt er wegen des enormen Protokoll-Overheads etwa eine Sekunde für den Refresh des Grafik-Displays. Das ist angesichts der eher statischen Natur der anzuzeigenden Werte an sich nicht schlimm. Beim Ausprobieren an verschiedenen Rechnern sind wir allerdings auf das Phänomen gestoßen, dass nicht alle PC-Mainboards das Abwickeln des USB-Protokolls gleich gut beherrschen: Ein MSI-Barbone beispielsweise benötigte fast zwei Sekunden für den kompletten Bildaufbau. Wir haben deshalb bei der Entwicklung des Anwendungsprogramms (dazu später) darauf geachtet, dass nur die Bildbereiche neu übertragen werden, die sich tatsächlich geändert haben. In der Praxis sind die verbleibenden Latenzen ohne Belang, es sei denn, man legt Wert auf eine zehntelsekundengenaue Anzeige der MP3-Spielzeit ...

Die Schaltung basiert mit geringen Änderungen auf den Original-Applikationen der Firma Code Mercenaries [1, 3]. Der verwendete Baustein IO-Warrior24 unterstützt per se nur einen LCD-Controller, ein 64x128-LCD hat aber zwei davon an Bord: Jeder verwaltet einen eigenen Displaybereich von 64 x 64 Pixeln. Deshalb wurde ein zusätzlicher I2C-Ausgabebaustein (PCF8574) nötig, der zur Umschaltung zwischen den beiden LCD-Controllern dient. Seine restlichen Bits steuern die Reset-Leitung des Displays sowie einige (optionale) LEDs, die man für eigene Anzeigezwecke verwenden kann. Der auf unserer Platine vorgesehene Infrarot-Empfänger entspricht wieder der Code-Mercenaries-Applikation und wird durch den IO-Warrior verwaltet.

Der IO-Warrior meldet sich als USB-Verbundgerät am PC an, ein besonderer Treiber ist deshalb nicht nötig. Eine in Delphi programmierte Beispielapplikation (siehe Soft-Link) zeigt, wie man das USB-LCD aus einer Hochsprache anspricht. Die Source-Files dazu liegen dem Software-Päckchen bei. Eine umwerfende Funktionalität bietet die Demo allerdings nicht: Über Schaltflächen kann man die LEDs auf der Interface-Platine an- und ausknipsen oder einen Text und einfache grafische Muster an das Display ausgeben.

Sehr viel komfortabler ist da schon das Display-Programm, das uns der Entwickler des Projektes zur Verfügung gestellt hat: Es läuft unter Windows als Hintergrund-Dienst, und seine Optionen sind über die Windows-Schnellstartleiste zugänglich. Hier stellt man ein, was man auf dem Display angezeigt haben möchte: Datum/Uhrzeit, RAM- und Festplattenauslastung, Netzwerk-Traffic, Anzahl der eingegangenen E-Mails, eingehende Anrufe auf der CAPI-Schnittstelle. Sogar ein simpler News-Client für RSS-Feeds ist eingebaut: In der Grundeinstellung zeigt er die Headlines von heise online an. Weitere Menüpunkte legen fest, ob sich die Anzeigeinhalte abwechseln sollen, wie oft sie aktualisiert werden und wie lange sie jeweils auf dem Mini-Schirm verbleiben. Wer das Motherboard-Monitorprogramm MBM5 (Freeware, siehe Soft-Link) installiert hat, erhält außerdem die Werte von Mainboard-Spannungen, Lüfterdrehzahl(en) und Prozessor-Temperatur angezeigt.

Aufs Wesentliche reduzierte Screens der Media-Player WinAmp und ZoomPlayer zeigt das Programm direkt an, wobei am platineneigenen Sensor eingehende Infrarot-Kommandos an diese Player weitergeleitet werden. Welche Fernbedienungs-Knöpfe welche Funktionen steuern, legt man in einem „irv“-Konfigurationsfile fest; der Programm-Autor liefert eine Datei für die Universal-Fernbedienung Tevion MD6461 mit, auf die man gegebenenfalls aufbauen kann. Die Fernbedienung muss allerdings den (sehr gebräuchlichen) RC5-Standard verwenden, andere lassen sich nicht einsetzen. Es wurde allerdings die Möglichkeit angedacht, den Fernbedienungs-Code extern „vorzubehandeln“, deswegen haben wir das IR-Signal auf einen Erweiterungsstecker geführt. Die Zuweisung der Fernbedienungs-Funktionen ist sehr einfach: Man klickt im Konfigurationsfenster die gewünschte Steuer-Funktion an und drückt dann auf der Fernbedienung die korrespondierende Taste. Die erlernte Gesamtkonfiguration für die eigene Fernbedienung lässt sich dann unter eigenem Namen abspeichern.

Das Steuerprogramm installiert sich in der Taskbar und ist dort mit einem Klick auf die rechte Maustaste zugänglich. Auch Plug-ins lassen sich über das Menü installieren.

Das ausgesprochen funktionsreiche Programm, das per Client sogar auf andere Rechner im Netz zugreifen kann und dann deren Werte anzeigt, hat nur einen Nachteil: Es ist durch Zukauf von Software-Komponenten nicht frei von Rechten Dritter und kann deshalb nicht vollständig im Quelltext weitergegeben werden. Allerdings kann man es durch eigene Plug-ins erweitern, sodass dieser Nachteil leicht zu verschmerzen ist - die Software-Schnittstellen sind gut dokumentiert.

Sollten uns weitere Hersteller wie zum Beispiel Buhl Data (TV-Central) oder Apple (iTunes) die nötigen Informationen (Software-Schnittstellen) zukommen lassen, werden auch mehr Player- oder Media-Center-Programme unterstützt. Nach Möglichkeit wird der Autor den angepassten Code in seinem Forum (siehe Soft-Link) offen legen und unter die General Public License stellen. Der gesamte Interface-Sourcecode steht ebenso unter GPL und darf für private Zwecke weiterverwendet werden; der Sourcecode des Hauptprogramms ist aus oben genannten Gründen davon ausgenommen. Für eigene Entwicklungen oder Erweiterungen benötigt man Borland Delphi ab Version 5, das IO-Warrior-SDK von Code Mercenaries und unsere Beispiele. Die vorliegenden Programme sind für Windows ab Version 98SE geeignet.

Die recht übersichtliche Schaltung lässt sich notfalls sogar auf einer Lochraster-Platine aufbauen, da keine SMD-Bauteile verwendet werden. Wer auch bei elektronischen Baugruppen auf ein Mindestmaß an Ästhetik Wert legt oder den Lötkolben nur sporadisch anheizt, sollte lieber auf die bei eMedia erhältliche Platine zurückgreifen. Bei der Bestückung ist lediglich die begrenzte Bauhöhe zu beachten, aber selbst für IC-Fassungen bleibt unter dem Display noch genügend Platz.

Die Schaltung stellt wie oben erwähnt eine Erweiterung der IO-Warrior-Applikationsnote dar. Das Display ist an Port 1 und an Teilen von Port 0 angeschlossen, wie vom Hersteller empfohlen. Das Poti R9 dient der Einstellung des Display-Kontrasts, Poti R16 legt die Grundhelligkeit fest. Übliche LCD-Module lassen sich leicht schräg von unten am besten ablesen, der Blickwinkel ist wegen des einfacheren inneren Aufbaus deutlich kleiner als bei modernen LC-Monitoren. Soll das Display vornehmlich von schräg oben abgelesen werden können, etwa bei einem auf dem Boden stehenden Tower-Gehäuse, kann man es auch kopfstehend montieren; in der Display-Software ist die Möglichkeit gegeben, den Anzeige-Inhalt um 180° zu drehen.

Die vier LEDs und der (ebenso optionale) Infrarot-Empfänger werden „langbeinig“ montiert, sodass sie das Display etwas überragen. Das Display selbst wird über einen einreihigen Platinen-Steckverbinder mit der Interface-Platine verbunden und der Infrarot-Sensor so umgeknickt, dass seine abgerundete Seite nach vorn zeigt. Bei genügend Vertrauen in die eigene Lötkunst können Sie zum Anschluss des Displays auch einen Pfostenverbinder ohne Steckmöglichkeit verwenden, was einige Millimeter Gesamtbauhöhe spart. Auf der Platine ist ein Steckverbinder für eigene Erweiterungen vorgesehen (SV1), der für die Grundausstattung nicht bestückt werden muss. Geplant ist hier der Anschluss eines Drehgebers und einer automatischen Helligkeits- und Kontraststeuerung.

Für den Anschluss an den USB des PC ist eine „stehende“ USB-B-Buchse vorgesehen, die auf der Lötseite der Platine montiert werden muss - logisch, wenn das Display eingesetzt ist, käme man sonst ja auch gar nicht mehr an die Buchse heran. Die Alternative: Bei PC-interner Montage des Displays bestückt man die USB-B-Buchse nicht, sondern verbindet die vier USB-Pins (Vcc, D-, D+, Gnd) über ein geeignetes Kabel (vierpolig inklusive Abschirmung) direkt mit einem freien Mainboard-USB-Port. Überprüfen Sie auf jeden Fall die Belegung anhand der Unterlagen zu Ihrem Mainboard und zur Sicherheit noch mal die Polung der Betriebsspannungen mit einem Multimeter. Die Reihenfolge der Mainboard-USB-Pins folgt oft dem genannten (und im Schaltplan ersichtlichen) Schema, zum Standard wurde diese Belegung aber noch nicht erklärt. Die Stromversorgung der Schaltung erfolgt über USB, einen Versorgungsspannungsanschluss besitzt die Platine deshalb nicht.

Die USB-Buchse ist auf der Lötseite der Platine zu montieren, wenn das Display extern angeschlossen werden soll. Vergessen Sie die im Text erwähnten Jumper an SV1 und JP4 nicht, sonst bleibt das LCD dunkel. Die Bauteilnummerierung ist aus technischen Gründen nicht fortlaufend.

Solange keine Erweiterungen an SV1 angeschlossen sind, müssen die Pins 1 und 2 von JP4 (Kontraststeuerung) mit einem Jumper überbrückt werden, ebenso die gegenüberliegenden SV1-Pins RC5in und RC5out (13, 14) sowie LCDON und LCDON_0 (7, 8). Eine weitere Leuchtdiode lässt sich an den Pins für LED5 anschließen, auch diese wird vom I2C-Baustein gesteuert. Als Display eignen sich alle grafikfähigen LCD-Module mit den Abmessungen 93 mm x 70 mm, wobei die modernen mit blau-weißer Anzeige einen geringeren Stromverbrauch aufweisen als ältere mit grüner. Bei der Einstellung von R16 ist zu beachten, dass der Maximalstrom der LED-Beleuchtung nicht überschritten wird; dieser ist dem LCD-Datenblatt zu entnehmen. Grüne Display-Beleuchtungen vertragen 250 bis 300 mA, weiße dagegen oft nur 60 mA (bei etwa gleicher Lichtausbeute). Selbstverständlich sind auch Module ohne oder mit EL-Folien-Beleuchtung verwendbar, letztere benötigen aber einen zusätzlichen Spannungswandler (Inverter).

Nach Bestückung und Endkontrolle schließt man die Platine an einen USB-Port des Rechners an und überprüft die anliegende Versorgungsspannung (etwa 5 V an Pin 16 von IC1, 0 V an Pin 8, bezogen auf Rechner-Masse). Beide Potis sollten auf Mittelstellung stehen. Auf dem Display wird sich noch nichts tun, aber im Windows-Geräte-Manager sollte das Interface unter den USB-Controllern schon als USB-Verbundgerät auftauchen. Wenn in den „Eigenschaften“ unter „Ort“ der Name „IO-Warrior24“ auftaucht, ist so weit alles in bester Ordnung. Mit dem Start des Demo- oder Display-Anwendungsprogramms schaltet sich die Display-Beleuchtung ein, und die Begrüßungsmeldung erscheint - möglicherweise aber nur flau bis kaum erkennbar, weil die Kontrast-Spannung noch nicht eingestellt wurde.

Display und USB-Platine (hier ein Prototyp) werden mit einer Pfostenleiste verbunden. Damit LEDs und IR-Sensor bis an die Frontplatte ragen, bleiben ihre Anschlussdrähte fast ungekürzt.

Stellen Sie deshalb mit R9 den Bildkontrast auf gute Ablesbarkeit ein und mit R16 die gewünschte Helligkeit (maximalen LED-Strom des Displays nicht überschreiten!). Der Strom durch die Beleuchtungs-LEDs kann durch Messen des Spannungsabfalls an R12 (10 Ohm) ermittelt werden: 1 V Spannung entspricht hier genau einem Strom von 100 mA, bei weißen LEDs (60 mA Betriebsstrom) sollten also nicht mehr als 0,6 V zu messen sein. Bei unzureichender Helligkeit von grünen LED-Beleuchtungen dürfen R12 bis auf 4,7 Ohm und Poti R16 bis auf 50 Ohm verkleinert werden, dann stimmt obige Entsprechung natürlich nicht mehr.

In dieser gefälligen Form eignet sich das Display auch für die freie Aufstellung fern vom Rechner.

Bausätze und Baugruppen zu unserem USB-Grafikdisplay wird es bei der Firma Segor[1] in Berlin geben, Leerplatinen und Spezialbauteile bei eMedia[2]. Fertiggeräte und passende Gehäuse für die externe Aufstelllung bietet der Autor über die Dessauer Firma includ an (Bezugsquellen siehe Soft-Link), sodass das Projekt auch für „postmaterielle“ Bastler (sprich Programmierkünstler ohne Löterfahrung) interessant ist. Prinzipiell eignet sich die Schaltung übrigens ebenso für Windows-fremde Rechner, da Code Mercenaries weitere SDKs für Mac OS und Linux feilhält - wir warten gespannt auf Programme, die das USB-Display unter diesen Systemen ansteuern. (cm[3])

[1] Carsten Meyer, Draht nach draußen, USB-Interfacing mit Custom-Chips, c't 8/03 S. 204

[2] Andreas Beier, Zweitanzeige, ASCII-LCDs unter Windows und Mac OS X ansteuern, c't 7/04 S. 208

[3] Datenblätter und SDK zum IOW24 auf www.codemercs.com[4]

Infrarot/I2C-Anschluss
Funktion IOW24
SCL P0.1
SDA P0.2
RC5 P0.0
Erweiterungs-Steckverbinder
Pin Funktion
1 Kontrast-Pulsbreite
2 Masse
3 Vcc
4 Masse
5 LED05 (Ausgang)
6 IOW24_P0.3
7 /LCDON
8 /LCDON_0 (Eingang)
9 LED01 (Ausgang)
10 LED02 (Ausgang)
11 I2C SCL (Clock)
12 I2C SDA
13 RC5in
14 RC5out
Display-Anschluss
Display IOW24
/On P0.4
RS P0.5
R/W P0.6
E P0.7
Data0 P1.0
Data1 P1.1
Data2 P1.2
Data3 P1.3
Data4 P1.4
Data5 P1.5
Data6 P1.6
Data7 P1.7
Stückliste
IC1 PCF8574
IC2 IOWARRIOR24
IC3 TSOP1738, TSOP1736
T1 BC556
LED1..4 LED 3mm
C1 100n ker. RM 2,5
C2, C5 10µ/25V Elko radial RM 2,5
R1 1k3
R2...R5 150R
R6, R7 4k7
R8 100R
R9 25k Min. Trimmer PT6KV
R10 150R
R12 10R
R15 680R
R16 100R Min. Trimmer PT6KV
SV1 Pfostenverbinder zweireihig, 14-pol.
JP1 Pfostenverbinder einreihig, 4-pol.
JP3 Pfostenverbinder einreihig, 20-pol., Display z. B. EW13B30 oder EA E128-6N2LW
JP4 Pfostenverbinder einreihig, 3-pol.
USB-B USB-B-Buchse stehend (siehe Text)

URL dieses Artikels:
http://www.heise.de/-290316

Links in diesem Artikel:
[1] http://www.segor.de/
[2] http://www.emedia.de/
[3] mailto:cm@ct.de
[4] http://www.codemercs.com/