LinuxNetMag
LCD-Display
Archiv | Home
Inhalt
   
LinuxNetMag #5

  Software
 Aktuell
kurz vorgestellt
SuSE7.0 Testbericht
Mozilla Preview
 Applikationen
Videoschnittsystem
Windows X-Server
Windowmanager
 3D
 Spiele
  
 

Hardware

TV-Karte
Wheel-Mouse
Webcam selbstgebaut
  
 

Netzwerk

Web2Fax-Gateway
Apache mit SSI
Booten übers Netz
Webcam-Streaming
offline Mailingliste
Audio-Streaming
  
 Wissen
Abenteuer ReiserFS
Linux-Devices
LinuxExpo Brasilien
  
 

Sonstiges

Mailing-Liste
Gästebuch
Artikelliste
Unterstützen Sie uns !
zurück zur Hauptseite



Druckversion


  LCD Wer einen Linux-PC ohne Monitor als Server laufen hat aber trotzdem immer über den momentanen Zustand des Rechners informiert sein möchte, für den eignet sich Einsatz eines LCD-Displays.

LCD & Linux

Es wurde schon viel über den Anschluß eines LC-Displays an Linux-Rechner geschrieben. Wir wollen dieses Thema nicht zum endlosesten Mal aufgreifen.
Stattdessen präsentieren wir hier eine leicht andere Lösung, indem wir zeigen, wie manmittels geeignetem Zusammenspiel von LCD und jslaunch nicht nur eine Statusanzeige anzeigen lassen kann, sondern auch interaktiv den PC steuern kann.

Wir werden zeigen, wie man mit Hilfe des Programms lcd von Nils Färber ein LCD am Parallelport ansteuern kann und gleichzeitig über vier Tasten, die vom Programm jslaunch abgefragt werden, sich ein eigenes kleines Menü schaffen kann, mit dem man verschiedene Befehle ausführen kann; und das alles ohne einen nennenswerten Programmieraufwand.

Das Display

Das Programm lcd ist geeignet, um Displays mit dem Chip vom Typ Hitachi HD44780 anzusteuern.
Das Display ist z.B. bei Conrad-Elektronik erhältlich und kostet ind der Asuführung 20 Zeilen und 4 Spalten ca 80,- DM ohne und ca. 120,- DM mit Hintergrundbeleuchtung (Man sollte allerdings bei dunklen Räumen auf jeden Fall ein Display mit Hintergrundbeleuchtung nehmen, da das Display ansonsten nur schlecht lesbar ist).
Das Display wird an den Parallelport angeschlossen und benötigt dafür folgende Verkabelung:

     25 pin          LCD
        SUB D           Panel   Pin
        ---------------------------
        1               EN      6    
        2               DB1     7    
        3               DB2     8    
        4               DB3     9    
        5               DB4     10   
        6               DB5     11   
        7               DB6     12   
        8               DB7     13   
        9               DB8     14   
        14              RS      4    
        18-25           GND     -- --+

zusätzlich müssen noch Pin 2 des LCD-Panels an +5V und die Pins 1 und 5 des Displays und die Pins 18 bis 25 des Parallelports an die Erdung geschlossen werden.
Eine gute 5-Volt-Quelle im PC ist das 2-Adrige Floppy-Stromkabel (rotes Kabel für +5V, schwarz für Erdung -- vorher aber nochmal testen!).

Den Kontrast des Displays stellt man mittels eines 100-Ohm-Potentiometers einstellen. Zumeist reicht es aber, den Pin 3 des Displays direkt an die Erdung anzuschließen.

 +5V ---+
         /
         \ <--+
         /    |
         \    |
  GND ---+    +--- VL (Pin 3 - driver input)

Die endgültige Verkabeleung sieht dann folgendermaßen aus:

       25 pin          LCD
        SUB D           Panel   Pin
        ---------------------------
                        GND     1  --+--- \ Connect to
                        +5V     2  --|--- | Gameport
                        R/W     5  --+    |
        1               EN      6    |    |
        2               DB1     7    |    |
        3               DB2     8    |    |
        4               DB3     9    |    |
        5               DB4     10   |    |
        6               DB5     11   |    |
        7               DB6     12   |    |
        8               DB7     13   |    |
        9               DB8     14   |    |
        14              RS      4    |    |
        18-25           GND        --+    |
                                     |    +
                                     ^^^^^^
                        VL      3  -----|

Die Erdung der Pins 18-25 des Parallelportkabels ist äußerst wichtig, ansonsten sieht man auf dem Display nur Flimmernde Zeichen und Kästchen.

Die Treiber

Die Treiber zum ansprechen des LCDs liegen momentan in der Verion 0.152 vor. Allerdings konnte diese Version von uns nicht zum kompilieren gebracht werden, allerdings funktionierte die Vorgängerversion 0.151, die man auch auf dem FTP-Server finden kann.
ftp://ftp.unix-ag.uni-siegen.de/pub/os/linux/drivers/
(Bei der auf Server befindliche Version 0.6.0 handelt es sich um ein gleichnamiges, aber anderes Programm.)
Probieren Sie zuerst, ob die Treiber kompilieren, bevor Sie sich das LC-Display kaufen. Erst nachdem Sie sicher sind, daß die Treiber auch kompiliert werden können, lohnt sich der Kauf des Displays!
Erfolg mit dem kompilieren des Treibers hatten wir nur auf einem System mit 2.2.13-Kernel und einem älteren mit 2.0.36.
Beim aktuellen 2.2.16-Kernel brach LCD-0.151 mit fehlermeldungen ab, aber vielleicht haben Sie ja mehr erfolg.
Vor dem Kompilieren wählt man in der Datei driver/Makefile den zugehörigen Kerel (2.0.x oder 2.2.x) aus. Außerdem muß man in der Datei driver/hardware.h noch die Parallelportadresse einstellen:

driver/hardware.h
 [...]
    #define LCD_ADDRESS 0x0378     /* entspricht lpt1: auf den meisten PCs */
 /* #define LCD_ADDRESS 0x0278  */ /* entspricht lpt2: auf den meisten PCs */
 /* #define LCD_ADDRESS 0x3bc   */ /* auch moegliche paralleport-Adresse   */
 [...]

Entfernen Sie dafür die Kommentarzeichen /* und */.
Falls Sie nicht wissen, welche Adresse der Paralleport hat, schließen sie den Drucker an, laden sie das Druckermodul

>> inmod lp
und schauen Sie sich mittels
>> cat /proc/ioports 
die Adresse an.
Falls Sie ein Display mit einer anderen Größe als 20x4 besitzen, können Sie dies auch unter driver/hardware.h die Anzahl der Spalten und Zeilen einstellen:

driver/hardware.h
 [...]
 #define LCD_COLS 20
 #define LCD_LINES 4
 [...]

Zum kompilieren der Treiber benötigt lcd die Datei /usr/src/linux/include/linux/modversions.h und /usr/src/linux-2.2.13/include/linux/modsetver.h, die allerdings beide beim 2.0.x-Kernel fehlen.
Es reicht allerdings diese beiden Dateien von einem 2.2.x-Kernel einfach in das entsprechende Verzeichnis zu kopieren.(modsetver.h und modversions.h)

Ist alles für das Kompilieren vorbereitet, genügt ein

>> make
im Hauptverzeichnis von lcd.
Danach befindet sich im lcd-Unterverzeichnis driver/ das kompilierte Modul lcd.o, welches zum Ansteuern des LCDs benötigt wird.
Als letztes muß noch die Pseudo-Datei /dev/lcd angelegt werden, über die man dann nachher das LCD ansprechen kann. Dafür fürht man das Skript mkdevice im Unterverzeichnis driver aus (als root).
Als nächstes muß dann die Hardware korrekt angeschlossen werden.

jslaunch

Wir haben bereits in einer früheren Ausgabe über das Jslaunch berichtet (Jslaunch -- PC per Joystick steuern).
In Verbindung mit einem LCD-Display sind allerdings die Einsatzmöglichkeiten des Programms noch weitaus umfangreicher.

