Entwickler-Ecke
Windows API - Motor über Pc ausgang steuern...
Philipp_Reitter - Di 30.01.07 13:21
Titel: Motor über Pc ausgang steuern...
Hi
ich weiß nicht ob das in diesen Bereich passt sonst helft mir weiter wo hin damit.
also ich will einen motor antreiben ....
geht das?
und wenn ja wie ?
mfg
patrick dee - Di 30.01.07 13:42
Titel: gehentut das schon ...
hi
wie willst du den Motor betreiben ? an und aus ? evtl mit USB steuern ? das habe ich mal mit velleman usb board gemacht. Brauchts dazu ein Relais und seperate Stromversorgung usw.
Bei dem Bausatz USB Platine ist eine CD mit Demos dabei für Delphi.
http://www.messtechnik-online.at/velleman/velleman.html
da kannst mal schauen.
mfg
patrick
Philipp_Reitter - Di 30.01.07 14:22
einfach an u. aus...
kann ich nicht einfach bei einem COMN ausgang sagen strom an, aus?
Mfg
Saubäär - Di 30.01.07 14:32
Hi Philipp,
ich habe es mal über den Parallelport und der 'io.dll' gemacht. Das ist wirklich sehr einfach. Einfach nach nem Tutorial für den Parallelport und die dll vllt. über Google suchen.
Außerdem wäre ein Transistor von Vorteil, damit der Motor nicht über den Strom des Parallelports gespeist wird.
Wie groß ist der Motor, den du steuern willst?
Gruß
Saubäär
Philipp_Reitter - Di 30.01.07 15:51
danke für deine aufschlussreiche antwort.
hätt von aleine auch nen transistor hergenommen!
der motor ist nicht groß... so wie in so kleinen spielzeug ventilatoren..
falls dich interessiert: ich fil mit ner kamera eine weiße fläch und da lass ich dann nen ball drüber rollen. das prog erkennt das und lässt den motor so lange laufen biss eine bewegliche scheibe da ist wo der ball hin will und fängt ihn ab...
mfg
Saubäär - Di 30.01.07 15:58
Klingt interessant!
wenns dich interessiert habe ich auf meiner Homepage unter 'Projekte' ein Projekt, in dem ich mit dem Parallelport gearbeitet habe.
Wenn du noch weitere Fragen zur io.dll hast (falls du damit arbeitest), kannste mich gerne fragen.
Gruß
Saubäär
Philipp_Reitter - Di 30.01.07 17:55
kannst du mir die ad. von deiner homepage sagen?
ja und zwar:
1) wo muss ich die kabel bei'm pc anschließen?
2)hab wo gelesen dass ein port zugriff in xp ned geht und dass io.dll nicht gut ist...
mfg
Saubäär - Di 30.01.07 19:02
klick (unten) auf www
Philipp_Reitter hat folgendes geschrieben: |
1) wo muss ich die kabel bei'm pc anschließen?
|
Na am Parallelport (LPT, Druckeranschluss). Dazu brauchst du ein bestimmtes Kabel. (D-SUB Stecker hieß der glaube ich !?!)
Philipp_Reitter hat folgendes geschrieben: |
2)hab wo gelesen dass ein port zugriff in xp ned geht
|
Der Portzugriff läuft mit der dll unter XP (ohne dll funktionierts nicht :wink: ).
Philipp_Reitter hat folgendes geschrieben: |
und dass io.dll nicht gut ist...
|
Naja ich habe die dll nicht programmiert, kann also nicht sagen wie sie arbeitet.
Ich kann nur sagen, dass ich keine Probleme hatte und somit nicht bestätigen kann, dass sie 'nicht gut' sei...
Gruß
Bäär
Philipp_Reitter - Di 30.01.07 19:14
ok...
hab den code auf deiner hp gesehen...
3 fragen...
woher weiß ich welcher pin welcher ist?
kann ich nicht einfach mit einem kabel reinfahren?
oder das kabel meines drucker s verwenden?
wie kann ich sagen : wenn strom von pin x wieder in eien anderen reinfließt dann mach was.
hab auf deiner hp irgendwas von if=1111 gelesen
kannst du das erlöutern?
mfg
Saubäär - Di 30.01.07 19:43
Philipp_Reitter hat folgendes geschrieben: |
woher weiß ich welcher pin welcher ist?
|
z.B.
http://www.linux-magazin.de/Artikel/ausgabe/1999/10/IO/parport_s.gif
Philipp_Reitter hat folgendes geschrieben: |
kann ich nicht einfach mit einem kabel reinfahren?
oder das kabel meines drucker s verwenden?
|
Ich würde schon das Druckerkabel verwenden. :wink:
Philipp_Reitter hat folgendes geschrieben: |
wie kann ich sagen : wenn strom von pin x wieder in eien anderen reinfließt dann mach was.
hab auf deiner hp irgendwas von if=1111 gelesen
kannst du das erlöutern?
|
Du hast eine Procedure PortOut, mit der du das Signal am Pin auf High bzw. Low setzt. Die Pins (D0- D7) werden Bitweise gezählt.
Delphi-Quelltext
1: 2: 3: 4: 5:
| PortOut($378, 0) PortOut($378, 1) PortOut($378, 2) PortOut($378, 3) PortOut($378, 255) |
Außerdem hast du die Funktion PortIn mit der du das Signal von Pins auslesen kannst. Wenn ich mich recht erinnere hatte ich den Pin 13 als Eingangspin benutzt.
Delphi-Quelltext
1:
| if PortIn($379) = 111 then |
wird True sobald an Pin 13 ein Lowsignal!! ankommt. Der Pin hat standardmäßig ein Highsignal. Wird jetzt ein Lowsignal angelegt, nimmt der Pin 13 auch ein Lowsignal an.
Ich habe den Pin D0 (Lowsignal) mit Pin 13 verbunden und per Timer abgefragt, wann der Pin 13 low ist.
Als Anhang habe ich dir noch ein Tool mit angehängt, mit dem du den Status deines Parallelports auslesen kannst.
Ich habe das Thema schon eine gewisse Zeit nicht mehr behandelt und kann daher einige Sachen auch nicht mehr genau nachvollziehen.
Hoffentlich hat es dir trotzdem ein wenig geholfen.
Bäär
Philipp_Reitter - Mi 31.01.07 10:23
ok so langsam kapiere ich's
nur....
woher bekomm ich die ganzen
$379
$378
ect. und ihre bedeutung?
und was heißt das 1111?
low oder hi ?
ah ja und welche sind + und welche - ?
und warum ist
PortOut($378, 2) = D1
und
PortOut($378, 3) = D1 u. D0
so stehts jedenfalls in deinem quelltext oben...
und welche spannung kommt by: hi und bei low heraus
ah und wie man die pins auf hi setzt steht ja oben aber wie auf low?
jaenicke - Mi 31.01.07 11:08
Philipp_Reitter hat folgendes geschrieben: |
| ah ja und welche sind + und welche - ? |
http://info.electronicwerkstatt.de/bereiche/stecker/parallel.html
Philipp_Reitter hat folgendes geschrieben: |
und warum ist
PortOut($378, 2) = D1
und
PortOut($378, 3) = D1 u. D0 |
Du musst das ganze Bitweise betrachten! 2 ist binär 10, 3 ist binär 11, so und je ein Bit entspricht jetzt einem Pin. Ganz rechts Pin 0, links daneben Pin 1, etc.
Ist das Bit auf 1 gesetzt, dann ist der Pin auf High, ist das Bit 0 (also nicht gesetzt) dann auf Low.
Ein Bit in einem Integer setzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var i: Integer; begin i := 1; i := i or (1 shl 2); end; |
Abfragen kannst du mit
if i and (1 shl 2) = 1 then, damit fragst du z.B. ab, ob das dritte Bit gesetzt ist.
Philipp_Reitter hat folgendes geschrieben: |
| ah und wie man die pins auf hi setzt steht ja oben aber wie auf low? |
Wie eben gesagt: Dort wo das Bit 0 ist, ist Low, wo das Bit 1 ist, ist High.
Saubäär - Mi 31.01.07 13:23
Hi,
Philipp_Reitter hat folgendes geschrieben: |
woher bekomm ich die ganzen
$379
$378
|
Systemsteuerung > System > Geräte-Manager > LPT > Eigenschaften > Ressourcen > E/A- Bereich
Philipp_Reitter hat folgendes geschrieben: |
und was heißt das 1111?
low oder hi ?
|
Das kannst du am besten mit parmon.exe auslesen
Philipp_Reitter hat folgendes geschrieben: |
und welche spannung kommt by: hi und bei low heraus
|
Es sollen wohl annähernd 0V und 5V sein. (Darum ist ein Transistor auch wichtig!)
Gruß
Saubäär
Saubäär - Mi 31.01.07 13:59
Philipp_Reitter hat folgendes geschrieben: |
und welche spannung kommt by: hi und bei low heraus
|
Es sollen wohl annähernd 0V und 5V sein. (Darum ist ein Transistor auch wichtig!)
Ansonsten einfach mal mit nem Multimeter durchmessen. :wink:
Gruß
Saubäär
zlotti - Do 07.06.07 18:34
Sorry das ich sonen altes Thema rauskram, aber möchte ungefähr das gleiche machen.
Hab das jetz mal ausprobiert was Saubäär geschrieben hat.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure Portout(Port : Word; Data : Byte); stdcall; external 'io.dll'; function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
procedure TForm1.FormCreate(Sender: TObject); begin PortOut($378,0); end; |
Er zeigt mir aber immer an, das der 'Prozedureinsprungspunkt Portout und Portin nicht gefunden wurde'.
Kann das sein das ich ne andere dll hab? Oder hab ich was falsch gemacht?
Wär echt goil wenn mir jemand helfen könnte!
Saubäär - Do 07.06.07 20:19
Hallo Zlotti,
ich habe es eben nochmal ausprobiert, da ich auch lange nicht mehr damit gearbeitet habe. Dabei ist mir aufgefallen, dass du den Dll-
Aufruf von PortOut falsch geschrieben hast (Portout).
Delphi-Quelltext
1: 2: 3: 4:
| implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll'; function PortIn(Port:Word):Byte; stdcall; external 'io.dll'; |
Irgendwie scheints da Probleme zu geben.
Desweiteren muss die Dll entweder im Programmverzeichnis oder in C:\Windows\System32 liegen.
Ich habe dir nochmal die io.dll angehängt. Schön zum Testen ist auch der Parallelmonitor (ein paar Posts weiter oben ^).
Ich hoffe ich konnte dir helfen.
Gruß
zlotti - Do 07.06.07 21:38
1A! So wie es aussieht funzt das jetz! Hab noch nischt angeschlossen um das zu probieren, aber er compiliert ohne Probleme!
Dange Dange Dange!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!