Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Auslesen des Parallel Ports (https://www.delphipraxis.net/52079-auslesen-des-parallel-ports.html)

hibbert 23. Aug 2005 15:18


Auslesen des Parallel Ports
 
Hi,
ich habe folgendes vor:

Ich möchte gerne einen Draht, der aus dem Parralelport kommt wieder in den Parralel Port leiten.

Nun möchte ich gerne gerne mit meinem Delphi Programm ermitteln, wann nun der Stromimpuls wieder in den Port reingeht.

Mein Problem ist, an welche Pins muss ich die Drähte löten ?

Und wie bemerke ich mit meinem Programm, dass die "Verbindung" hergestellt ist ?

Mit der io.dll sende ich ja folgendermaßen:
Delphi-Quellcode:
portout(888,16)
Doch wie lese bzw merke ich jetzt das was in den Port "gesendet" wird ??

Danke
Hibbert

christian.noeding 23. Aug 2005 15:39

Re: Auslesen des Parallel Ports
 
Hi!

Ich nutze für so etwas immer die inpout32.dll von www.logix4u.com. Die Library ist klein, schnell, und hat nur das, was man braucht.

Lade sie in dein Programm wie folgt:

Delphi-Quellcode:
// inpout32.dll für LPT-Ausgang unter WinNT, Win2000 und WinXP laden
procedure Out32(PortAddress:word;Value:byte);stdcall;export;
external 'inpout32.DLL';
function Inp32(PortAddress:word):byte;stdcall;export;
external 'inpout32.DLL';
Mit
Delphi-Quellcode:
out32(888,1);
kannst du z.B. D0 des LPT1-Portes auf High setzen. Mit
Delphi-Quellcode:
Inp32(888);
liest du den aktuellen Status des LPT1-Portes aus. Das klappt prima. Zudem kann man jede Byteoperation anwenden, die man kennt.

Wenn du
Delphi-Quellcode:
Out(888,255);
setzt, dann schaltest du alle Register auf high, bei 127 nur das letzte, bei 64 das vorletzte, etc.

Der LPT1-Port geht dann auch noch von 888 auf 889 und 890, wo man dann jeweils neben den Data-Registern auch die Status- und Strobe-/Line-/Feed- etc. Register lesen / setzen kann.


Du musst jetzt nur noch einen Timer setzen, der in bestimmten Zeitabständen den Port mit
Delphi-Quellcode:
if not inp32(888)=0 then ShowMessage('Da ist einer auf meine Schnur getreten!');
etc. abfragt. Pass aber auf: manche Register sind negiert und müssen gesondert behandelt werden.

Schöne grüße,
Christian :D

christian.noeding 23. Aug 2005 19:42

Re: Auslesen des Parallel Ports
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab hier noch ne kleine *.doc-File für dich... die habe ich genutzt, um mir das Schnittstellensystem näher zu bringen. Wenn du Sourcecode brauchst, dann kannst du z.B. in die Sources meines PC_DIMMERs schauen, da ich dort ebenfalls den Parallelport ansteuere: PC_DIMMER


Die Belegung des LPT-Ports findet man ganz einfach HIER! *g* du brauchst theoretisch nur nen Data-Port mit nem Schalter auf einen der Status-Registerports legen und dann per inp32(889) oder inp32(890) abfragen - mehr nicht. Auf diese Weise habe ich mir einen Signalgeber zusammengebastelt, der mich per ISDN auf dem Handy alarmiert, falls bestimmte Kontakte geschlossen, oder geöffnet werden :D


viel Glück,
Christian :)

hibbert 23. Aug 2005 20:47

Re: Auslesen des Parallel Ports
 
cool danke, ich werde mir das morgen mal nach der schule angucken.

ich werde mich auf jedenfall nochmal melden :wink:

zebrafalke 3. Sep 2006 20:10

Re: Auslesen des Parallel Ports
 
Hallo,

Zitat:

