Eine LCD Anzeige und Steuertasten f�r den Linux Server

ArticleCategory: [Choose a category, do not translate this]

Hardware

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to de Guido Socher

AboutTheAuthor:[A small biography about the author]

Guido mag Linux nicht nur, weil es Spa� macht, die gro�artigen M�glichkeiten, die dieses System bietet zu entdecken, sondern auch wegen der Leute, die an seiner Entwicklung beteiligt sind.

Abstract:[Here you write a little summary]

In diesem Artikel entwickeln wir ein LCD Kontrollfeld basierend auf einem Hitachi HD44780 LCD Display und dem AT90S4433 AVR 8-Bit RISC Microcontroller von Atmel. Beides sind gel�ufige Komponenten und sind nicht zu teuer. Das Kontrollfeld enth�lt neben Anzeige und zwei Tasten eine Watchdog, um den Server zu �berwachen. Mit Hilfe der Anzeige und den Tasten kann man einen Dialog mit dem Benutzer f�hren und einigen Sachen einstellen. Man kann die IP Adresse, Netzmaske und Gateway Adresse setzen, au�erdem ist es m�glich den Rechner herunterzufahren (shutdown) oder Statistiken abzufragen. Eigentlich gibt es fast unbegrenzte M�glichkeiten. Der gr��te Teil der Logik ist in einem Perlscript implementiert und die ganze Schaltung ist �ber die RS232 Schnittstelle mit dem Server verbunden.

F�r diesen Artikel brauchst du wenigstens Teile der Linux AVR Entwicklungsumgebung. Wie man diese Linux AVR Entwicklungsumgebung aufsetzt ist in dem Artikel "Programmierung des AVR Microcontroller mit GCC" beschrieben.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Einf�hrung

lcd from tuxgraphics
shop.tuxgraphics.org verkauft sehr gute und günstige LCD Anzeigen.
Die hier entwickelte Schaltung kombiniert Funktionalit�t, die schon in zwei vorhergegangenen Artikeln beschrieben wurde: Unsere Neuentwicklung geht jedoch weit �ber das hinaus. Die neue Hardware enth�lt zwei Tasten f�r den Dialog mit dem Benutzer und eine Watchdog, um den Server st�ndig zu �berwachen. Es ist au�erdem ein analoger Eingang vorhanden, den wir hier jedoch nicht benutzen. Man k�nnte z.B einen Temperaturf�hler anschlie�en.

Um diese Schaltung aufzubauen, braucht man etwas Geschick und Erfahrung im Bereich Hobbyelektronik. Die Bauteile f�r die Schaltung sind nicht teuer und kosten alle zusammen weniger als 40 Euro.

Die Idee hinter dem LCD Kontrollfeld ist, da� man damit einen Server ohne Monitor und Tastatur bedienen kann. Linux ist ein sehr zuverl�ssiges Serverbetriebssystem und kann gut per ssh, telent oder remote login verwaltet werden. Wenn man die Server jedoch das erste Mal mit dem Netzwerk verbindet, mu� man eine IP Adresse, Netzmaske und Gateway setzen. Mit diesem Kontrollfeld kann man das machen. Es bietet au�erdem die M�glichkeit, den Server herunterzufahren w�hrend man noch im Serverraum ist.

Das ganze Kontrollfeld ist sehr allgemein gehalten. All die Server spezifischen Teile sind in einem Perlscript implementiert. Die gesamte Hardware, der Zustand der Tasten, der Text im Dispaly, LEDs, ..., kann �ber ASCII Kommandos gesteuert werden. Man kann daher dieselbe Schaltung �bernehmen, um einen mp3 Spieler zu bauen oder einen Toaster zu steuern, was immer du m�chtest.

Ben�tigte Bauteile

Um dieses Kontrollfeld zu bauen, ben�tigst du die folgenden Teile:

1 x Atmel At90S4433 Microcontroller
1 x 28pin 7.25 mm IC Sockel
1 x 16pin IC Sockel
1 x MAX232
1 x kleines 5V Relai
1 x 4MHz Quarz
2 x LEDs (gr�n und rot)
1 x BC547 NPN Transistor
1 x BC557 PNP Transistor
4 x 1uF Kondensator (Folie oder Elko)
2 x 27pF Keramikkondensator
1 x 10nF Kondensator
1 x 100nF Kondensator
3 x Widerstand 4k7
2 x Widerstand 2k2
1 x Widerstand 10K
1 x Widerstand 3k3
2 x Widerstand 100 Ohm
3 x Widerstand 470 Ohm
3 x Widerstand 1k
1 x Widerstand 220 Ohm
1 x 4K7 Poti (Bauform so klein wie m�glich)
1 x Z-Diode 4.3V
2 x kleine Taster
1 x Diode (e.g 1N4148, irgendeine kleine billige Diode)
1 x 2 Zeilen 20 Zeichen LCD Display mit HD44780 kompatiblem Interface.

Alle LCD Displays mit 14 oder 16 Anschl�ssen, die ich jemals gesehen habe, waren HD44780 kompatibel. Man kann auch ein 3 oder 4 zeiliges Display benutzen, aber dann mu� man die Software f�r den Microcontroller etwas anpassen.

Zus�tzlich zu diesen Teilen braucht man noch Dr�hte und Anschl�sse f�r Stromversorgung und RS2322. Das zweizeilige Display kann man an einem gebogenen Aluminiumblech befestigen und dann in einem freien 5.25" Schacht am Server montieren.

Schaltplan und Platine

Ich habe Eagle f�r Linux benutzt, um den Schaltplan und die Platine zu entwerfen. Es ist eine ausgezeichnete Software, aber es braucht Zeit bis man sie bedienen kann. F�r private Zwecke kann man eine kostenlose Version von Eagle bei cadsoftusa.com erhalten.

Der Schaltplan (mit einem Klick auf den Plan erh�lt man ein gr��eres Bild):
[Schematic]

Die Platine (mit einem Klick auf die Platine erh�lt man ein gr��eres Bild):
[board]


Die Platine mit wei�em Hintergrund, um das Drucken erleichtern: Platine in wei� (Achtung: Das ist nicht die Datei, die man zum Belichten der Platine braucht)

Die Eagle Dateien (komprimiert mit gzip. Achtung einige Webbrowser un-zippen die Dateien schon beim Herunterladen):

Die Schaltung

Ich werde kurz den Schaltplan erkl�ren. Der AT90S4433 hat 3 Ports: PB, PC und PD. PC kann als analoger oder digitaler Eingang benutzt werden. Alle Ports k�nnen als digitale Ein- oder Ausg�nge benutzt werden. Dieses wird per Software �ber das DDR (Data Direction Register) festgelegt. Wir benutzen alle Pins bis auf 23 als digitale Ein- oder Ausg�nge (0 oder 5V). Der Max232 ist ein Spannungswandler. Das RS232 Interface benutzt +-10V und der Max232 konvertiert das in 0-5V. An Pin 1 (Reset) befindet sich etwas namens Brownout-Schaltung. Diese Schaltung h�lt den Reset auf 0 (aktiv) w�hrend Perioden mit unzureichender Spannungsversorgung. Das verhindert, da� die CPU Anweisungen fehlerhaft ausf�hrt. Normalerweise ist das f�r einige Millisekunden w�hrend des Einschaltens oder beim Ausschalten der Fall. Die Brownout-Schaltung stellt im wesentlichen sicher, da� der Microcontroller richtig startet.

Einige Leute m�gen sich wundern, warum eine Diode parallel zur Spule liegt und so gepolt ist, da� sie sinnlos scheint. Diese Diode ist sehr wichtig. Beim Ausschalten des Stromes an dem Relai w�rde die Spule eine sehr hohe Spannung induzieren, die den Microcontroller sofort zerst�ren kann. Diese induzierte Spannung hat entgegengesetzte Polarit�t zur Betriebsspannung an der Spule. Die Diode kann eine ganz kleine billige Diode im Glasgeh�use sein, aber es ist wichtig, da� sie vorhanden ist.

Wie man eine Platine erstellt

Um die Platine zu �tzen, mu� zuerst diese Postscriptdatei (linuxlcdpanel.ps.gz) auf eine transparente Folie ausgedruckt werden. In L�den f�r Architekten kann man eine semitransparente Plasikfolie namens Sinolit finden. Sie wird von der Firma Regulus hergestellt und ist f�r den Offsetdruck gedacht. Eine andere gute Alternative ist 60g Papier + Pausklarspray von Kontakt Chemie. Der Vorteil von Papier und Sinolit ist, da� der Druckertoner dort 100%ig haftet.
Ich habe die Postscriptdatei auch in PDF umgewandelt f�r den Fall, da� du kein Postscript drucken kannst, aber die Qualit�t ist sehr schlecht.
Die Belichtungszeit f�r fotobeschichtete Platinen h�ngt von der Lichtquelle ab. Bei einem Heimsolarium sind es etwa 1-2 Minuten. Man kann auch Tageslicht benutzen, aber direkte Sonneneinstrahlung sollte man vermeiden, da die Strahlung einfach zu stark ist. Man sollte vorher die beste Belichtungszeit mit einem kleinen Streifen Platine ermitteln. Die Folie und die Platine legt man w�hrend des Belichtens am besten unter eine Glasplatte, damit die Folie ganz plan liegt.
[before etching]
Die belichtete und entwickelte Platine vor dem �tzen


