Parport

Aus Walterschlag

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Beschreibung

Mit Hilfe der parallelen Schnittstelle eines PCs kann man sehr einfach eine Verbindung zur Aussenwelt herstellen. z.B. kann man damit über ein Relais eine 230V Steckdose ein- und ausschalten. Oder gleich mehrere. (bei den - relativ teuren - Elektronischen Relais benötigt man dafür nicht einmal eine Stromversorgung...) Es sind (in der einfachsten Version) 8 Ausgänge, und 5 Eingänge vorhanden, von denen ist aber einer invertiert. Auch ein Analog-Digitalwandler kann angesprochen werden, soferne man nur selten Werte ausliest, und nur wenige Messwerte (über der Zeit gesehen) benötigt...

Damit ist es z.B. möglich, über einen Knopf auf der Homepage einfach eine Steckdose aus- und einzuschalten. Oder das Licht geht an, wenn jemand auf die Webcam zugreift (damit man auch was sieht...)


Parallele Schnittstelle unter Linux

Dafür gibts ein Programm im Internet.

Heisst “parport_ctrl”.

Das kann aber nicht recht viel.

z.B. keine Eingänge einlesen und so.

Drum hab ich es 2004 umgeschrieben.


http://downloads.walterschlag.net/parallele.zip


Hilfe von parport_ctrl

Paralle Port Control Program version 0.4
This Program Can Control Paralle Port Data Line From Pin 1 to pin 8.
It Set Data Pin On (+5v) or Off
Use This Program to Contral The PARALLE PORT RELAY CONTROLLER.
Or You Can Just Use Tt For Fun!
 
 
Userage: paralle -pin on/off -p port
 
       -h --help                 this help file
       -e                        extended help (pinout etc)
       -p port                   the default port is 0x378
       -a all on/off             turn all Data Pin on or off
       -1 on/off                 turn Data 1 on or off
       -2 on/off                 turn Data 2 on or off
       -3 on/off                 turn Data 3 on of off
       -4 on/off                 turn Data 4 on or off
       -5 on/off                 turn Data 5 on or off
       -6 on/off                 turn Data 6 on or off
       -7 on/off                 turn Data 7 on or off
       -8 on/off                 turn Data 8 on or off
       -o                        output all Pins

modifyed 2004-11-30 by Sigi (hollari - at - gmx.at)

parport_ctrl -e


Paralle Port Control Program version 0.4 

EXTENDED HELP for parport_ctrl (about status etc)
 

(EXAMPLE OUTPUT) :

11001001 11111110
|||||||| |||||||\- Busy       (Pin 11) (inverted !)
|||||||| ||||||\-- Acknoledge (Pin 10)
|||||||| |||||\--- Paper Out  (Pin 12)
|||||||| ||||\---- Select     (Pin 13)
|||||||| |||\----- Error      (Pin 15)
|||||||| ||\------ unused
|||||||| |\------- unused
|||||||| \-------- unused
||||||||
|||||||\---------- Data 8  (Pin 9)
||||||\----------- Data 7  (Pin 8)
|||||\------------ Data 6  (Pin 7)
||||\------------- Data 5  (Pin 6)
|||\-------------- Data 4  (Pin 5)
||\--------------- Data 3  (Pin 4)
|\---------------- Data 2  (Pin 3)
\----------------- Data 1  (Pin 2)
 

0 = off (0V) 1=on (5V)
modifyed 2004-11-30 by Sigi (hollari - at - gmx.at)

parport_ctrl -o

11110000 00011110

So kann man über ein php script was steuern

Beispiel; so könnte eine solche Ausgabe aussehen : http://80.122.149.196/parport/

parport_special

/usr/sbin/parport_ctrl -o | awk '
{
 for(i=1;i<=8;i++)
 {
  if(match(substr($0,i,1),"0"))
   xy="on";
  else
   xy="off";
  printf("<a href=test.php?pin=%d&tog=%s>%s</a>",i,xy,substr($0,i,1));
 }
 for(i=9;i<=17;i++)
 {
  printf("%s",substr($0,i,1));
 }
}
'
echo ""

test.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Fernsteuerungsseite</title>
</head>
<body>
 Hallo !
 Auf dieser Seite kann man die einzelnen Pins der
 Parallelen Schnittstelle am Server ein- und ausschalten.
 Auch die Eingänge werden angezeigt.
 <?php
 // Als root ausführen : chmod +s /usr/sbin/parport_ctrl
 $pin=$_GET["pin"];
 $tog=$_GET["tog"];
 if ( $pin>0 ) {
  system("/usr/sbin/parport_ctrl -" . $pin . " " . $tog);
 }
 system("./parport_special");
 ?>
 |||||||| |||||||\- Busy       (Pin 11) (inverted !)
 |||||||| ||||||\-- Acknoledge (Pin 10)
 |||||||| |||||\--- Paper Out  (Pin 12)
 |||||||| ||||\---- Select     (Pin 13)
 |||||||| |||\----- Error      (Pin 15)
 |||||||| ||\------ unused
 |||||||| |\------- unused
 |||||||| \-------- unused
 ||||||||
 |||||||\---------- Data 8  (Pin 9)
 ||||||\----------- Data 7  (Pin 8)
 |||||\------------ Data 6  (Pin 7)
 ||||\------------- Data 5  (Pin 6)
 |||\-------------- Data 4  (Pin 5)
 ||\--------------- Data 3  (Pin 4)
 |\---------------- Data 2  (Pin 3)
 \----------------- Data 1  (Pin 2)
 
<a href="test.php">Refresh</a>

Hardware, um was zu schalten

Um überhaupt einmal zu sehen, ob grundsätzlich alles funktioniert, kann man einfach z.B. eine LED mit Vorwiderstand zwischen einem der Ausgänge, und Masse anschliessen. Mit obrigem Programm muss man diese nun ein- und ausschalten können. Eine Andere Möglichkeit ist es, z.B. Pin 9 und 10 miteinander zu verbinden; schaltet man nun den entsprechenden Ausgang ein- und aus, dann sieht man am Eingang den gleichen Bit-Wechsel.

Als nächstes sollte man sich überlegen, was man überhaupt schalten möchte, wieviel Leistung das braucht, und - natürlich - wieviele Augänge man haben möchte.

Selbstverständlich lassen sich auch Gleichstromverbraucher schalten, aber am interessantesten sind sicher 230V Geräte; z.B. Lüfter, Accesspoints, Ladegeräte etc.

Am einfachsten sind sogenannte "Solid State" Relais. Diese haben am Schalteingang eine LED mit oder ohne Vorwiderstand, diese kann man einfach direkt mit den Ausgängen der Schnittstelle verbinden. Ausgangsseitig findet man zumeist einen Thyristor, welcher einfach in die 230V Seite eingeschleift wird. Leider sind solche Relais vorallem für grössere Leistungen relativ teuer.

Die andere Möglichkeit ist es, mit einem Transistor ein mechanisches Relais zu schalten. Dafür benötigt man aber in jedem Fall eine zusätzliche Spannungsversorgung z.B. die 12V von einem Laufwerk-Stromstecker direkt aus dem PC.

Prinzipschaltung :

Möchte man mehr Relais schalten, empfiehlt es sich, gleich ein IC zu nehmen, das gleich alle Bauteile - bis auf die Relais beinhaltet. Das bekannteste ist verm. der "ULN2803" (5Stk. ca. 3 Euro) mit 8 Ausgängen; es gibt auch eine Version mit 7 :

Hardware, um was einzulesen

Prinzipiell hängt es einmal davon ab, was man am Eingang überhaupt erkennen will. Da die meisten parallelen Schnittstellen sowieso "Pullup" Widerstände am Eingang verbaut haben, kann man z.B. einen Schalter einfach zwischen Eingang und Masse anschliessen. Taster würden auch gehen, allerdings ist es dafür notwendig, den Eingang periodisch, und relativ häufig abzufragen (zumindest 10x pro Sekunde).

Ich hab eine Schaltung gebaut, damit der Server erkennen kann, ob (vor der USV) Strom da ist, oder nicht. Ein altes Handy-Ladegerät, ein Transistor, eine LED und ein paar Widerstände; das wars :


Ansteuerung :

# alle Ausgaenge einschalten, damit der Adapter Strom hat :
parport_ctrl -a on
# Muesste an 13. Stelle in der Ausgabe stehen (Pin 15)
x=$(parport_ctrl -o | cut -b 13-13)
# Das kann man damit uebepruefen : parport_ctrl -e

Mehr Ausgänge

Wenn man mehr Ausgänge benötigt, dann kann man das mit dem Schieberegister 74HC595 recht elegant lösen. Pro IC erhält man 8 Ausgänge, es sind prinzipiell beliebig viele kaskadierbar. Das IC gibts z.B. beim RS-Components 25 Stück für ca. 11 Euro. Ausserdem werden nur 3 Ports am Printer-Port benötigt; die anderen kann man - nach wie vor - frei verwenden.

Mehr Eingänge

Auch mehr Eingänge können relativ einfach realisiert werden. Bei Gelegenheit gibts auch dazu einen Schaltplan... Nur soviel : dafür braucht man das Gegenstück zum obrigen IC : 74HC597. Kostenpunkt : 4 Euro für 10 Stk. oder 90 Cent f. 1 Stk.


Diverse Links ins Internet mit anderen Ideen, etc

http://www.geocities.com/dsaproject/computers/lpt_extender_expander.html#LPT_EXPANDER


Linux

Persönliche Werkzeuge