Laden...

parallel Port >lesen<

Erstellt von cs_daniel vor 18 Jahren Letzter Beitrag vor 17 Jahren 5.877 Views
C
cs_daniel Themenstarter:in
12 Beiträge seit 2005
vor 18 Jahren
parallel Port >lesen<

Hallo zusammen,
also ich habe folgendes Problem, ich kann über den parallel Port ohne Probleme schreiben.

[DllImport("inpout32.dll", EntryPoint="Out32")]
public static extern void Output(int adress, int value);

Aber nicht lesen, habt ihr da eine Idee?
Wenns geht mit einem kleinen Codebeispiel.

Schonmal vielen Dank für eure Hilfe im Vorraus.

lg
Daniel

P.S. Bitte keine Verweise "schau doch mal im google nach" 😉
P.S.S. Arbeite gerade mit Microsoft Visual C# 2005 Beta, sollte aber kein Problem sein.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo cs_daniel,

zumindest blieb die ähnliche Frage Input an Parallelerschnitt. (event. InpOut32.dll) neulich unbeantwortet.

Insofern weiß ich auch nicht, ob dir Auf die parallele Schnittstelle zugreifen und --- Paralleleschnittstelle Pinweise ansteuern --- vielleicht was nützen.

herbivore

C
cs_daniel Themenstarter:in
12 Beiträge seit 2005
vor 18 Jahren

es geht sort immer nur ums schreiben, ich aber möchte ein TTL-fähiges Signal von meinem Bewegungssensor lesen können.

einer von euch muss doch ne Idee haben ...

S
125 Beiträge seit 2005
vor 18 Jahren

Hallo

evtl. WMI ???

*************************
Ich bin root, ich darf das... 😜
root>_
*************************

C
cs_daniel Themenstarter:in
12 Beiträge seit 2005
vor 18 Jahren

Original von SGT_BOB
Hallo

evtl.
>
???

Sorry, aber ich komme damit nicht klar, ich verstehe auch nicht, wieso das lesen komplizierter ist als das schreiben!?

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo cs_daniel,

vermutlich weil die parallele Schnittstelle ursprünglich nur zur Ausgabe eingesetzt wurde (Drucker).

herbivore

I
1.739 Beiträge seit 2005
vor 18 Jahren

Auch wenns nicht weiterhilft:
Die meisten Parallelports sind heute bidirektional. BIOS-Einstellungen überprüfen...

C
cs_daniel Themenstarter:in
12 Beiträge seit 2005
vor 18 Jahren

Original von herbivore
Hallo cs_daniel,

vermutlich weil die parallele Schnittstelle ursprünglich nur zur Ausgabe eingesetzt wurde (Drucker).

herbivore

Aber der Drucker gibt ja auch Signale zurück, es muss doch möglich sein, darauf zuzugreifen!?

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo cs_daniel,

ursprünglich aber nur auf Steuer- und nicht auf Datenleitungen. Ich wollte auch nicht argumentieren, warum es nicht geht, sondern nur deine Frage beantworten, warum Lesen schwieriger ist als Schreiben.

herbivore

M
1 Beiträge seit 2005
vor 18 Jahren

versuch es doch mal mit der entsprechenden Input funktion Inp32 dieses dll:

zum Schreiben:
[DllImport("inpout32.dll",EntryPoint"Out32")] public static extern void Output (int address, int value);

zum Lesen:
[DllImport("inpout32.dll",EntryPoint"Inp32")] public static extern int Input (int address);

Schreibe beispiel:
Output(0x378,0x0f) //Setzt die ersten vier Bit auf 1 und die andern vier Bit auf 0

Lese Beispiel:
int iGelesen;
iGelesen=Input(0x378)

4.221 Beiträge seit 2005
vor 18 Jahren

Achtung: Nicht jeder PC hat den LPT1 an derselben Adresse (ist in der heutigen Zeit im Bios einstellbar (je nach Bios und alter des Bios))

0x378 = Standard
0x3bc = IBM
0x278 = LPT2

😉

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

I
1.739 Beiträge seit 2005
vor 18 Jahren

Genaugenommen, sind diverse API-Funktionen für das Problem nicht der richtige Ansatz(wenn man nicht alle Augen zudrückt auch nicht für serielle Schnittstellen).
Normalerweise erfordert das einen tiefen Griff ins DDK. Dh. Treiberprogrammierung.

Edit: Irgenwie ist ja schon schade, dass direkte Hardwarezugriffe nicht mehr(naja nicht mehr so einfach) möglich sind(Copperbalken unter Win 3.1, bei direkten Zugriff auf VGA-Register), andererseits werden die Bluescreens seltener...

S
8.746 Beiträge seit 2005
vor 18 Jahren

Mit Windows und PC-Hardware ist eine solche Aufgabe nicht zu bewältigen. Windows mangelt es an der Echtzeitfähigkeit und wäre höchsten geeignet dein TLL-Signal im Bereich von einigen Hz abzutasten. Bedenke, dass du laut Abtasttheorem mindestens doppelt so schnel sein musst wie dein Signal.

Was du brauchst ist eine Messhardware mit einem eingebauten Counter. Die übernimmt für dich den Echtzeitteil (Low-High-Übergänge zählen). Zusätzlich brauchst du eigentlich einen Echtzeitstempel. Die Zeitmessung mit dem PC ist ziemlich ungenau, weil dir zwischen dem Holen der Messwerte und dem Auslesen der PC-Zeit ein Thread oder Prozesswechsel stattfinden kann, d.h. Zeit und Messwerte passen nicht zusammen. Damit bekommst du keine stabile Frequenz.

Also vergiß den Drucker-Port und schaue dich nach einer anständigen HW um.

96 Beiträge seit 2006
vor 17 Jahren

Welche Namespace muss ich da Implimentieren?

[DllImport("inpout32.dll", EntryPoint="Out32")]
public static extern void Output(int adress, int value);

Teamarbeit ist, wenn vier Leute für eine Arbeit bezahlt werden, die drei besser machen könnten, wenn sie nur zu zweit gewesen wären und einer davon krank zu Bett läge.
3.511 Beiträge seit 2005
vor 17 Jahren

System.Runtime.InteropServices oder so

Bitte in die Hilfe schauen. Da steht sowas drin (Stichwort DllImport)

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)