Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi io.dll für parallelport, wie lese ich die bits? (https://www.delphipraxis.net/108154-io-dll-fuer-parallelport-wie-lese-ich-die-bits.html)

starkstrom 7. Feb 2008 22:53


io.dll für parallelport, wie lese ich die bits?
 
Hallo zusammen,
ich habe ein Problem mit dem breitgetretenen Thema Parallelport undter Delphi...
Ich hab nach mehreren Möglichkeiten mich (vorerst) für die io.dll entschieden. andere wege führten meinst zu fehlern die ich nach stunden noch nicht gelöst hatte.
nunja, also wiegesagt, http://www.geekhideout.com/iodll.shtml klappt super, nur hab aber leider ich keinen schimmer wie ich die ack, rdy, error undsoweiter bits auslese.
ich hab auch irgendwie keine lösung gefunden.

PortOut($378, $01); ist ja toll, aber wär dann der Read sowas wie PortIn($378, ack);.. ? die haben doch sicher eine eigene adresse...

vllt weis ja einer von euch ein rat :)

danke im vorraus

omata 7. Feb 2008 23:01

Re: io.dll für parallelport, wie lese ich die bits?
 
Die Acknowledge-Leitung ist eigentlich für einen Interrupt-Handler da.

Das hier hast du ja vermutlich schon gesehen.

Gruss
Thorsten

starkstrom 7. Feb 2008 23:23

Re: io.dll für parallelport, wie lese ich die bits?
 
Zitat:

Zitat von omata
Die Acknowledge-Leitung ist eigentlich für einen Interrupt-Handler da.

ich mach das jetzt dank info LK seid gestern und ich hab keinen schimmer was der satz bedeutet :wink:
naja eigendlich weis ich nur nicht was dieser Interrupt-Handler ist. schnelles googeln ergab das er einen prozessor unterbricht.

ich wollte daten auf sehr einfach art zw 2 pcs austauschen. dabei soll es sich um einfache strings handeln, so ne billige art chat. das das sinnlos ist ist mir klar, ich will doch nur spielen :mrgreen:

also daten über die datenleitungen rausgeben (soweit so gut) und dann ggf mit platine dawzischen, je nach volt etc (noch nicht wirklich informiert.. nur 5V, mehr weis ich net), an dem anderes pc empfangen. dafür hab ich nur 5 eingänge (ack, error, slct, pe und busy). diese hab ich für verschiedene zwecke vorgesehen und dachte ich könnte sie einfach so ansprechen und benutzten ohne das das irgendwen im system interessiert.