Zitat von christian.noeding
Delphi-Quellcode:
if not inp32(888)=0 then ShowMessage('Da ist einer auf meine Schnur getreten!');

Damit hab ich ein paar Probleme.

An welche Pins könnte ich zum Beispiel einen Taster anschließen, dessen drücken dann registriert wird?

Code:
   ----------------------
  |                  |
  |                  |
LPT-Port          Taster
  |                  |
  |                  |
   -------------------
Zitat:

Zitat von christian.noeding
du brauchst theoretisch nur nen Data-Port mit nem Schalter auf einen der Status-Registerports legen und dann per inp32(889) oder inp32(890) abfragen - mehr nicht.

geht bei mir nicht, da wird der Taster immer als aus erkannt, auch wenn ich ihn drücke...

Gruß
zebrafalke

Olli 10. Sep 2006 10:34

Re: Auslesen des Parallel Ports
 
Usermode böse - Kernelmode lieb! Treiber sinnvoll einsetzen.

zebrafalke 10. Sep 2006 12:28

Re: Auslesen des Parallel Ports
 
Thx, hatte es schon anders hingekriegt :wink:

Gruß
zebrafalke

alleinherrscher 10. Mai 2007 17:29

Re: Auslesen des Parallel Ports
 
Zitat:

Thx, hatte es schon anders hingekriegt
Sorry, dass ich das alte Thema neu anschneide...aber weiß jemand wie man das jetzt letztendlich löst? Wie kann ich herausfinden, ob ich eine Datenleitung z.B. D0 kurzgeschlossen habe? Ich benutzte ja schon die inpout32.dll, das Out32 funktioniert erstklassig. Ich setzte erst per Out32(888,1) das D0 auf High, die Led zwiscehn D0 und Ground leuchtet. Schließe ich d0 kurz, und lese per Inp32(888) den zustand ein, so bleibt dieser unverändert bei "1"

Hab schon im Bios auf EPP1.7 umgestellt, hat nichts genützt.


Grüße,

Alleinherrscher

Muetze1 10. Mai 2007 21:48

Re: Auslesen des Parallel Ports
 
Auch das Output Latch im Data Control Register konfiguriert? Im Normalfall ist der LPT nur zur Ausgabe da. Von daher hatte man früher immer den zuletzt ausgegebenen Wert beim einlesen zurück bekommen. Von daher muss man nun erstmal dieses Latch Umschalten um das Signal der Datenleitungen zu bekommen.

Aber noch was grundlegendes: Offene Datenpins sowie zu Ground geschlossene liefern immer das gleiche Signal: LOW.

hibbert 10. Mai 2007 21:51

Re: Auslesen des Parallel Ports
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich habe am Anfang des Jahres ein altes Ketcar mit nem Laptop und ner Autobatterie zum Fahren gebracht. Dabei musste man natürlich auch die Radstellung überprüfen, also etwas über den LPT einlesen.

dazu habe ich mir damals n kleines Testprogramm geschrieben. Es gibt Signale ab, kann aber auch welche einlesen. Ich habe das Prog mal angehangen.

Kurz zum Programm:
V, L, R, Z würden das Teil zum Fahren bringen. Bumber, Mittelstellung und Links/rechts sind rot oder grün bei entsprechender belegung, ist aber auch egal, war nur was für mich zum überprüfen. Wichtig dürften hier die Checkboxen an der rechten Seite sein. Ist ein Haken gesetzt, so ist die Leitung geschlossen. (Pin 10 - 13 und Pin 15)

Mit dieser Methode konnte ich später im Hauptsteuerungsprogramm alle wichtigen Informationen "einlesen".
Ich hoffe es hilft...

(Bitte nicht über den schlechten Programmirstiel/rechtschreibfehler oder sonstiges herziehen, es war nur ein kleines Testprogramm für mich. Habe auch ein wenig in der Das005.pas rumgefummelt... also mal gucken.

hibbert


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz