www.mikrocontroller.net

Forum: PC Hard- und Software Linux LPT Port als Eingang


Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

würde gerne unter Linux ein externes Signal über den LPT Port einlesen. 
Den Code dazu habe ich schon:

#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#include <unistd.h>

#define port 0x378

int main(int argc, char *argv[])
{
  if (ioperm(port,3,1)!=0)
  {
      fprintf(stderr,"kein Zugriff. Muss als root laufen !\n");
      exit(1);
  }
int auslesewert=inb(port);
ioperm(port,3,0);
return auslesewert;
}

die Frage ist nun welche Pins ich dafür nehmen muss und was ich anlegen 
muss?

Aktuell gibt der Code mir 255 zurück also alle Pins High obwohl nichts 
angeschlossen ist. Muss ich nun Pin 2-9 auf Masse legen? Will jetzt 
eigentlich keine zig LPT Ports mit probieren schießen also hoffe ich das 
mir wer helfen kann ;)

danke

mfg

Chris

Autor: nicht wichtig... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
soweit ich weiß, sind die pins d0..d7 nur als ausgang geschaltet, du 
kannst aber die signale für "kein papier" etc nutzen... und wenn ich 
mich recht erinner kriegst du die in deinem fall unter der adresse 
0x379, also 0x378+1

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im BIOS ist der LPT auf einen der bidirektionalen Modi geschaltet?

Nimm' mal probeweise einen 10K Widerstand von Pin2 nach Masse.

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

hab jetzt so ein Kabel gebaut Pin 25 -> Pin 2 mit 10kOhm und nen kleinen 
Schalter zum testen. Das Problem ist nun ich kann an meinen PC nur SPP 
und EPP im Bios einstellen. Unter Vorschläge zeigt er zwar ECP+EPP an 
aber ich kann es nicht auswählen. Jemand eine Idee an was das liegen 
kann? Und brauch ich unbedingt oder müsste es auch im EPP gehen? Es geht 
auf jeden Fall aktuell unter EPP nicht erhalte immer 255. Kabel ist 
durchgeklingelt und ok.

mfg

Chris

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal das Steuerregister (0x378+2) an. Mit Bit 5 kann man die 
Datenleitungen auf Eingang schalten.

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke hat weitergeholfen aber irgendwie geht es trotzdem nicht hier mein 
neuer Code:

#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#include <unistd.h>

#define port 0x378
#define steuerreg 0x37A
//Steuerreg lesen
int main(int argc, char *argv[])
{
  if (ioperm(steuerreg,3,1)!=0)
  {
      fprintf(stderr,"kein Zugriff. Muss als root laufen !\n");
      exit(1);
  }
  int steuerregwert=inb(steuerreg);
  ioperm(steuerreg,3,0);

  //Steuzerreg ändern Bit auf 1 setzen
  steuerregwert |= 1<<4;

  //Steuerreg neu schreiben
  if (ioperm(steuerreg,3,1)!=0)
  {
      fprintf(stderr,"kein Zugriff. Muss als root laufen !\n");
      exit(1);
  }
  outb(steuerregwert,steuerreg);
  ioperm(steuerreg,3,0);

  //Lesen den auslesewerts
  if (ioperm(port,3,1)!=0)
  {
    fprintf(stderr,"kein Zugriff. Muss als root laufen !\n");
    exit(1);
  }
  int auslesewert=inb(port);
  ioperm(port,3,0);
  return auslesewert;

}

erhalte immer 255 zurück und nun? Was is falsch? Bin jetzt kein C Profi 
vllt. ist auch im Code ein Fehler?

mfg

Chris

