![]() |
LPT steuerung - Assembler -> "Privileged Instruction
Hallo,
Ich brauche ein Programm dass den LPT-Port ansteuern kann, und zwar möglichst schnell. (Schnell bei der Ausführung :)) Ich hab dazu die DirectPort Komponente runtergeladen. Das hat mit Windows 98 einwandfrei funktioniert. Aber dann hab ich Windows XP draufgemacht und jetzt bringt den Fehler "Provileged Instruction". NUR: mein Bruder hat auch WinXP drauf, und auf seinem Rechner funktioniert das Programm. Ich hab auch die "inpout32" DLL probiert die funktioniert auf beiden Rechnern, braucht aber halt 5-6x soviel Zeit. Wisst ihr wo man da einstelen kann ob der Windows das zulassen soll oder woran das liegen kann? Wir haben beide WinXP Pro SP2 drauf! Auch Administratorrechte hab ich. Ach ja wenn ich das Programm im Win98 kompatibilitätsmodus starte dann bringt er keinen Fehler, gibt aber auch nichts aus und es dauert nochmal viel länger. Danke schonmal im Vorraus! mfg. |
Re: LPT steuerung - Assembler -> "Privileged Instruc
|
Re: LPT steuerung - Assembler -> "Privileged Instruc
Hi omatra,
Des hab ich auch schon gelesen, nur will ich nach möglichkeit nicht noch ewig treiber installieren, sondern des ding halt möglichst schnell auch auf verschiedenen pcs ausführen können. |
Re: LPT steuerung - Assembler -> "Privileged Instruc
hi,
ich habs mal getestet, der treiber da ist gut nur braucht er so ziemlich gleich lang wie die inpout32.dll, die ist sogar noch ein fitzelchen schneller und hat halt nur 32kb :) immer noch ist halt die DirectPort komponente die ja mit dem OUT befehl im assembler recht einfach den port ansteuert etwa 5 bis 6 mal schneller also die beiden varianten mit dem treiber. nur funktioniert das offensichtlich nur mit manchen windows versionen. was kann man da machen damit das läuft? vielleicht irgendwelche sicherheitsrichtlinien verändern oder so? mfg. |
Re: LPT steuerung - Assembler -> "Privileged Instruc
Warum muss die Abfrage des Ports denn so schnell sein?
Dir ist klar das Windows kein Echtzeitsystem ist? Selbst wenn du es mal schnell hinbekommst, so kann es im nächsten Augenblick wieder langsamer sein, weil Windows gerade etwas anderes zutun hat. Deshalb finde ich meine angepriesene Komponente so gut, weil sie es dir erlaubt einen Interrupt-Handler in das System zu integrieren. Dadurch wird Windows auch nicht echtzeitfähig, aber man kann zum Beispiel die Arbeitsgeschwindigkeit drosseln, indem du man äußere Schaltung schlauer machst. Aber ich weiss ja gar nicht was du eigentlich machen willst. Bis dann... Thorsten |
Re: LPT steuerung - Assembler -> "Privileged Instruc
ja des tool von dir funktioniert. aber zum einen port setzten mit dem tool von dir oder der inpout32 dll dauerts eben etwa 0,005ms - 0,006ms und mit dem direkten aufruf über den assembler code dauerts halt nur 0,0015ms.
naja ich werd morgen mal schauen ob der lpt controller diese geschwindigkeit überhaupt schafft nit nem frequenzzähler und wenn ers nicht schafft erübrigt sich des ja von selber :). mfg. |
Re: LPT steuerung - Assembler -> "Privileged Instruc
Schade, du hast immer noch nicht erwähnt was du da eigentlich machen willst.
|
Re: LPT steuerung - Assembler -> "Privileged Instruc
ja.
also: des wird ein rotor der sich dreht, auf dem sind LEDs drauf die dann so blinken dass sich text ergibt :) um die LEDs anzusteuern brauch ich ne ausreichend schnelle schnittstelle weil ich die seriell ansteuern will. Ich habs heut mal mitm oszilloskop und nem zähler ausprobiert, wenn ich die inpout.dll verwende schaff ich etwa 100 khz. Mit dem Assembler befehl vom TDirectPort schafft man zwar etwa 400-500 khz aber das erübrigt sich für mich da ich zumindest mit meinem lpt controller in der kurzen zeit nicht mal die volle spannung aufgebaut krieg. Bei 100khz ist die Spannung am ende vorm wieder ausschalten fast voll da, bei 400 khz ist die spannung nicht mal zu nem drittel aufgebaut. (blöder controller). Fazit: Ich werde wohl die inpout32.dll verwenden da sich die leicht einbinden lässt. Trotzdem danke für eure hilfe! |
Re: LPT steuerung - Assembler -> "Privileged Instruc
Hallo edosoft,
danke, dass du doch noch mehr verraten hast. Zitat:
Vielleicht solltest du dir noch mal mehr Gedanken über deine Hardware machen. Die Parallele-Schnittstelle ist nun mal eigentlich für parallele Aktivitäten da. Nutze das doch als Vorteil für dich. Mit dem Treiber, den ich dir vorgeschlagen habe, kannst du einen Interrupthandler realisieren, der immer dann wenn er aufgerufen wird, Daten an deine Schaltung weitergibt. Deine Schaltung sollte aus einem Schieberegister bestehen, dass man parallel laden kann. So könntest du mit einer Übertragung 8Bits in das Schieberegister laden und an deine eigentlich Schaltung seriell weitergeben. Damit hättest du schonmal eine Geschwindigkeitssteigerung von 8 erreicht. Da die Parallele Schnittstelle noch 4 weitere Steuerleitungen hat, kannst du noch mehr 8Bit-Schieberegister ansteuern und diese kaskadieren. Sagen wir mal 2Bit also 4 Bausteine, dann hast eine Geschwindigkeitssteigerung von ungefähr 32. Mit 4 mal Laden kannst du dann 32Bit übertragen. Es ergibt sich natürlich dadurch eine kleine Verzögerung, wenn du etwas am Datenstrom im Rechner änderst, bis es am Display ankommt. Über den Interrupteingang kann dann die Schaltung dem PC sagen, wann es Daten benötigt. Dadurch hast du eine lose Ankopplung deines Systems an den steuernden PC. Die PC-Geschwindigkeit ist dann nicht mehr so relevant. Achso, die äußere Schaltung muss dann natürlich einen eigenen Takt haben. Dieses Verfahren habe ich bei meinem RDS-Coder eingesetzt und es funktioniert wunderbar. Natürlich ist dann der Hardwareaufwand etwas größer, aber bei deiner Ausstattung (was man so raushören konnte) sollte das doch kein Problem sein. MfG Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz