C# Schrittmotor ansteuern LPT / ControlPort.Output(0x378, 0xff);?
Hey, ich hab hier einen Codeausschnitt aus C#:
ControlPort.Output(0x378, 0xff);
der Befehl steht unter der Methode eines Buttons und dieser Button soll - wenn man ihn klickt - ein Signal an einen Schrittmotor senden. Das funktioniert auch soweit, man hört dass das Signal am Motor ankommt, dennoch bewegt er sich nicht. Ich kenne diesen Befehl auch nur teilweise, vielleicht findet sich jemand der mir das (0x378, 0xff) genauer erklären kann oder einen Beispielcode hat, der auch funktioniert (in etlichen Foren stehen Codes dazu, die haben dann aber falsche verweise oder völlig andere Methoden wie zuvor beschrieben usw...). Hab schon unendlich viel in Google gesucht und auch gefunden, jedoch hat nichts den gewünschten Erfolg gebracht.
Danke
2 Antworten
0x378, 0x379 und 0x37A sind die Adressen der ersten LPT-Schnittstelle bei Mainboards mit on-Board-LPT-Schnittstelle. (0x278, 0x279 und 0x29A sind die der zweiten LPT-Schnittstelle, 0x3BC, 0x3BD und 0x3BE die der dritten - falls es jemals Rechner mit drei LPT-Schnittstellen gab.)
Durch das Schreiben eines Wertes an Adresse 0x378 werden die entsprechenden Bits auf die Pins D0-D7 (also die Datenleitungen) gelegt. Adresse 0x379 dient zum Rücklesen der Statusleitungen (Papierende usw.); 0x37A zum Setzen der Steuerleitungen.
Der Befehl, den du angegeben hast, setzt also alle 8 Datenleitungen auf "1".
Ich gehe aufgrund des Methodennamens "ControlPort.Output" davon aus, dass du die DLL "inpout32.dll" verwendest. Diese DLL ruft einen Treiber ("inpout32.sys" (32-bit) oder "inpoutx64.sys" (64-bit)) auf, der dann auf den Port zugreift. (In neuen Windows-Versionen sind Port-Zugriffe nur über Treiber möglich.)
Hast du diesen Treiber installiert? Falls nein, passiert natürlich rein gar nichts!
Da ein anderer User in diesem Zusammenhang nach USB-zu-LPT-Adaptern gefragt hat:
- Über Portadressen kann man prinzipiell nur Geräte ansteuern, die direkt an der CPU hängen. Das wären der on-Board-LPT-Port oder der USB-Hostcontroller aber eben keine USB-Geräte! Es kann daher keinen USB-zu-LPT-Adapter geben, der sich über Port 0x378 ansteuern lässt. Möglich wäre allerdings ein Austausch der Datei "inpout32.dll", so dass der Befehl "ControlPort.Output" auf den USB-Bus zugreift anstatt das zu machen, was er "eigentlich" tun sollte...
- Die auf dem Markt befindlichen USB-zu-LPT-Wandler bieten in der Regel nicht die Möglichkeit, die Datenleitungen D0-D7 direkt anzusteuern. Daher kann man solche Adapter nicht zusammen mit solchen Platinen, wie du sie hast, verwenden.
Nachtrag:
Zum Thema USB-zu-LPT-Wandler habe ich folgendes beim Googlen gefunden:
https://www-user.tu-chemnitz.de/~ygu/bastelecke/PC/Programmierger%C3%A4te/UsbPrn-Adapter/
Schau in einer geeigneten Referenz nach, was die zwei Parameter sind. Dann weisst du auch was die Werte bewirken.