Das Programm jslaunch überprüft in einstellbaren Zeitintervallen, ob bei einem Joystick, der am Joystickport einer Soundkarte angeschlossen ist, ein oder mehrere Knöpfe gedrückt sind, und führt einstellbare Befehle aus.
Das komfortable am Programm ist, daß es zum Einsatz kein Kernelmodul benötigt um den Joystickport auszulesen, sondern, daß es diese Information direkt auslesen kann, und somit sehr einfach zu installieren ist.
Wegen der hohen Stabilität des Programms eignet es sich, als eine Art Notfall-Resety eingesetzt zu werden, falls einige wichtigen Komponenten des Systems abgestürzt sind (z.B. Tastatur und/oder Netzwerkkarte), um den PC dann immer noch ohne Hard-Reset neu starten zu können.
Am einfachsten ist es, sich irgendwoher einen defekten Joystick zu beschaffen, und derart zu zerlegen, daß man nur noch das Kabel und die Taster übrig läßt.
Wenn das Display ein professionelles Aussehen haben sollte, empfiehlt es sich, die Feuerknöpfe gegen richtige Taster auszutauschen (In jedem Elektronikfachhandel erhältlich).
Beim Programm jslaunch selbst fällt keinerlei große Arbeitan, außer es zu kompilieren (>> make).

erster Test

module laden /sbin/insmod lcd (als root im Unterverzeichnis driver)
->nichtblinkender Coursor in der linken oberen Ecke
Ein Testprogramm starten >>tools/test ??
alles klar? dann prolcd testen /tools/prolcd/... (schon kompiliert)
Treiber entladen mit /sbin/rmmod lcd
jslaunch starten:
 >> jslaunch -r 1 'echo "1"' -r 2 'echo "2" ...
-> merken, welchen Knopf welche Nummer
Wenn alles funktioniert einbauen (in PC oder in ein externes Gehäuse)
Kabel wieder zurück ins Gehäuse führen (oder wenn in Blende , dann den Port
abschrauben)

Das Menü

Anlegen von /usr/local/etc/display/

->ablegen von own (Rechte an +x)
own
 #!/bin/sh

 # Just a dumb script copying some nice system information values
 # to our LCD device
 #
 export SLEEP=10
 #Bei 1,2,4 Menu -- Bei 3 reboot
 echo -n -e "\33c" > /dev/lcd
 echo -n  -e "\33h" > /dev/lcd
 echo -e "    " > /dev/lcd
 echo -e "  Bitte warten ..." > /dev/lcd
 echo -e "  ==============" > /dev/lcd

 killall jslaunch
 sleep 4
 /usr/local/jslaunch-2.0/jslaunch  -r 1 "killall own && /usr/local/etc/display/menu"\ 
 -r 3 "killall own && /usr/local/etc/display/reboot"\ 
 -r 4 "killall own && /usr/local/etc/display/menu"\ 
 -r 2 "killall own && /usr/local/etc/display/menu"&
 
 echo -n -e "\33c" > /dev/lcd
 
 while true; do
  echo -n -e "\33c" 
  echo -n -e "\33h"

 export WEB=$(apachectl status | grep reques | cut -d " " -f 4) .
 export FTP=$(ftpcount | grep local | cut -d " " -f 22)
 export MEM=$(cat /proc/meminfo |fgrep "MemFree"|cut -b 13-24)
 export UPT=$(uptime | cut -d "," -f 1)
 export USER=$(uptime | cut -d "," -f 2)
 export LOAD=$(cat /proc/loadavg | cut -d " " -f 1)
 export ZIP=$(df | grep "zip" | cut -d "%" -f 2,2)
 export LOCAL=$(df | grep "local" | cut -d "%" -f 2,2)
 export CDROM=$(df | grep "cdrom" | cut -d "%" -f 2,2)
 export YAMAHA=$(df | grep "yamaha" | cut -d "%" -f 2,2)
 export ZIP_P=$(df | grep "zip" | cut -b 50-53)
 export LOCAL_P=$(df | grep "local" | cut -b 50-53)
 export YAMMAHA_P=$(df | grep "yamaha" | cut -b 50-53)
 export CDROM_P=$(df | grep "cdrom" | cut -b 50-53)
  echo -e $UPT
   echo -e "MEM "$MEM
   echo -e "HTTP "$WEB" --  FTP" $FTP" "
   echo -e  $USER " load:" $LOAD
   sleep $SLEEP
 
  echo -n -e "\33c"
  echo -n -e "\33h"
  echo -e  $ZIP_P $ZIP
  echo -e  $LOCAL_P $LOCAL
  echo -e  $CDROM_P $CDROM
  echo -e  $YAMAHA_P $YAMAHA
  sleep $SLEEP

 #SCREEN 3
  echo -n -e "\33c"
  echo -n -e "\33h"

  export DRUCK=$(lpq | grep bytes | cut -b 8-18 | tail -n 6)
  echo -e "Druckaufträge:"
  echo -e $DRUCK
  sleep $SLEEP

 #SCREEN 4
  echo -n -e "\33c"
  echo -n -e "\33h"

 export ETH_R=$(cat /proc/net/dev | grep eth0 | cut -b 8-14)
 export ETH_S=$(cat /proc/net/dev | grep eth0 | cut -b 36-43)
 export IPP_R=$(cat /proc/net/dev | grep ippp0 | cut -b 8-14)
 export IPP_S=$(cat /proc/net/dev | grep ippp0 | cut -b 36-43)
 export IPP_E=$(cat /proc/net/dev | grep ippp0 | cut -b 44-48)
 export ETH_E=$(cat /proc/net/dev | grep eth0 | cut -b 44-48)
   echo -e "      eth0   ippp0"
   echo -e "rec " $ETH_R" "$IPP_R
   echo -e "sen " $ETH_S" "$IPP_S
   echo -e "err      " $ETH_E"    "$IPP_E
  sleep $SLEEP
 done > /dev/lcd
