Dieser Artikel ist älter als zwei Jahre und womöglich veraltet!

Elektronik über den LPT-Port steuern

Öfters möchte man einen kleinen oder auch größeren Schaltkreis über den PC steuern, wäre da nicht die komplizierte Umsetzung mit einem geeigneten Mikrocontroller und der benötigten Software.

Doch es geht viel einfacher: Der parellele Port, auch LPT-Port genannt, steht auf den meisten PC zur Verfügung und kann Kinderleicht dazu verwendet werden verschiedenen Pins einzeln mit Spannung zu versorgen.

Hardware

Port des parallelen Anschlusses

Dieser Anschluss, der vormals DER Standard für den Anschluss eines Druckers war, lässt sich für die Steuerung eines Schaltkreises verwenden indem man einen Draht in einen der Pins 2-9 und einen Draht in einen Pin von 18 bis 25 steckt.

Die Pins 2 bis 9 können einzeln vom PC mit Spannung geschaltet werden und stellen eine (Steuer-)Spannung von ca. 5 V bereit. Diese Spannung kann sollte mit einem Transistor verwendet werden, um über einen Steuerstromkreis den Arbeitsstromkreis mit (nahezu) beliebiger Spannung zu betreiben.

Außerdem kann über die Pins 10-13 ein Signal enpfangen werden, was in diesem Fall bedeutet, dass der Stromkreis geschlossen ist und Strom von den Pins 18-25 zu den Pins 10-13 fließt.

Ein LPT-Kabel, das in meinem Fall einen alten Drucker mit Daten versorgte, verlegt den Anschluss bequem nach vorne und erspart einem so manchen Schlag mit dem Kopf gegen die Tischplatte.

Software

Beispiel eines TCP-Clients zum Steuern einer LED:

Beispiel GUI

Für das einfache Anlegen einer Spannung auf einem Pin empfehle ich das Programme lptout.exe. Für komplexere Aufgaben ist jedoch die Klasse inpout32.dll bzw. inpout64.dll geeignet. Da ich keine Rechte für die genannten Programme besitze, möchte ich nicht auf einen Download verlinken, doch eine Google-Suche bringt einem schnell ans Ziel.

Ich habe mir für leichtere Handhabung eine kleine C#-Klasse geschrieben:

 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Text;
 5using System.Runtime.InteropServices;
 6
 7namespace WindowsFormsApplication1{
 8
 9	public class LPTController{
10
11		[DllImport("inpout32.dll")]
12		private static extern UInt32 IsInpOutDriverOpen();
13
14		[DllImport("inpout32.dll")]
15		private static extern void Out32(short PortAddress, short Data);
16
17		[DllImport("inpout32.dll")]
18		private static extern char Inp32(short PortAddress);
19
20		[DllImport("inpout32.dll")]
21		private static extern void DlPortWritePortUshort(short PortAddress, ushort Data);
22
23		[DllImport("inpout32.dll")]
24		private static extern ushort DlPortReadPortUshort(short PortAddress);
25
26		[DllImport("inpout32.dll")]
27		private static extern void DlPortWritePortUlong(int PortAddress, uint Data);
28
29		[DllImport("inpout32.dll")]
30		private static extern uint DlPortReadPortUlong(int PortAddress);
31
32		[DllImport("inpoutx64.dll")]
33		private static extern bool GetPhysLong(ref int PortAddress, ref uint Data);
34
35		[DllImport("inpoutx64.dll")]
36		private static extern bool SetPhysLong(ref int PortAddress, ref uint Data);
37
38		private bool _X64;
39		private short _PortAddress;
40
41		public LPTController(short PortAddress){
42			_X64 = false;
43			_PortAddress = PortAddress;
44		
45			try{
46				uint nResult = 0;
47				try{
48					nResult = IsInpOutDriverOpen();
49				}
50				catch (BadImageFormatException){
51
52				}
53				if (nResult == 0){
54					throw new ArgumentException("Unable to open InpOut32 driver");
55				}
56			}
57			catch (DllNotFoundException){
58				throw new ArgumentException("Unable to find InpOut32.dll");
59			}
60		}
61		
62		public void Write(short Data){
63			Out32(_PortAddress, Data);
64		}
65
66		public byte Read(){
67			return (byte)Inp32(_PortAddress);
68		}
69	}
70}

Mit dieser Klasse kann man einfach den Zustand Auslesen und ihn ändern:

1LPTController lpt = new LPTController(888);
2
3if(lpt.Read() == 255){
4	lpt.Write(0);
5}
6else{
7	lpt.Write(255);
8}

Hinweis

Natürlich geschieht das alles auf Ihre eigene Gefahr und ich übernehme keine Haftung für jedwede Schäden an Gerät und Gesundheit. 230V haben hier nichts verloren!!!

Update 13.03.2016: Natürlich muss es der parallele und nicht der serielle Port.

Weitere Artikel

My toothbrush streams gyroscope data

Since a few month I own an electrical toothbrush from Phillips called Sonicare HX992B. It connects to an mobile App using Bluetooth that tells you how well you brushed your teeth, shows the orientation in real-time, and also notifies you when to change the brush for a new one. I was curious how this …

Johannes Mittendorfer
Johannes Mittendorfer

Apps für Samsung Smart TVs analysieren

Zurzeit sind Fernseher groß in Mode, die sich mit dem Internet verbinden können und die reine Verwendung als Fernseher um weitere Dienste erweitern. Auch Apps kann man auf diesen Geräten installieren und so zum Beispiel Videos aus Mediatheken abrufen oder auf Online-Konten zugreifen. Doch, was …

Johannes Mittendorfer
Johannes Mittendorfer

Ampelschaltung mit Arduino

Da ich mich jetzt im Besitz eines Arduino Mikrocontroller-Boardes befinde, nun ein erster Artikel über dieses faszinierende Stück Technik. Mit einem Arduino kann man einfach Elektronik ansteuern, wie zum Beispiel LEDs, Servos, Temperatursensoren usw., indem man ein Programm am Computer programmiert …

Johannes Mittendorfer
Johannes Mittendorfer