Die LP_BOX

Gerhard Jüngling, HTL Wien 4, Sommer 2000 (jetzt: HTL Wien 3 Rennweg)

Was ist die LP_BOX

Bei der LP_BOX handelt es sich um eine einfache elektronische Schaltung, die mit der parallelen Schnittstelle eines PC verbunden wird. Sie enthält 8 Leuchtdioden (LEDs) und 5 Taster. Per Software können die Zustände der Schalter abgefragt und die LEDs ein- und ausgeschaltet werden.

Die Schüler sollen mit Hilfe der LP_BOX und den zugehörigen Bibliotheken

.... das Zusammenwirken von Hard- und Software verstehen.
.... mit einer gängigen Programmiersprache binäre Informationen ein-, ausgeben und verarbeiten können.
.... einfache Steuerungsaufgaben selbstständig lösen können.
.... vorhandene Unterprogramme in ein Projekt einbinden können und eigene Unterprogramme entwickeln können.

Mit der LP_BOX können die Schüler bereits im AINF-Unterricht (Angewandte Informatik) die softwaretechnische Lösung einfacher berufsspezifischer Aufgabenstellungen kennenlernen und üben.

Voraussetzungen

Programmierkenntnisse in C bzw. C++
Verwendung von Unterprogrammen, Parameterübergabe
Kenntnisse der modularen Programmierung (PRJ, makefile)
Boolsche Operationen
Datentypen (signed/unsigned, char, int, ...)

Hardware

Die LP_BOX benötigt keine zusätzliche Spannungsversorgung. In den meisten Fällen sind die Ausgangstreiber der parallelen Schnittstelle in der Lage, den Strom für die LEDs zu liefern.
Die parallele Schnittstelle wird im Standard-Modus betrieben.
Die Druckerschnittstelle ist meistens frei, weil üblicherweise via Netzwerk gedruckt wird.
Direkter Hardware-Zugriff muss vom Betriebssystem möglich sein (Windows NT!).
Foto (56k)
Schaltplan
(Quelle: http://www.dage.net/parport.html )   

Literatur und Internet-Ressourcen

Weitere Informationen über die parallele Schnittstelle: Utilities zum Testen der Parallelen Schnittstelle: http://www.fapo.com/utilities.htm

LP_FUNC.LIB

In der Bibliothek LP_FUNC.LIB befinden sich Unterprogramme zur Ansteuerung der LP_BOX.
Header-Datei: LP_FUNC.H
Quellcode: LP_FUNC.CPP
Ein einfaches Lauflicht (LAUFLICH.CPP) demonstriert die Verwendung einiger Bibliotheks-Funktionen.

Win32?

Es gibt eine Erweiterung der Funktionen, damit Ihre Programme auch unter WindowsXP, 2000 laufen.
Verwenden Sie die LP_FUNC32!


Aufgaben für C, C++

Diverse Lauflichter

Es ist ein Lauflicht zu programmieren. Die Leds (von 0 – 7 durchnummeriert) sollen jeweils 1 Sekunde leuchten (p=keine Led, [12]= 1 und 2 gleichzeitig)

012345670123456701234567.....

012345676543210123456765....

0p0p1p1p2p2p3p3p4p4p5p5p6p6p7p7p0p0p1p1p2p2p3p3p4p4p5p5p....

0p0p1p1p2p2p3p3p4p4p5p5p6p6p7p7p6p6p5p5p4p4p3p3p2p2p1p1p0p0p1p1p...

[34][25][16][07][34][25][16][07][34][25][16][07]..., detto mit p

[34][25][16][07][16][25][34][25]..., detto mit p

0[01][12][23][34][45][56][67]7[67][56]...., detto mit p

Erweiterung: Ausgabe eines Musters, das in obiger Form in einer Datei abgelegt wurde.

Programmieren Sie folgendes Lauflicht

Kombinatorische Logik

Q1, Q2, ..., Q8 = f (E0, E1, E2, E3, E4)

Realisieren Sie mit der LP_BOX folgende Funktion: Wenn die rote Taste gedrückt wird, sollen alle roten LEDs leuchten, detto bei grün und gelb. Wird die blaue Taste gedrückt, sollen die beiden äußeren LEDs leuchten, bei schwarzer Taste die mittlere "Ampel" (=rot-gelb-grün). Werden mehrere  Tasten gleichzeitig gedrückt, darf keine LED leuchten.

Allgemein: Gegeben ist entweder ein Boolscher Term oder eine Funktionstabelle

Realisieren Sie mit den ersten drei Schaltern und den ersten drei LEDs folgende Funktionstabelle:
 
Zustand T0 (grün) T1 (gelb) T2 (rot) LED0 (grün) LED1 (gelb) LED2 (rot)
0 0 0 0 1 1 0
1 0 0 1 0 0 1
2 0 1 0 0 1 0
3 0 1 1 1 1 1
4 1 0 0 0 1 1
5 1 0 1 1 1 0
6 1 1 0 0 1 1
7 1 1 1 1 1 0

Schrittsteuerungen

Ablaufsteuerungen in Kombination mit bestimmten Ein- und Ausgaben
Anwendung: Codeschloss
Damit LED 7 (=Türöffner) leuchtet, müssen die Tasten 0..4 innerhalb einer bestimmten Zeit in einer bestimmten Reihenfolge gedrückt werden. (Prellende Tasten berücksichtigen!)
 

Klavier

Ausgabe von Tönen auf dem PC-Lautsprecher durch Tastendruck an der LP_BOX

Reaktionstest

Bei Aufleuchten bestimmter Lampenkombinationen müssen bestimmte Tasten gedrückt werden. Leuchten nur rote LEDs, so muß die rote Taste gedrückt werden. Detto bei gelb und grün. Leuchten LEDs in zwei verschiedenen Farben, so ist die blaue Taste zu drücken, bei drei unterschiedlichen Farben die schwarze Taste.

Tastatur

Durch Drücken der Tasten 0..4 werden die Buchstaben a .. e auf dem Bildschirm ausgegeben.
Gleichzeitiges Drücken der Tasten 0 und 1 beendet das Programm!

ASCII-Ausgabe

sehr einfach. Der ASCII-Code eines Zeichens das auf der PC-Tastatur eingegeben wurde, soll als Bitmuster ausgegeben werden.

Dualzähler

Bei jedem Tastendruck (entweder auf der  LP_BOX und/oder der PC-Tastatur) soll ein Zähler um eins erhöht werden und der Zählerstand als Bitmuster (Dual, Gray-Code, ....) auf der LP_BOX angezeigt werden.
(evtl. auch gleichzeitig Bildschirmausgabe)

Tastenzähler

Es soll ermittelt werden, wieviele Tasten der LP_BOX gedrückt sind. Ausgabe am Bildschirm und im Dualcode an der LP_BOX.
 

Visualisierung, Mausbedienung

Entwickeln Sie ein Programm, das die LP_BOX am Bildschirm darstellt. Gedrückte Tasten sollen hell angezeigt werden. Die LEDs sollen per Mausklick ein- und ausgeschaltet werden.


Beschreibung der Funktionen in LP_FUNC.LIB

Die Funktionen geben nichts am Bildschirm aus und koennen daher universell verwendet werden. Falls ein Fehler aufgetreten ist, kann dies anhand der Rueckgabewerte festgestellt werden.
 

int lp_init(int lptport)

Initialisiert die Ein-Ausgaberoutinen und alle Variablen.
Diese Funktion muss aufgerufen werden, da sonst alle anderen Funktionen eine Fehlermeldung zurueckgeben!
Aufrufparameter:
    int lptport: 1,2 oder 3 steht fuer LPT1, LPT2 oder LPT3
Rueckgabewert (int): Fehlernummer (0...kein Fehler)

char *lp_info()

Liefert Informationen ueber die LP_FUNC Bibliothek
Aufrufparameter: ---
Rueckgabewert (char *): Zeiger auf einen Infostring

char *lp_version()

Liefert Informationen ueber die Version der LP_FUNC Bibliothek
Aufrufparameter: ---
Rueckgabewert (char *): Zeiger auf einen Versionsstring
 

char *lp_errmsg(int status)

Liefert die zu einer Fehlernummer gehörende Fehlermeldung
Aufrufparameter:
   int status: Fehlernummer
Rueckgabewert (char *): Zeiger auf einen Fehlermeldungstext
 

int lp_output(unsigned char outbyte)

Gibt 8 Datenbits an der gewaehlten parallelen Schnittstelle aus.
Aufrufparameter:
   unsigned char outbyte: Auszugebendes Bitmuster
Rueckgabewert (int): Fehlercode
 

int lp_outbit(unsigned char bit_num, unsigned char value)

Setzt oder loescht eines der 8 Datenbits
Aufrufparameter:
   unsigned char bit_num: Nummer des auszugebenden Bits (0..7)
   unsigned char value:   Wert des Bits (0,1)
Rueckgabewert (int): Fehlercode
 

int lp_input0(unsigned char &inbyte)

Liest 5 Datenbits (Bit 3..7) vom Statusregister der parallelen Schnittstelle und legt sie unveraendert in der Variablen inbyte ab, d.h. bei gedrueckter Taste sind die entsprechenden Bits 0, Bit 7 ist invertiert.
Aufrufparameter:
   unsigned char &inbyte: Container fuer einzulesendes Bitmuster
Rueckgabewert (int): Fehlercode
 

int lp_input(unsigned char &inbyte)

Liest 5 Datenbits von der parallelen Schnittstelle und wandelt sie derart um, dass die Bits 0..5 bei gedrueckter Taste 1 sind.
Aufrufparameter:
   unsigned char &inbyte: Container fuer einzulesendes Bitmuster
Rueckgabewert (int): Fehlercode
 

int lp_status()

Gibt den Errorcode der zuletzt aufgerufenen lp_Funktion zurueck.
Rueckgabewert (int): Fehlercode
 

© Gerhard Juengling, HTL Wien 3 Rennweg, Sommer 2000, Oktober 2002