Autor: Daniel V. (danvet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bit 5 heißt Bit 5, nicht 4; also 0,1,2,3,4,5;
Wenn du die 1 mit << schiebst, dann mit 5 (nicht 4).

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum benutzt du eigentlich nicht das Parport-Device statt am Kernel 
vorbei direkt auf Portegistern rumzufrickeln?

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel ups sry werde es mal probieren

@ Rolf
das was? ich bin mal googlen :D

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel

geht auch nicht immer 255 als Ausgabe

Autor: Wolfgang R. (portside)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für Lösungen deiner Art sind die Zeiten vorbei, ioperm braucht root 
Rechte zur Ausführung.
Dazu nimmt man jetzt libieee1284 in Linux das dann auch das Parport 
Device verwendet.

Autor: Gerry E. (micky01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang R. schrieb:
> Für Lösungen deiner Art sind die Zeiten vorbei, ioperm braucht root
> Rechte zur Ausführung.
> Dazu nimmt man jetzt libieee1284 in Linux das dann auch das Parport
> Device verwendet.

Gestatte mir die bescheidene Frage, wodurch man von so einer 
Fundamentalentscheidung informiert wird.

Das ist das Geniale an Linux. Programmierschnittstellen werden von 
erfahrenen Programmierern gerne eine Weile verwendet, so etwa 10 Jahre 
und mehr und bei MS kann man sich drauf verlassen, dass das auch klappt. 
Bei Linux hingegen ist die Entwicklung etwas dynamischer: wer hier nicht 
die wichtigsten Kernel-Mailinglisten mitliest, dessen Software läuft 
unter einem neueren Linux plötzlich nach einem Jahr nicht mehr...

Ich habe jetzt etwas übertrieben, aber im Grundsatz ist es doch so, oder 
etwa nicht?

Autor: Wolfgang R. (portside)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerry E. schrieb:
> Wolfgang R. schrieb:
>> Für Lösungen deiner Art sind die Zeiten vorbei, ioperm braucht root
>> Rechte zur Ausführung.
>> Dazu nimmt man jetzt libieee1284 in Linux das dann auch das Parport
>> Device verwendet.
>
> Gestatte mir die bescheidene Frage, wodurch man von so einer
> Fundamentalentscheidung informiert wird.

libieee1284 gibts schon seit über 10 Jahre und damit die Software 
portable bleibt gibts libieee1284 auch für Windows grösser 3.x, BSD, 
Mac....

Ist also kein Linux Schnittstelle.
>
> Das ist das Geniale an Linux. Programmierschnittstellen werden von
> erfahrenen Programmierern gerne eine Weile verwendet, so etwa 10 Jahre
> und mehr und bei MS kann man sich drauf verlassen, dass das auch klappt.

So ein Schwachsinn, nichts verstanden. Genau die hier benutze Art zu 
programmieren geht bei Windoof schon seit Win2K nicht mehr. Um Hardware 
Ports zu Fuss anzusprechen braucht man spezielle Treiber die dies 
erlauben.

Und dann kommt das Problem das jeder Feld Wald und Wiesenprogrammier 
ohne Wissen dies verwendet und man sich später wundert weshalb Win 
abschmiert oder Trojaner installiert werden.
MS hats langsam verstanden warum dies mehr und mehr verboten wird.


Und dies ist eine Fundamentalentscheidung die abhängt ob sich das Wissen 
nach DOS weiterentwickelt hat.

> Bei Linux hingegen ist die Entwicklung etwas dynamischer: wer hier nicht
> die wichtigsten Kernel-Mailinglisten mitliest, dessen Software läuft
> unter einem neueren Linux plötzlich nach einem Jahr nicht mehr...
>

Whow genau das Gegenteil!!!!

> Ich habe jetzt etwas übertrieben, aber im Grundsatz ist es doch so, oder
> etwa nicht?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerry E. schrieb:
> Das ist das Geniale an Linux. Programmierschnittstellen werden von
> erfahrenen Programmierern gerne eine Weile verwendet, so etwa 10 Jahre
> und mehr und bei MS kann man sich drauf verlassen, dass das auch klappt.
> Bei Linux hingegen ist die Entwicklung etwas dynamischer: wer hier nicht
> die wichtigsten Kernel-Mailinglisten mitliest, dessen Software läuft
> unter einem neueren Linux plötzlich nach einem Jahr nicht mehr...

Es ist unter Linux genausowenig zeitgemäß, noch direkt auf 
Steuerregister zuzugreifen, wie unter Windows. Unter Windows frickelt 
man auch oft genug noch mit 'portio.sys' herum.

Mit den Programmierschnittstellen hat das übrigens nichts zu tun. Die 
Steuerregister sind quasi fest in der PC-XT/AT-Architektur verdrahtet. 
Nach wie vor kann man mit inb/outb auf die Steuerregister zugrifen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.