Parallelportansteuerung unter VB
von Julian Habigt
Nutzen
Der Parallelport des Computers bietet die Möglichkeit, externe Geräte durch gezielte Stromimpulse anzusteuern. Wie, das erfahrt ihr in diesem Tutorial!
Viel Spass
Julian Habigt
Was ist der Parallelport?
Aufgabe
Der Parallelport wird meistens auch als Druckerport bezeichnet, da an ihn in den Anfängen der Computer meist nur der Drucker angeschlossen wurde. Heutzutage wird er Dank seiner Flexibilität und einigermaßen aktzeptablen Geschwindigkeit, auch bei anderen Peripheriegeräten, wie z.B. Scannern, externen Massenspeichern, Netzwerken (oder auch anderer Datenübertragungen), verwendet.
Aufbau
Er besitzt 8 digitale Ausgänge und 5 digitale Eingänge. Die Signalpegel werden durch High- oder Lowzustände angegeben (5 und 0 Volt). Die Ausgänge sind mit max. 20 mA (je nach Gerätetyp) belastbar (bei grösseren Lasten müssen Leistungstransistoren oder Relais nachgeschaltet werden). Alle Ausgänge sind vollkommen unabhängig voneinander ansteuerbar.
Ansicht
Der Parallelport ist an der Computerseite meist mit einer 25 poligen Sub-D Buchsenleiste vertreten, an vielen Druckerkabeln befinden sich an deren Ende oft 36 polige Centronicstecker. Hier die Pinbelegung:
Abbildung 1: Vorderansicht
|
|
Grundlagen der Parallelportprogrammierung unter VB
Die InpOut32.dll
Wie für so viele Dinge gibt es auch für die Ansteuerung des Parallelportes unter VB keine Funktion. Während sich bei QBasic die Programme für den Parallelport mit dem Befehl OUT [Adr.], [Wert] sehr einfach und schnell realisieren ließen, sucht man diesen Befehl unter Visual-Basic vergeblich.
Eine Dll muss also wieder einmal dafür herhalten. Besonders gut geeignet zur Druckerportansteuerung aber auch zur Ansteuerung eines jeden anderen Ports ist die Datei "input32.dll" geeignet. Ich habe dazu schon einmal ein Modul vorbereitet, mit dem man einfach in seinem Hauptprogramm mit den Befehlen INP und OUT (wie unter QBasic) den Port ansteuern kann.
Deklaration
'inpout32.bas 'Inp und Out Deklarationen Public Declare Function Inp Lib "inpout32.dll"Alias _ "Inp32" (ByVal PortAddress As Integer) As Integer Public Declare Sub Out Lib "inpout32.dll"Alias "Out32" _ (ByVal PortAddress As Integer, ByVal Value As Integer)
Parallelport ansprechen
Die Adresse des Parallelports hat bei LTP1 den Hexadezimalwert h378. Der Wert gibt die Zustände der Datenleitungen an, so wird z.B. Datenleitung 0 mit dem Wert 1 angesteuert, Leitung 2 hat den Wert 4. Also immer 2^n (n=Datenleitung 0 - 7) . Um mehrere Datenleitungen anzusteuern kann man einfach die Werte addieren. Um alle auszuschalten ist es der Wert 0. Beim Einlesen funktioniert das ganze eigentlich ebenso, nur wird dazu der Befehl Wert = INP [Adr.] verwendet.
Parallelport-Adressen
Stefan Maag hat sich mit den möglichen Adressen näher beschäftigt und eine Klasse zum einfacheren Handling und zur Überprüfung des Parallelports zur Verfügung gestellt.
Als Quellen dienten ihm:
- www.activevb.de - Tutorials
- MSDN Library Juli 2001, Microsoft
- Jan's Parallel Port FAQ, http://www.logix4u.cjb.net
- Interfacing the Standard Parallel Port, http://www.beyondlogic.org
Problemfall Windows 2000 / NT
Für die Betriebssysteme Windows 2000 und Windows NT gibt es nun eine spezielle Version der "Inpout32.dll". Diese Dynamic Link Library wurde uns freundlicherweise zur Verfügung gestellt von http://www.logix4u.cjb.net/.
Beispiele zum Download finden sie hier:
Beispiel + inpout32.dll als Download [24277 Bytes]
Sourcecode inpout32.dll (C++) als Download [125737 Bytes]
Eine Beispielschaltung
Wir haben nun schon einige Programme gesehen und kennen die Grundeigenschaften des Parallelports. Doch was bringen uns die tollsten Programme und Codes, wenn wir sie nicht ausprobieren und testen können? Deshalb nehmen wir uns in diesem Kapitel einige Schaltungen vor.
Zunächst wollen wir einmal eine sehr einfache Schaltung aufbauen, damit wir unsere Programme testen und damit auch schon kleinere Lasten betreiben können. Wie wir im oberen Kapitel gelesen haben, halten die Ausgänge des Parallelports eine maximale Strombelastbarkeit von 20 mA aus. Das reicht uns schon einmal um eine LED damit zu betreiben.
Dazu schliessen wir einfach einmal eine Leuchtdiode an den ersten Ausgang des Parallelports an. Wir haben oben aber gelesen, dass der Hi Pegel eines Ausgangs bei 5V liegt. Dies ist für eine normale Leuchtdiode mit einer Stromaufnahme von 20mA und einer Betriebsspannung von 2V zu viel. Also rechnen wir mit Hilfe des Ohm'schen Gesezes den Wert des Widerstands aus, den wir vor die LED schalten müssen damit diese nicht zerstört wird. Wir rechnen nun (wer des Ohmsche Gesetz nicht kann, der kann ja mal seine alten Physikbücher zu Hilfe ziehen oder den großen Bruder fragen ;-)):
3V (wegen 5V-2V=3V Unterschied) / 0,02 A = 150 Ohm
Die fertige Schaltung sieht demnach so aus:
Abbildung 2: Schaltschema
Der Befehl zum Ansteuern des Ports (im Beispiel die Dateinleitung 0) würde dann so aussehen:
'inpout32.bas '&h378 ist die Hexadezimaladresse des Parallelports '1 steht für Datenleitung 0 Out &H378, 1
Wem die 20mA des Ports nicht ausreichen, weil er z.B. einen größeren Motor betreiben will oder mit dem Laptop die Nachttischlampe steuern will, der kann Anstatt der LED auch ein Relais anschliessen (Strohmaufnahme des Relais beachten und eventuell eine Schutzdiode wegen der Rückspannungen vorsehen!!!).
Dass man mit dem Parallelport auch durchaus größerer Projekte realisieren kann, soll dieses Foto einer Schaltung, die ich einmal gebaut habe, zeigen.
Abbildung 3: Beispiel
Abschliessend bleibt nur noch zu sagen: Probiert einfach ein bisschen herum!
Weiteres Beispiel
Ingo Schick hat sich ebenfalls mit dieser Thematik befasst und ein Projekt geschrieben.
Weitere Informationsquellen
Christof Rueß gibt auf seiner Homepage unter anderem eine Anleitung zur Ansteuerung eines LCD-Displays. Mit einigen Erläuterungen und Visual-Basic-Quellcode.
http://www.hobbyelektronik.orgDownloads
Ein Programm bei dem man mit mehreren Checkboxen die Ausgänge des Ports steuern kann
Ein Programm das im 500 ms Takt die Eingänge des Parallelports abfragt
Download inpout32.dll ©by Jan Axelson
Ihre Meinung
Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.