Die belichtete Platine wird f�r einige Minuten in Natriumhydroxid (NaOH) entwickelt. Danach sollte man das Ergebnis sorgf�ltig pr�fen und gegebenenfalls Korrekturen mit einem �tzfesten Edding 780 Lackstift (Edding 780 paint marker) vornehmen. Ich zeichne gew�hnlich die Pads f�r die Bauteile etwas gr��er, weil die von Eagle vorgegegebene Gr��e f�r Hobbyzwecke zu klein ist.
[after etching]
Das fertige Board vor dem Bohren der L�cher


Aus irgendeinem Grund scheint es unm�glich f�r die Hersteller von Relais zu sein, sich auf eine Anschlu�belegung zu einigen. Ich habe ein kleines Relai, das von Matsushita hergestellt wurde benutzt. Dein Relai wird vermutlich anders aussehen und du mu�t daher die Platine anpassen. Das geht am besten mit so einem �tzfesten Edding Lackstift.

Wenn Du mit den Bahnen auf der Platine zufrieden bist, kannst Du sie in FeCl3 (Eisendreichlorid) �tzen. FeCl3 hat eine gute �tzgeschwindigkeit bei Raumtemperatur. Es ist einfach zu benutzen und daher gut f�r Hobbyzwecke geeignet. Man bekommt die besten Ergebnisse, wenn die Platine in der �tzl�sung steht. Kupferionen sind schwerer als Eisen und sammeln sich deshalb am Boden des Gef��es an. Liegt dort die Platine, so verlangsamt sich die �tzgeschwindigkeit sehr schnell.

Wenn die Platine fertig ist, sp�hlt man sie mit Wasser ab und wischt den Eddingstift mit Terpentin ab. Den Fotolack kann man auf den Bahnen lassen. Er verdampft beim L�ten und sch�tzt die ungel�teten Bahnen.

Die Software f�r deinen Microcontroller