->own als statusanzeige (aber auch procload oder anderes script)

alternatives own
alternative

Menu 1

menu1
 #!/bin/sh       
 killall jslaunch
 killall sleep
 
 echo -n -e "\33c" > /dev/lcd
 echo -n -e "\33h" > /dev/lcd
 echo -e "    " > /dev/lcd
 echo -e "  Bitte warten ..." >/dev/lcd
 echo -e "  ==============" > /dev/lcd
 sleep 4
 export VERZ=/usr/local/etc/display 
 echo -n -e "\33c" > /dev/lcd
 echo -n -e "\33h" > /dev/lcd
 echo "   --== Menu ==--" > /dev/lcd
 echo " 1 Zip-Modul laden" > /dev/lcd
 echo " 2 Zip  entladen" > /dev/lcd
 echo " 3 weiter" > /dev/lcd
 /usr/local/jslaunch-2.0/jslaunch\ 
  -r 1 "killall menu && /usr/local/etc/display/zip_on"\ 
  -r 3 "killall menu && /usr/local/etc/display/reboot"\ 
  -r 4 "killall menu && /usr/local/etc/display/cdrom"\ 
  -r 2 "killall menu && /usr/local/etc/display/zip_off" &
 #echo "jsl gestartet"
 sleep 15
 /usr/local/etc/display/own

Und beim extre-Knopf (nicht notwendig) Reboot

reboot
 #!/bin/sh       
 killall jslaunch
 killall sleep
 
 echo -n -e "\33c" > /dev/lcd
 echo -n -e "\33h" > /dev/lcd
 echo -e "    " > /dev/lcd
 echo -e "  Reboot now ..." >/dev/lcd
 echo -e "  ==============" > /dev/lcd
 echo -e "    Bis bald ;-) "> /dev/lcd
 sleep 4
 reboot

noch weitere Menüs einführbar
->Erklärung, warum SLEEP-Zeit

automitisch starten

/sbin/init.d boot.local oder rc.d/...


http://www.home.unix-ag.org/nils/lcd.html Homepage des Programms lcd
http://www.linux-magazin.de/ausgabe/1999/08/LCD/lcd.html Artikel des Programmierers von lcd im Linux-Magazin
ftp://sunsite.org.uk/Mirrors/contrib.redhat.com/libc6/i386/ Leider hat jslaunch keine Homepage
http://lcdproc.omnipotent.net/ Treiber zum Ansteuern eine großen Anzahl von Displays über den serielle Port
http://www.mv.com/ipusers/cdwalker/lpt_driver.html Weitere Treiber zum Anschliessen eines Displays an den Druckerport


Platz für Kommentare & Fragen:
(selbst eintragen)

 

Weitere Ausgaben Linux NetMag
[ #1 | #2 | #3 | #4 | Main ]