Forum: Mikrocontroller und Digitale Elektronik USB -> AVR -> Parallelport, geht das?


von Dormann (Gast)


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?

von Dormann (Gast)


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).

von Volker S. (volkerschulz)


Lesenswert?

Dormann 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

von uwe (Gast)


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.

von Uwe Bonnes (Gast)


Lesenswert?

Ueber \\\\.\\$VDMLPT1 kann man den Parallelport fast wie unter DOS 
ansteuern. Allerdinsg habe ich keine offizielle Doku dazu gefunden.

Ich verwende es in
svn co https://xc3sprog.svn.sourceforge.net/svnroot/xc3sprog xc3sprog
und
http://winparport.sourceforge.net/ hat auch Infos

von Dormann (Gast)


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!

von Stefan N. (stefan_n)


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

von Michael (Gast)


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.

von Volker S. (volkerschulz)


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

von Stefan N. (stefan_n)


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

von Volker S. (volkerschulz)


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

von Michael_ (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.