USB -> AVR -> Parallelport, geht das?

Gast #2343621
Lesenswert?

Hallo,

kann man mit einem AVR, der über einen USB-Port gesteuert wird, unter 
WinXP sinnvoll einen Parallelport simulieren, um einen Schrittmotor zu 
steuern?

WinXP -> USB -> AVR -> Parallelport -> Schrittmotor



Wenn nein, gibt es eine Möglichkeit, den Parallelport unter XP direkt 
anzusteuern, z.B. per Quickbasic oder C?
Gast #2343640
Lesenswert?

Da fällt mir grade was ein:

kann man nicht einfach den Rechner irgendwie im "Dos-Modus" booten? Da 
läuft Quickbasic ja sowieso am besten und ich kann die alten 
Steppersteuerprogramme von mir direkt verwenden (ev. Zeitanpassung wegen 
schnellerem System).
Gast #2343647
Lesenswert?

Nur wenn man sich einen eigenen Treiber für XP schreibt (in beiden 
Fällen).
Da wirst du dir wohl eigenen Treiber für schreiben müßen
(höchstwarscheinlich Kernel) da Windows keine direkten Hardwarezugriffe
mehr so einfach unterstützt. Windows behandelt den Parallelport nur noch
als Drucker -> Das heißt du kannst ne Datei hinschicken über den
entsprechenden Druckertreiber.
Es gibt jedoch Tools die als Notlösung funktionieren (wie z.B. GiveIO)
und deiner Software den entsprechenden IO Privileg Level verpassen.
Gast #2343670
Lesenswert?

Volker Schulz schrieb:
>> Da fällt mir grade was ein:
>>
>> kann man nicht einfach den Rechner irgendwie im "Dos-Modus" booten?
>> [...]
>
> Klaro. Im Zweifelsfalle mit einer Bootdisk.
>
> http://www.bootdisk.com/
>
> Volker

Ok, dann werde ich den Weg weiter verfolgen. Damit würden eventuell 
auftretende Timingprobleme unter Windows von vorne herein wegfallen.

Ansonsten Danke auch für die anderen Antworten!
#2343681
Lesenswert?

uwe schrieb:
> Nur wenn man sich einen eigenen Treiber für XP schreibt (in beiden
> Fällen).
> Da wirst du dir wohl eigenen Treiber für schreiben müßen
> (höchstwarscheinlich Kernel) da Windows keine direkten Hardwarezugriffe
> mehr so einfach unterstützt. Windows behandelt den Parallelport nur noch
> als Drucker -> Das heißt du kannst ne Datei hinschicken über den
> entsprechenden Druckertreiber.
> Es gibt jedoch Tools die als Notlösung funktionieren (wie z.B. GiveIO)
> und deiner Software den entsprechenden IO Privileg Level verpassen.

Blödsinn. Der Druckerport lässt sich selbst unter Win7 direkt 
ansprechen. Hier Code: http://www.codeproject.com/KB/cs/csppleds.aspx
Gast #2343694
Lesenswert?

Stefan Noack schrieb:
> Der Druckerport lässt sich selbst unter Win7 direkt über die
> inpout32.dll ansprechen.

Das ist ein Widerspruch. Direkt bedeutet, wie das Wort schon sagt, die 
Hardware direkt über die IO-Register anzusprechen. Inpout.dll bildet 
eine Abstraktionsebene zwischen Hardware und Anwendungsprogramm. Somit 
kann hier nicht von direktem Ansprechen des Druckerports gesprochen 
werden.
#2343698
Lesenswert?

Stefan Noack schrieb:
> [...]
> Blödsinn. Der Druckerport lässt sich selbst unter Win7 direkt
> ansprechen. Hier Code: http://www.codeproject.com/KB/cs/csppleds.aspx

Wenn Du mal genau hinliest, steht da dass es eben nicht geht:

"When I was using Windows 98 I could reach the ports with a function 
which is "outportb". When I upgraded to Windows 2000 this failed because 
of its kernel. You can not reach the ports directly in NT, 2000 and XP 
because of their kernel and their printer drivers."

Der Autor benutzt einen frei erhaeltlichen Treiber (inpout32.dll), der 
inportb und outportb zur Verfuegung stellt. Das bringt einem freilich 
nichts bei bereits fertig compilierten Programmen...

Volker
#2343748
Lesenswert?

Volker Schulz schrieb:
> Stefan Noack schrieb:
>> [...]
>> Blödsinn. Der Druckerport lässt sich selbst unter Win7 direkt
>> ansprechen. Hier Code: http://www.codeproject.com/KB/cs/csppleds.aspx
>
> Wenn Du mal genau hinliest, steht da dass es eben nicht geht:
>
> "When I was using Windows 98 I could reach the ports with a function
> which is "outportb". When I upgraded to Windows 2000 this failed because
> of its kernel. You can not reach the ports directly in NT, 2000 and XP
> because of their kernel and their printer drivers."
>
> Der Autor benutzt einen frei erhaeltlichen Treiber (inpout32.dll), der
> inportb und outportb zur Verfuegung stellt. Das bringt einem freilich
> nichts bei bereits fertig compilierten Programmen...
>
> Volker

Hm.. Stimmt. Diese Funktion gibt es im Kernel nicht mehr. Andererseits 
kann man auch einfach ein Handle mit der entsprechenden adresse (0x378) 
erstellen und munter Daten reinschreiben -- entsprechende Privilegien 
vorausgesetzt... (nichts anders macht wahrscheinlich die inpout32.dll)

Oder man benutzt "CreateFileA" aus kernel32.dll, um die Datei "LPT1:" zu 
öffnen. Das klappt lustigerweise auch. Man kann dann dort reinschreiben 
und die Bytes landen 1:1 am Parallelport. Allerdings hat man da keinen 
direkten Zugriff auf die Steuerleitungen.

Aber egal. Der Threadersteller bootet jetzt einfach sein DOS und gut ist 
:D
#2343753
Lesenswert?

Stefan Noack schrieb:
> Hm.. Stimmt. Diese Funktion gibt es im Kernel nicht mehr. Andererseits
> kann man auch einfach ein Handle mit der entsprechenden adresse (0x378)
> erstellen und munter Daten reinschreiben -- entsprechende Privilegien
> vorausgesetzt... (nichts anders macht wahrscheinlich die inpout32.dll)

Davon gehe ich mal aus. Device Driver laufen im Kernel Mode und duerfen 
deshalb... ;)

> Oder man benutzt "CreateFileA" aus kernel32.dll, um die Datei "LPT1:" zu
> öffnen. Das klappt lustigerweise auch. Man kann dann dort reinschreiben
> und die Bytes landen 1:1 am Parallelport. Allerdings hat man da keinen
> direkten Zugriff auf die Steuerleitungen.

Und bekommt im Zweifelsfall auch Timingprobleme. Aber unter DOS sollte 
das ja dann stabil laufen... ;)

Volker
Gast #2344740
Lesenswert?

>Und bekommt im Zweifelsfall auch Timingprobleme. Aber unter DOS sollte
>das ja dann stabil laufen... ;)
Das kann sicher sein. Das Gebilde kommt zum Laufen. Aber in der Regel 
braucht man bei Schrittmotorensteuerungen Echtzeit-Timing.
Das geht verloren.
Das trifft aber auch auf den Parallelport unter XP und ff. zu.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren