Christoph's - Parallel Port

Ein Interface PC - Relaisplatine

Disclaimer

Im folgenden Text könnten sich ein paar Fehler eingeschlichen haben. Naja, eigentlich enthält der Text mit an Sicherheit grenzender Wahrscheinlichkeit mindestens einen Fehler. Also: Jedes Bauteil mindestens zweimal prüfen, jede Verbindung nochmal durchchecken usw. bevor das Ding an den PC gesteckt wird.

Was braucht man also?

Als erstes: Mindestens acht Transistoren (Typ BC557A hat sich als ausreichend erwiesen, baugleiche gehen aber auf jeden Fall auch). Warum mindestens? Naja, ein Transistor ist so verdammt hitzempfindlich, was sich vor allem beim Löten negativ auf seine Gesundheit auswirken könnte...

Dreizehn Relais. Ich hab hier monostabile vierfach-Wechsler genommen, Hauptsache ist aber, daß sie bei 5V (oder bissl weniger) schalten. Allzuviel muß auch nicht dranhängen, also ist man mit 1A auch gut bedient.

Jede Menge Kabel in ausreichender Länge, möglichst in zwei bis drei verscheidenen Farben.

Dann noch einen Parallelport-Stecker (25pol. Sub-D). Mit dem wird die Schaltung an den PC gestöpselt. Am besten ersetzt man die Innengewindeschrauben, die da normalerweise dran sind, mit ganz normalen, sonst passts nicht so gut in die Buchse.

Eine Stromweiche für (5V) CPU-Lüfter. Wenn man keine zur Hand hat zweigt man einfach von +5V und 0V (rot und schwarz) je ein Kabel ab (siehe Bild).

bc557a
relais
kleinzeug
LPT connector
5V-Weiche

Also, wie geht man am besten vor? Als erstes macht man sich einen Schaltplan. Der könnte (ungefähr!) so aussehen:

wiring diagram
Der Kondensator kann man übrigens getrost weglassen. Obwohl ich den fettesten Eumel genommen hab, der in Reichweite war, hab ich immer noch mit Spannungsabriß an der I/O Karte zu kämpfen, wenn mehrere Relais gleichzeitig anziehen. Am besten ists, man lässt nach dem Beschreiben von $378 einfach einen Lesezyklus aus.
Um den PC mit 0/1 Informationen füttern zu können legt man auf die Pins 15,13,12,10,11 (die Reihenfolge geht auf die eigenarige Sortierung durchs BIOS zurück) per Relais entweder +5V oder 0V. Theoretisch würdens auch nur 5V oder nicht 5V tun, zuminsest ich war aber gezwungen das per Relais zu lösen, weil meine Karte sonst mit den Bits wackelt (zuwenig Potentialgefälle am Ausgang). So gehts aber auf jeden Fall. Wichtig dabei ist, bei Pin 11 (bzw. dem fünften Eingang) +5V und 0V zu vertauschen weil der genau umgekehrt schaltet.
Um 0/1 Informationen vom PC der Außenwelt zugänglich zu machen ist schon ein Transistor nötig, um die Spannung im PC nicht abreißen zu lassen (wirkt sich nachteilig auf die Systemstabilität aus :). Man nimmt sich einen Transistor, klemmt 0V an den Kollektor und den Emitter an den Spuleneingang. Der Spulenausgang wird sinnvollerweise mit +5V verbunden und die Transistorbasis an einen der Datenpins des Sub-D Steckers gelegt. Die Datenpins sind in wesentlich sinnvollerer Reihenfolge als die Eingänge, nämlich 2,3,4,5,6,7,8,9. Sehr einprägsam...
Hat man jetzt alles richtig verbunden und - empfehlenswerterweise - die Lötstellen am Stecker mit Heißkleber versiegelt, dann kann man das ganze mal am PC anschließen. Wenn man einen Kondensator zwischen + und - Eingang gehängt hat sollte man die Schaltung übrigens nicht während des Betriebs anhängen, weil der Kondens beim Aufladen unheimlich viel Strom zieht - kann man aber mit einem Widerstand noch abdämmen.

Wie steuert man jetzt das ganze vom PC aus an? Wenn man die Basisadresse seines LPT-Ports weiß, ganz einfach: Angenommen die Basisadresse ist $378, wird auf $378 geschrieben und von $379 gelesen. Beim Schreiben werden natürlich alle 8 Bits benutzt, zum Lesen sind nur die oberen 5 Bits wichtig (Bits 0-2 ignorieren).
Ein bissl Pseudocode (schaltet Ausgang 1 um und zeigt den Status an):
Bit[1]:=1-Bit[0];
Port[WritePort]:=BitsToByte(Bit);
ByteToBits(Port[WritePort],Bit);
for x:=0 to 7 do Write(Bit[x]);
Write('|');
ByteToBits(Port[ReadPort],Bit);
for x:=3 to 7 do Write(Bit[x]);
Writeln; 

Navigation