Parallelport beschreiben mit /dev/lp0

Dieses Thema im Forum "C/C++" wurde erstellt von Dirk, 26.07.2006.

  1. Dirk

    Dirk Mitglied

    Dabei seit:
    12.05.2003
    Beiträge:
    35
    Zustimmungen:
    0
    Moin!
    Ich möchte Bits des Parallelports setzen, um damit eine kleine elektronische Schaltung zu steuern. Ich habe dafür zwei Varianten gefunden:
    1.) direktes Beschreiben des Ports per outb()
    2.) Verwendung der Gerätedatei /dev/lp0

    Ersteres funktioniert tadellos, nur benötigt das Programm root-Rechte, daher kommt es für mich nicht in Frage.

    Bei der zweiten Variante habe ich Probleme. Ich mache folgendes:
    Code:
    int fd = open( "/dev/lp0", O_RDWR );
    lseek( fd, 1, SEEK_SET );
    unsigned char wert = 255;
    write( fd, &wert, sizeof( wert ) );
    close( fd );
    
    Das Programm läuft bis write() durch, bleibt aber beim Schreiben hängen.
    Wenn ich nen zufälligen String in /dev/lp0 schreibe, z.B. durch:
    Code:
    cat datei > /dev/lp0
    
    Kommt der Befehl auch nicht zum Ende, sondern bleibt stecken.

    Woran kann das liegen? Hab ich das Prinzip so einer Gerätedatei falsch verstanden??

    Vielen Dank für eure Hilfe!

    Mfg Dirk
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. maggus

    maggus linux-fan

    Dabei seit:
    19.07.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    50.303101642820124, 8.691236972808838
    Hi Dirk,

    was erwartest Du, was denn passiert, wenn Du mit
    cat datei > /dev/lp0
    etwas rauspumpst und kein lineprinter antwortet auf
    den Steuerleitungen, so wie spezifiziert?

    Es gibt da ein gutes Buch, das ich mir mal besorgt
    habe. Es heisst
    "Messen, Steuern, Regeln mit Linux"
    beim Franzis-Verlag.

    Ist meiner Meinung nach sehr verstaendlich und enthaellt
    viele Beispiele mit Source-Code z.B. fuer die Ansteuerung
    von Schrittmotoren ueber parallele oder serielle
    Schnittstelle oder Abgreifen von Temperatursensoren
    ueber I2C-Bus.

    Ich meine, dieses Buch sogar mal irgendwo online
    entdeckt zu haben. Try google.

    Das Thema Parallelport hatte aus diesem Buch ich
    dankbar entgegen genommen, da ich
    "nur mal eben eine LED" anmachen
    wollte an Pin 1 und verzweifelt bin an den gleichen
    Problemen wie Du.

    Soweit ich mich erinnern kann, ist die Ansteuerung im
    User-Mode aber nicht trivial, aehnlich wie die Ansteuerung
    von Sound ueber ALSA begibst Du Dich in ein API-Grab.

    Ich waehlte letztlich den Weg ueber einen root-daemon,
    so wie Du eingangs beschrieben hast mit outb().

    Was spricht bei Deiner Anwendung dagegen? Wenn Du
    mit Sicherheit der einzige bist, der auf diesem Port was
    machen will, so gehe doch diesen Weg.

    Du koenntest z.B. einen daemon schreiben, so wie gpsd,
    der als root laeuft und die bits setzt. Fuer den user legst
    Du einen socket an, zu dem Du dich als user verbinden
    kannst. Und schon ist Deine Steuerung sogar remote-faehig!

    Gruesse

    maggus
     
  4. #3 theborg, 26.07.2006
    theborg

    theborg KBitdefender Programierer

    Dabei seit:
    06.08.2004
    Beiträge:
    688
    Zustimmungen:
    0
    Ort:
    Hamburg
    Paraphin ist ne nette kleine lib und gut dokumentirt des würde ich mal versuchen
     
  5. Dirk

    Dirk Mitglied

    Dabei seit:
    12.05.2003
    Beiträge:
    35
    Zustimmungen:
    0
    Vielen Dank für eure Antworten!
    Das mit dem Daemon ist eigentlich ne ganz gute Idee, aber mir vorerst etwas zu viel Aufwand. Ich werde mal einen Blick auf die Parapin-Lib riskieren :-)

    Dirk
     
  6. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Ein anderer Ansatz waere ein Kernel-Modul, das die Ansteuerung uebernimmt und ein entsprechendes Interface fuer Programme zur Verfuegung stellt, das aus dem Userspace angesprochen werden kann (z.B. ueber das proc-Interface). Als Vorlage kann man ja das parport-Modul nehmen und dieses entsprechend modifizieren bzw. erweitern.
     
  7. #6 guenterhalt, 14.09.2007
    Zuletzt bearbeitet: 20.09.2007
    guenterhalt

    guenterhalt Guenter

    Dabei seit:
    11.09.2007
    Beiträge:
    13
    Zustimmungen:
    0
    Ort:
    Hönow /Brandenburg
    mein lp0-Port habe ich gerade vom Drucker befreit und will jetzt darüber Steckdosen Aus- und Einschalten.
    Mit der Scriptsprache Tcl/Tk geht das ganz einfach. Ein vollständiges Programm ist aber noch nicht fertig
    1. Root-Rechte für /dev/lp0 : da ich keinen Drucker mehr daran benutze, habe ich mit
    chown root.users /dev/lp0 nur die Gruppe (bisher lp) geändert und habe so als user
    Schreibzugriff
    2. Wenn kein externes Gerät angeschaltet ist, bedeutet ein offenes BUSY-Pin
    "Gerät nicht bereit" . Alle Ausgaben werden irgendwo gepuffert und kommen nicht
    an den Daten-Pins (Pin 2,3,4,... ) an. Also BUSY (Pin 11) mit GND (Pin 18 bis 25)
    verbinden.
    3. Tcl/Tk war bisher bei SuSE immer auf den CD's
    Auf einer Konsole tclsh aufrufen und nach wenigen Schritten kann man an der Buchse
    (Pin 2 bis 8 ) low- oder high- Pegel messen:
    Also tclsh
    % set pp [open /dev/lp0 w ] ; # port für Schreiben geöffnet
    % fconfigure $pp -buffering none ; # Daten werden jetzt sofort geschrieben
    % fconfigure $pp -blocking 0 ; # kein Warten auf ...
    % puts -nonewline $pp \xff ; # alle Datenleitungen auf high gesetzt
    % puts -nonewline $pp \x00 ; # alle Datenleitungen auf low gesetzt
    % close $pp
    % exit

    Das ganze sollte auch unter Windows laufen (aber nicht mit /dev/lp0 sondern mit LPT ? )
    Irgendwann läuft auch mein Programm mit grafischer Bedienung (Tcl/Tk)
    Gruß Günter
     
  8. #7 guenterhalt, 18.09.2007
    guenterhalt

    guenterhalt Guenter

    Dabei seit:
    11.09.2007
    Beiträge:
    13
    Zustimmungen:
    0
    Ort:
    Hönow /Brandenburg
    So schnell geht's mit Tcl/Tk. Die erste Version eines Programms mit grafischer Bedienoberfläche zum Aus-/Einschalten der 8 Paralleport-Datenleitungen ist fertig.
    Sollten zu viele Wünsche eingehen, werde ich es auch ins Netz stellen.

    MFG Günter
     
  9. #8 guenterhalt, 04.10.2007
    guenterhalt

    guenterhalt Guenter

    Dabei seit:
    11.09.2007
    Beiträge:
    13
    Zustimmungen:
    0
    Ort:
    Hönow /Brandenburg
    Es sah so schön aus. Die Datenausgabe von 00H bis FFH auf Device /dev/lp0 funktioniert.
    Jede Datenleitung am Parallelport kann so auf high oder low gesetzt werden.
    Damit wollte ich - und ich kann aus auch - u.a. meinen USB-Drucker aus- und einschalten.
    Bei SuSE (nur bei SuSE ?) werden aber nach jedem Booten für /dev/lp0 die Rechte neu
    gesetzt (auch wenn kein Printer angeschaltet und auch nicht konfiguriert ist).
    Wie schaltet man das ab ? Ich hab's noch nicht gefunden.
    Der Schritt, irgendwo ein "privates" Device mit mknod lpPrivat c 6 0 anzulegen umgeht das Problem.
    Viel schimmer ist aber, dass die Benutzung der Tabulator-Taste oder der Cursor-Tasten
    eine Daten-Ausgabe -offensichtlich auf niedrigster Ebene- auf das Parallelport bewirkt.
    Damit wird mein Drucker einfach wieder ausschaltet.
    Gibt es eine bessere Erkärung als:
    "Niemand hat das Recht das Parallelport für eigene Zwecke zu benutzen" ?
     
  10. #9 guenterhalt, 28.11.2007
    guenterhalt

    guenterhalt Guenter

    Dabei seit:
    11.09.2007
    Beiträge:
    13
    Zustimmungen:
    0
    Ort:
    Hönow /Brandenburg
    meinen Beitrag, dass es doch geht, hat wohl jemandem nicht gefallen? Der ist verschwunden!
    Also ganz kurz: Benutze nie die 8 Datenleitungen direkt. Schalte ein 8-Bit-Latch dazwischen und mache die Eingänge nur auf, wenn STROBE aktiv ist.
    Irgendwo habe ich das auch genauer beschreiben.
     
  11. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    Tachchen... grabe mal eine fast vergammelte Leiche aus! :D

    Möchte mich auch etwas mit dem Thema beschäftigen über C/C++ meinen LPT oder COM Port anzusteuern und damit z.B. ein Led anschalten oder sogar auf einen kleinen Puls warten wie z.B. Stromkreis offen oder zu! :)

    Das Buch "Messen, Steuern, Regeln mit Linux" ist bei Amazon derzeit vergriffen und doch noch etwas teuer für den Anfang. Von daher kann mir einen vieleicht einen netten link für ein eBook geben und/oder eine Übersicht über die PINs welche Nummern die haben etc?

    Das wäre super nett... Danke

    Yellow
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
  14. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    Hey JBR. Danke für die Coole Seite!

    Die wird mir auf jedenfall erstmal weiterhelfen :D
     
Thema: Parallelport beschreiben mit /dev/lp0
Besucher kamen mit folgenden Suchen
  1. /dev/lp0

    ,
  2. lp0 nicht gefunden

    ,
  3. tcl schrittmotor einsteuern

Die Seite wird geladen...

Parallelport beschreiben mit /dev/lp0 - Ähnliche Themen

  1. SuSE hat den Parallelport geklaut

    SuSE hat den Parallelport geklaut: hallo, hatte vor kurzem SuSE 10.1 neu drauf gemacht und bin nun dabei alles nach und nach wieder zu konfigurieren. tja, und nun musste ich...
  2. Zwei Drucker an Parallelport unter Debian

    Zwei Drucker an Parallelport unter Debian: Hoi, hab den C't Debian Server installiert und will nun zwei drucker an den einen parallelport anschliessen. hab nen parallelport-switch an den...
  3. kein Ausdruck über Parallelport mehr möglich

    kein Ausdruck über Parallelport mehr möglich: Hallo zusammen, habe ein Problem mit meinen HP Laserjet4L denn er weigert sich beharrlich zu drucken (Kanotix BH X basiert auf Debian SID mit...
  4. OKI 4300 am Parallelport /Cups

    OKI 4300 am Parallelport /Cups: moin at @ll, ich habe einen OKI 4300 am Parallelport von SuSE 8.2 mit Cups laufen. jetzt habe ich festgestellt, dass ein Ausdruck aus dem...
  5. Parallelporterkennung Toshiba SM30-404

    Parallelporterkennung Toshiba SM30-404: Hi, ich habe kürzliche SUSE Linux 9.0 auf meinem Toshiba Satellite M30-404 installiert. Neben einigen anderen habe ich vor allem das Problem,...