Die Software f�r den Microcontroller ist auf folgende Dateien aufgeteilt: Um die Software im Detail zu verstehen, empfehle ich das Datenblatt f�r den Microcontroller zu lesen. Das Datenblatt findet man im Abschnitt Referenzen am Ende des Artikels oder auf der Atmel Webseite (www.atmel.com).
Um jedoch dieses Kontrollfeld benutzen zu k�nnen, braucht man die Software �berhaupt nicht zu verstehen. Man mu� lediglich den Quellcode auspacken (linuxlcdpanel-0.7.tar.gz gibt's auf der download Seite) und dann

make
make load

tippen. Man kann sogar einfach die schon vorkompilierte Software benutzen und sie mit

make loadprebuild

in den Microcontroller laden. Ganz einfach. Eine Beschreibung, wie man den Microcontroller programmiert und was man dazu braucht, findet sich im ersten Artikel: Den AVR Microcontroller mit GCC programmieren.

Testen

Das LCD Kontrollfeld ist so gebaut, da� man es an die 5V interne Stromversorgung im Linux Server anschlie�en kann (rotes Kabel=5V, schwarzes Kabel=Masse=0V). Man sollte die Schaltung jedoch niemals sofort und ungetestet an den Computer anschlie�en. Es k�nnte sein, da� du einen kleinen Fehler beim Aufbau gemacht hast. Die Stromversorgung des Rechners ist sehr leistungsf�hig und ein Fehler k�nnte den Rechner besch�digen und die Schaltung in Rauch aufgehen lassen.
Man sollte zum Testen eine strombegrenzte und elektronisch stabilisierte Laborspannungsquelle benutzen. Nachdem die Versorgungsspannung angeschlossen ist, kann man die Software wie oben angegeben in den EEPROM laden. Sobald das geschehen ist, sollte man einen Lauftext mit "linuxfocus.org" in der LCD Anzeige sehen. Als n�chstes wird die RS232 Schnittstelle angeschlossen:

MAX232 Pin 14 an CTS (DB-9 Pin 8)
MAX232 Pin 7 an RXD (DB-9 Pin 2)
MAX232 Pin 13 an TXD (DB-9 Pin 3)
Man mu� au�erdem DTR, DSR und CD miteinander verbinden (DB-9 Pin 4, 6 und 1)

Das ist auch kurz in dem Schaltplan oben angegeben.

[talking to the LCD panel over the serial line] Bevor man die serielle Schnittstelle benutzen kann, mu� man sie initialisieren. Das Quellcodearchiv, linuxlcdpanel-0.7.tar.gz, enth�lt ein Programm namens ttydevinit, das diese Initialisierung �bernimmt. Falls das Kontrollfeld und COM2 (ttyS1) angeschlossen sind, dann mu� man einmal folgendes Kommando ausf�hren:

./ttydevinit /dev/ttyS1

Nun ist die serielle Schnittstelle im Server initialisiert f�r eine �bertragungsrate von 9600 Baud und du kannst mit dem Kontrollfeld "reden". Dazu �ffnet man zwei xterm Fenster. In einem tippt man "cat /dev/ttyS1" und in dem anderen "cat > /dev/ttyS1". Nun kann man z.B l=11 (LED 1 wird eingeschaltet) oder l=10 (LED 1 aus) eintippen. In dem ersten xterm Fenster sieht man, da� das Kontrollfeld immer auf die Befehle mit "ok" antwortet.
Alle verf�gbaren Befehle sind in der Datei README.commands erkl�rt.

Das Quellcodearchiv enth�lt auch ein Perlscript namens ttytest.pl, das nichts anderes macht, als die rote LED in Abst�nden ein und wieder auszuschalten. Es ist gedacht als ein einfaches Beispielprogramm, in dem man sehen kann, wie das Kontrollfeld angesteuert wird. Du kannst es benutzen, um deine eigenen Programme zu schreiben. Dazu brauchst Du nur Grundkenntnisse in Perl.

Die Watchdog anschlie�en

Die Watchdog ist standardm��ig aus. Man schaltet sie mit dem Befehl w=1 an und man setzt die Zeit mit s=x, wobei x einen Wert zwischen 1 und 255 haben mu�. s=10 setzt den Watchdog-timeout auf 10*16sec=160sec. Das Ansteuerprogramm mu� diesen Wert periodisch setzen, um zu verhindern, da� die Watchdog zuschl�gt. Falls sich der Server irgendwann mal aufh�ngt, dann wird dieser Wert nicht gesetzt, und wenn er auf Null heruntergez�hlt hat, gibt es einen Reset. Linuxserver sind sehr stabil und bleiben fast nie stehen. Wenn es jedoch mal passiert, ist meist niemand da, der den Resetknopf dr�cken k�nnte oder niemand wei�, wo der Server steht, weil er noch nie Probleme gemacht hat.

Die Watchdog ist so gebaut, da� sie nur einmal zuschl�gt. Das verhindet, da� sie w�hrend des vermutlich folgenden Filesystem Check schon wieder zuschl�gt.

Um die Watchdog physikalisch anzuschlie�en, mu� man die zwei Dr�hte finden, die zu dem Resettaster am Server f�hren. Das Relai unserer Watchdog wird parallel dazu angeschlossen.

Wie man die Watchdog benutzt

Die Watchdog stellt sicher, das der Server immer Programme ausf�hren kann. Sie stellt nicht sicher, da� ein Webserver l�uft oder die Datenbank antwortet. Um so etwas zu �berpr�fen, sollte man crontab oder ein anderes Programm benutzen. Man kann recht sicher sein, da� crontab vermutlich funktioniert, weil die Watchdog sicherstellt, da� Software im allgemeinen immer noch ausgef�hrt werden kann.

Man kann z.B ein Script schreiben, das von cronjob regelm��ig ausgef�hrt wird und alle 15 Minuten eine Webseite von dem Webserver herunterl�dt. Es ist jedoch Vorsicht geboten. Ein Webserver kann mit zu vielen Anfragen �berladen sein. In diesem Fall ist es normal, da� er nicht alle beantwortet. Man sollte daher z�hlen, wie oft der Server versagt hat und ihn erst �ber das Script rebooten, falls er z.B die letzten 10 mal nicht geantwortet hat. Hier reicht ein normaler reboot (shutdown -r), ein Reset �ber die Watchdog ist nicht erforderlich.

Abgesehen von den Applikationen sollte man auch den freien Plattenplatz �berwachen. Das folgende Shellscript gibt z.B. nur etwas zur�ck, wenn 80% oder mehr von einer Partition belegt sind.

df | egrep ' (8.%|9.%|100%) '

�ber crontab kann man damit regelm��ig pr�fen, ob noch genug Platz vorhanden ist und eine e-Mail schicken, wenn der Platz knapp wird (corntab verschickt Bildschirmausgaben automatich per e-Mail).

Die Scripte auf dem Server

Fast die gesamte Logik f�r unser Linux LCD Kontrollfeld ist in einem Perlscript namens llp.pl implementiert. Kopiere diese Datei nach /usr/sbin/. Als n�chstest kopiere die Datei ttydevinit nach /usr/bin und die Datei ifconfig_llp.txt (aus dem etc Verzeichnis im Quellcodearchiv) nach /etc. Nun editiere die Datei ifconfig_llp.txt und �ndere die Adressen wie gew�nscht.

NETMASK=255.255.255.0
IPADDR=10.0.0.4
GATEWAY=10.0.0.2

Nun sollte man eine Sicherheitskopie der Datei /etc/rc.d/init.d/network erstellen und dann die Datei etc/network aus dem Quellcodearchiv nach /etc/rc.d/init.d/network kopieren. Dieses Script und die Verzeichnisnamen beziehen sich auf Redhat und Mandrake. Das Script etc/network_all_distributions ist ein etwas einfacheres Script, das f�r alle Distributionen geeignet ist, man mu� jedoch selbst herausfinden, wo in einer gegebenen Linuxdistribution die init-rc Verzeichnise sind. Das ist immer etwas unterschiedlich von Linuxdistribution zu Linuxdistribution.

Editiere nun die Datei /etc/rc.d/init.d/network und �ndere die Zeile

/usr/sbin/llp.pl /dev/ttyS1&,

falls du nicht COM2 benutzt.

Nun kann man

/etc/rc.d/init.d/network start

tippen und das Kontrollfeld f�llt sich mit Leben. Beachte: es ist unproblematisch, die IP Adressen �ber das Kontrollfeld zu �ndern. Sie werden erst beim n�chsten Reboot wirksam. Man kann daher alles austesten und anschlie�end die Werte wieder zur�cksetzen (man kann auch einfach die Datei /etc/ifconfig_llp.txt editieren, um die �nderungen r�ckg�ngig zu machen).

Log files

Das llp.pl Script schreibt ein Logfile nach /var/log/llp.log. Diese Datei wird nur sehr langsam gr��er. Es sollte normalerweise keine Notwendigkeit geben, sie �ber logrotate zu rotieren. Man kann es jedoch machen. Es ist kein post rotate Befehl in logrotate dazu n�tig. Ein Konfigurationseintrag f�r logrotate k�nnte so aussehen:

/var/log/llp.log {
nocompress
monthly
}

Das Log enth�lt Eintr�ge, wenn das System manuell heruntergefahren wird, eine IP Adresse ge�ndert wurde (IP, GW, netmask) oder wenn es einen Watchdog Reset gab. Naturgem�� kann man den Watchdog Timeout nicht loggen, wenn er passiert. Er wird beim n�chsten Hochfahren in das Log geschrieben.

Das Kontrollfeld im Betrieb

Hier sind einige Fotos der LCD Anzeige. Es sind nur Beispiele. Die Anzeige verf�gt �ber wesentlich mehr M�glichkeiten und man kann seine eigenen Sachen hinzuf�gen.

Das Hauptmen�. Es zeigt einen Namen (Linuxfocus in diesem Fall) und die Uptime sowie CPU load. Es �ndert sich periodisch von selbst.
[main]

Das IP Konfigurationsmen�
[IP configuration menu]

Ein Beispiel, wie die IP Adresse gerade ge�ndert wird.
[change IP]

... und wie die Gateway Adresse (default route) ge�ndert wird
[GW]

Zusammenfassung

[the final panel] Um dieses Kontrollfeld zu bauen, ist etwas an Hobbyelektronikgeschick n�tig, aber es ist keine komplizierte Schaltung. Dieses Linux Kontrollfeld bietet mehr Funktionen als jedes andere LCD Bedienfeld, das ich bisher gesehen habe, es ist sehr allgemein gehalten und preiswert.

Frohes l�ten :-)

Referenzen