PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Parallelport ansteuern



19-09-2000, 16:22
Wie kann ich den Parallelport ansteuern???

Hat vielleicht jemand ein kleines Beispiel??


Danke

20-09-2000, 15:06
Sicher dass das auch unter Linux geht???

ich dachte unter Linux könnte man nicht direckt auf die Hardware zugreifen.

thommy
20-09-2000, 15:23
Das Beispielprogramm läuft nicht.

Unter Linux greifst Du eigentlich nur über die Gerätedateien auf die Hardware zu und diese verhalten sich dem System gegenüber wie ganz normale Dateien, d.h. Du sprichst sie ebenso an, wie Du es bei Dateien handhabst.

Um also die erste parallele Schnittstelle zu öffnen, verwendest Du "open":

<pre>
...
int fd;
fd = open( "/dev/lp1", O_RDWR );
...
</pre>

Die notwendigen includes erfährst Du aus dem Manual "man 2 open". Das übersetzte Programm sollte der Gruppe "lp" gehören, um die Schnittstelle öffnen zu dürfen, sonst gibts ein "permission denied". Alternativ könntest Du das Programm als Root ausführen oder die Rechte des Devices aufweichen, aber davon ist aus Sicherheitsgründen abzuraten.

Ach ja, um wirklich auf unterem Level IO zu programmieren (z.b. zum Schreiben eines Treibers) verwendet man Befehle wie "outb" und in den seltesten Fällen reinen Assemblercode.

Thomas

20-09-2000, 16:48
Also das öffnen ist ja kein Problem, aber wie kann ich denn jetzt die Leitungen ansteuern???
Wie kann Daten senden oder bestimmen ob STROBE high oder low ist??

ich schätzt mal ich muss das mit ioctl machen.
aber was für Parameter muss ich da angeben??

Vielleicht könnt ihr mir ja noch mehr helfen. Gibt es irgdenwo Infos zu C unter Linux.

Danke

21-09-2000, 00:36
Tach WWG2000,

ich hab zwar keine Ahnung, wie man Assembler-Code in C einbindet, aber dafür in Pascal. Der wichtigste Teil ist dabei sowieso die Assembler-Routine...

Die Datentypen von Pascal:
word.....vorzeichenlose ganze Zahl von 0 bis 65535
byte.....vorzeichenlose ganze Zahl von 0 bis 255

procedure SetPort(PortNr: word; wert: byte);
begin
asm
MOV DX,PortNr;
MOV AL,wert;
out DX,AL;
end;
end;

function GetPort(PortNr: word):byte;
var wert: byte;
begin
asm
MOV DX,PortNr;
IN AL,DX
MOV wert,AL
end;
result:=wert;
end;

Die Port-Nummer kannst Du beim Booten den BIOS-Einstellungen oder den Kernelmeldungen entnehmen... meistens ist das aber 0x0378 (Für das Daten-Byte).

Hoffe geholfen zu haben.

djlauk

thommy
21-09-2000, 08:09
ioctl ist korrekt, mit "man ioctl_list" erhälst Du eine Liste, die auch die Parameter des Parallelports enthält. Weitere Informationen stehen in der Datei include/linux/lp.h (Kernelquellen).

Schreiben/Lesen funktioniert wie bei Dateien mit write/read.

Thomas

christophwth
21-09-2000, 15:18
Hi
djlauk
Wenn´s Dich noch interessiert Es gibt bei Linux auch die Möglichkeit direkt auf die HW zuzugreifen. Das Stichwort dazu lautet ioperm
Am Besten Du suchst mal nach ioperm in ein einer Suchmaschiene oder
in den lib Beschreibungen dort sind auch Beispiele beschrieben.

Hier im Forum ist auch schon mal etwas zu diesem Thema geschrieben worden.
Also versuchs mal mit der Forensuche.
Die Ausgaben an den Ports können können genau wie in Assembler mit In und
Out-Befehlen gemacht werden.

Hier noch ein paar Links : http://tph16.tuwien.ac.at/cgi-bin/dwww?type=runman&location=ioperm/2
Das Ganze steht auch noch in man2 !

Hier noch die Adresse für ein Howto, wo, und ob das bei Dir installiert ist weis ich nicht. http://www3.htl-hl.ac.at/doc/howto/en/html/mini/IO-Port-Programming.html#toc8

Und noch ein Beispiel : http://www.linux-magazin.de/ausgabe/1996/11/Funkuhr/dcf77.html

Bleibt vielleicht noch zu sagen das für die Zugriffe root-Rechte nötig sind.

Gruss
Christoph

christophwth
21-09-2000, 15:24
Hallo ich noch mal
ich habe noch einen guten Link vergessen. http://experte.kt2.tu-harburg.de/RTX03x_unter_Linux/node19.html

CU
Christoph

21-09-2000, 15:32
Dann sag ich erstmal danke an alle. Werde man alles ausprobieren. Bei Problemen meld ich mich noch mal

22-09-2000, 00:38
Hi Jungs!

Sorry, ich dachte das ginge unter Linux genauso wie unter M$-DOS, da es eben auf nächster Nähe zur Hardware gecodet ist. Wollte keine falschen Wahrheiten verbreiten. Aber danke, so habe ich auch etwas gelernt.

Ciao,

djlauk

22-09-2000, 09:46
Yo,

ich danke auch recht herzlich. Man lernt nie aus... oder dazu? Na egal!

Ciao Leute!

djlauk