also sprich sowas wie if ((PortIn($378) = 1) then begin brabra.... den ganzen kodierungskäse und übertragungsbrabbel hab ich, mir fehlt nurnoch das senden und vorallem lesen auf den nicht-daten-leitungen...

und den post hab ich schon gelesen, aber ich mag vom prinzip io.dll mehr, vorausgesetzt es kann das was ich will :wink:

omata 7. Feb 2008 23:29

Re: io.dll für parallelport, wie lese ich die bits?
 
Warum muss es da unbedingt die Parallele Schnittstelle sein? Schau dir doch mal die Serielle an. hier

Gruss
Thorsten

starkstrom 8. Feb 2008 00:05

Re: io.dll für parallelport, wie lese ich die bits?
 
das ist im moment unser thema in der schule... und als musterschüler *höhö* :angel: würd ich da gern schon über ganz viel labern können...
außerdem WILL ich das jetzt das es geht.. es muss doch irgendwie gehen.. :wall:

ich hab mitlerweile bemerkt (das hat lange gedauert), dass function PortIn(Port : Word) : Byte; gar keine Pin angabe macht (im Gegensatz zu procedure PortOut(Port : Word; Data : Byte);. vllt ist der rückgabewert ja eine zusammensetzung aller möglichen kombinationen der 5 eingänge. da ein byte ja 2^8 ist und ich nur 2^5 möglichkeiten hab wenn ich mich da nicht gerade verrechne würde das sogar den bedarf locker decken. wäre umständlich aber egal. also 00001 für alles low außer error, 00010 alles low außer ack, 00011 alles low außer ack und error.. oder so was in der art halt. mehr fällt mir nicht ein. zurzeit hab ich noch keine platine oder schaltplan um das zu testen und so auf die schnelle will ich das nicht machen, nicht das nachher mir der controller oder sonst wer durchschmort ^^

//offtopic: könnte ich den daten-1 pin irgendwie mit einem der input pins verbinden das wenn ich D1 auf high setzte der jeweilige input auch high wird? bin kein e-technik-genie, aber das kommt mir zu einfach vor...

Muetze1 8. Feb 2008 09:18

Re: io.dll für parallelport, wie lese ich die bits?
 
Zitat:

Zitat von omata
Die Acknowledge-Leitung ist eigentlich für einen Interrupt-Handler da.

Afair ist der ACK des Druckerports nicht mit dem Interrupt des selbigen verbunden. Das ACKnowledge Signal bestätigt eine Datenübertragung von Rechner zum Drucker. Ich denke du hast das zu eng auf die CPU I/O bezogen.

@starkstrom: Hast du dir schonmal die Portstruktur des Parallelports angeschaut?

Basisadresse + 0 ist das Datenregister,
Basisadresse + 1 ist das Statusregister,
Basisadresse + 2 ist das Kontrolregister

Somit solltest du dich kundig machen über die Definition der Bits und entsprechend umsetzen.

starkstrom 8. Feb 2008 13:37

Re: io.dll für parallelport, wie lese ich die bits?
 
ah, danke, den link hatte ich zwar schonmal, aber nie genau angeschaut.
also kann ich zB mit PortOut($378+2, $04); init auf high setzten.
kann ich genau so auch auslesen ? also mit if (PortIn($378+1) = $08) nach ERROR fragen ? hab leider noch nichts zum testen was eine platine angeht.. mal googeln ob sich was einfaches findet.

Zitat:

Ich denke du hast das zu eng auf die CPU I/O bezogen.
was meinst du damit?

//EDIT
//zu dem schaltplan hab ich was gefunden.. mal sehen : ) http://board.gulli.com/thread/714730...ng-ansprechen/

starkstrom 8. Feb 2008 14:32

Re: io.dll für parallelport, wie lese ich die bits?
 
ich habs.. man fragt die leitungen echt so ab. Button1.Caption := IntToStr(PortIn($378+1));
was ich nicht wusste ist das die activ-low-pins hardware invertiert sind, aber das ist auch nicht weiter schlimm.

danke an alle, aber ich habe noch eine kleine offtopic frage...

http://www.kristian-graul.de/lpt.jpg

diese schaltung geht, aber führt sie zwischen port 2(Data0-Out) und 15(Error-In) nicht zu sowas wie einem kurzschluss? sollte da eine LED oder ein widerstand dazwischen ?

Muetze1 8. Feb 2008 14:43

Re: io.dll für parallelport, wie lese ich die bits?
 
Zitat:

Zitat von starkstrom
was ich nicht wusste ist das die activ-low-pins hardware invertiert sind, aber das ist auch nicht weiter schlimm.

Deshalb heissen sie ja gerade "low active" - also sie sind aktiv, wenn sie einen Low Pegel haben. Gekennzeichnet mit einem Strich über dem Bezeichner oder in Texform auch mit einem / vor dem Namen. Normalfall sind Leitungen halt "high active".

Und zu deiner Abfrage: Jede Datenleitung wird durch ein Bit in dem Register dargestellt. Somit musst du das Bit ausmaskieren, damit du nur noch das eine Bit abfragst. Ansonsten würde dir ja eine andere, zusätzlich gesetzte Leitung in die Suppe spucken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.

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