Portprogrammierung: Welche Sprache und wie ?
-
Also,
meine Hardware ist jetzt auf dem Weg und nen Tutorial zu dem Thema schickt mir nen Bekannter auch heute zu.Das einzige bei dem er mir nicht helfen konnte ist,
dass die Port Adresse des LPT Port zwar meistens gleich ist es aber manchmal auch abweichungen gibt.
Meine Frage ist deshalb ob bzw. wie man die Adresse auslesen kann.Bis denn
M.Hecker
-
Original erstellt von Hecker.Michael:
**
Meine Frage ist deshalb ob bzw. wie man die Adresse auslesen kann.
**ja kann man definitiv!
einerseits mit Assembler direkt ausn BIOS (frag mal die Jungs im ASM-Forum wie genau das geht), oder per WinAPI (dazu verweise ich aufs WinAPI-Forum)...
aber ich denke es ist auch nicht so schlimm, wenn du fürn LPT defaultmäßig 0x378 nimmst und das ganze vom benutzer, wenns denn sein muss, im programm verändern lässt (und dann in ne ini-datei abspeichern, oder wie auch immer)
-
Du könntest es natürlich auch über normale WinAPI-Funktionen probieren, da ist die eigentliche Adresse dann egal, und außerdem läufts auch unter vernüftigen Windows Versionen (>NT4).
Hier ist mal ein Link in die FAQ:
[url] _inp und _outp (Parallelschnittstelle) [/url]HTH
-
WinAPI geht definitiv nicht, weil hier nur serielle daten geschickt werden, er will aber alle leitungen einzeln ansprechen, das problem hatte ich auch !
-
und haste auch ne Lösung dafür gefunden ?
-
Mein Proggi läuft unter DOS.
Unter XP geht dieser Zugriff sowieso nicht mehr, da braucht man device treiber, aber frage mich nicht wie man das macht.
-
Original erstellt von Snakey:
Unter XP geht dieser Zugriff sowieso nicht mehr, da braucht man device treiber, aber frage mich nicht wie man das macht.z.B. so wie es unter dem link steht den ich schon einige beiträge vorher gepostet hab???
-
Es gibt für XP auch den DriverLINX Port I/O Driver.
[url]http://www.driverlinx.com/DownLoad/DlPortIO.htm [/url]Der läuft auch unter XP
Gruss,
Sebastian
-
Also,
meine Probleme haben sich doch auch wieder umgelegt,
mal abgesehen davon das sich die Win XP frage für mich eh nicht stellt, weil ich das Prog auf meinem alten 166er (Win98se)schreibe.Will nämlich meinen guten Rechner nicht schrotten.
Also habe das Tutorial bislang doch noch nicht bekommen.
Habe mir aber zusammen gelesen, dass mein Projekt mit dem Befehloutp() laufen sollte ... nur leider soll das nach der Hilfe in Borland's Turbo Cpp der Befehl so aussehen:
outp(Portid,Wert)
das würde für den LPT bedeuten:
outp(0x378, 'c'); // C ist natürlich nur ein Beispiel.
Die frage ist nur wie ich mit dem Behelf ne Spannung auf bestimmte Pins abgeben kann, weil man so ja keinen bestimmten Pin angesprochen hätte.
MFG
M.Hecker
-
Wie du an die Adresse deines Ports kommst hab ich schon geschrieben!!
Wie du Spannungen auf die Pins legst hast du wohl noch nicht ganz verstanden.
Mit deinem C hast du schon Spannungen auf die Pins gelegt:
ASCII Code von C:67 in binärer Schreibweise: 64+2+1 : 00100011.
Folglich hast du an Pin 1,2 und 6 ein High! Oder Low,denn ich weiss jetzt nicht ganz genau ob die auch mit postitiver Logik arbeiten. Musst einfach mal ausmessen.[ Dieser Beitrag wurde am 22.11.2002 um 15:01 Uhr von ºgrimmsenº
editiert. ]
-
tut mir leid aber ich habs einfach noch gar nicht gerallt.
Kann mir vielleicht mal einer nen kleines Codebeispiel geben bei dem nach ein ander ne Spannung auf Pin 1,2 und 3 z.B. gegeben wird ?also in ner ASCII Tabelle steht für C als dezimalzahl 67, das habe ich mal nachfolzogen.
Das Problem ist nur das ich nicht extra den Buchstaben C ausgeben will sondern einfach nur ne Spannung an einen bestimmten Pin anlegen will, weil mein Projekt ja genau etwas steuern soll und nicht einen Wert einem z.B. Drucker übermitteln soll.Also kann mir nochmal jemand sagen wie das geht ?
vor allem, was soll das mit high und low ? kann man dabei die höhe der Soannung variieren oder steht low für keine Spannung und high für eine Spannung ?Stehe im Moment echt auf dem Schlauch.
Hätte einer von euch nen Tutorial zu dem Thema wäre mir sehr geholfen, weil ich dann nicht immer bei jedem scheiss nachfragen müsste.
MFG
MichaelP.S.: Laut Win2k Taschenrechner ist C bzw. die dezimalzahl 67 aber 1000011 im
Binärcode ... bin absolut verwirrt.[ Dieser Beitrag wurde am 22.11.2002 um 17:08 Uhr von Hecker.Michael editiert. ]
-
Pin 1 : 00000001
Pin 2 : 00000010
Pin 3 : 00000100
usw.
Du muss nur das jeweilige Bit setzen (du hast 8 Pins und 8 Bits).Wenn du Pin 1 setzen willst outp(Adr, 1), Pin 8 outp(adr,128), Pin1 und Pin8 outp(Adr, 129);
-
ja okay das habe ich jetzt verstanden.
Aber wie bist du bei Pin 8 auf 128 gekommen ich hätte gedacht, dass es so aussieht.
Pin 1: 00000001
Pin 2: 00000010
Pin 3: 00000100
bis hier hattest du es ja auch schon angegeben
Pin 3: 00001000
Pin 4: 00010000.
.
.Pin 8: 10000000
aber warum hast du bei Pin 8:
outp(0x378,128) ???Habe bei der Adresse jetzt mal die defaultmäige eingetragen
(macht man das überhaupt so oder muss die auch wieder anders geschrieben werden ?).
-
binär (10000000) -> dezimal (128)
-
na klar ... danke.
So jetzt muss ich mir nur noch nen Multimeter organisieren und dann gehts los.
So nebenbei: Hat einer ne Idee bei welchem elektronik Großhandel, Baumarkt etc man sowas am Günstigsten bekommen kann ?Also bei Conrad gibts son Ding für 35€ aber das ist mir zu teuer.
Muss ja keine 500 Funktionen haben.
Voltmesser, Ohm Messer und solche Grundfunktionen reichen ja schon aus.Nochmal vielen Dank.
Mfg Michael
-
aso doch eine Frage habe ich noch.
und zwar wenn ich jetzt ne Spannung auf den LPT lege.
( outp(0x378,2); )
Wie lange bleibt die Spannung dann drauf ?
Muss ich mit der Schleife dafür sorgen das die Spannung da bleibt
oder muss ich mit nem anderen Befehl die Spannung wieder ausstellen ?Denke mal eher das es erstes ist aber habe in nem Tutorial über Basic gesehen das es da die 2. Version war und deshalb bin ich mir unsicher.
Also wie siehts aus ?
MFG
m.Hecker
-
Hallo!
Suche eigentlich einen Beitrag zu einem ganz anderen Thema, aber wenn Du noch weitere Ideen zur Lösung Deines Probs suchst, schau doch mal in die CT, Ausgabe 19/2002, Seite 196ff. Dort findest Du detailliert die Lösung Deines Problems per USB-Port, falls Dein "alter" Computer einen solchen hat...