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