Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 10.05.2014, 21:56 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo,
bisher programmiere ich kleine Hardwarebasteleien unter Win XP mit QBASIC.
Nun möchte ich gerne mit Schülern Freebasic unter Win 7 verwenden, um selbst gebaute Hardware - von der Ampel bis zum Handhabungsroboter- zu steuern.
Ich habe stundenlang gesucht und widersprüchliche Informationen gefunden. Scheinbar kann der parallele Port nicht direkt angesprochen werden. Andere sagen, dass das geht. Nun komme ich nicht dahinter - geht das?
Ist das u.U. so kompliziert, dass es schwer vermittelbar wird?
Könnte mir jemand eine Antwort und vielleicht ein kleines Beispiel nennen?
Ich stecke fest und wäre sehr dankbar!
LG Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1236 Wohnort: Ruhrpott
|
Verfasst am: 10.05.2014, 22:23 Titel: |
|
|
Hallo Gerrit!
Mit welchem Treiber hast du denn den Parallelport unter WinXP angesteuert?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 11.05.2014, 08:16 Titel: |
|
|
Hallo Grindstone,
für den Zugriff unter Windows 98 auf die Druckerschnittstelle verwende ich "UserPort 1.0" von Tomas Franzon. Das läuft ohne Probleme. Toll wäre, wenn es so etwas auch für Windows 7 gäbe!
(Danke für die schnelle Reaktion, ich hatte den Rechner schon aus.)
LG Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 11.05.2014, 11:31 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo,
sorry,
es muss in meinem vorherigen Beitrag heißen ... Windows XP... nicht Windows 98 ..
LG
Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 11.05.2014, 11:56 Titel: |
|
|
Ich wuerde an deiner Stelle lieber ueber die Verwendung eines GPIO-Adapters fuer denUSB-Port nachdenken, Parallelport ist halt schon echt alt.
kurzes Googlen fand Dinger fuer 20Euro, was imho bedeutend billiger geht. mit ein wenig programmier- und bastelerfahrung kannst du das vermutlicb fuer 2-5Euro/Stueck hinkrjegen mit
v-usb und einem ATmega8
Oder das usb-lab1040. insbesondere letzteres koennte vlt schon eine fertige loesung fuer dich haben. _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 11.05.2014, 12:33 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo,
vielen Dank für deine Tipps.
Um diese Lösungen komme ich letztlich gar nicht herum.
Aber im Moment ist es so: Das Material ist da, das Interface läuft wie geschmiert, das Erlernen ist ergreifend einfach, nach einer Stunde kann jeder das Gefühl haben, dass er eine Chance hat, das mal zu können ... .
Dann kann man nachlegen.
Nun suche ich nach solch einer Zwischenlösung: Win 7 und Freebasic und lpt.
Danke!
LG Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 11.05.2014, 18:54 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo,
Super, tolle Sache, die Richtung ist es!
Allein, es müsste noch schlichter in der Sprache sein, dann wäre es genau das richtige.
Danke!
LG Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 12.05.2014, 18:26 Titel: Parallelport und aktuelle Windosen |
|
|
Hallo Gerrit,
den Parallelport mit FreeBasic anzusteuern ist nicht wirklich schwer. Zumindest bei meinem 32bit Vista laufen die folgenden Varianten:
Code: | Out &h378, &b10000001
Print Bin(Inp(&h378))
Sleep
Out &h378, 0 |
FreeBasic verwendet einen eigenen Treiber namens fbportio.sys. Den schneidet sich die compilierte EXE selbst "aus den Rippen" und kopiert es in das Treiberverzeichnis (bei 32bit ist das Windows\System32\drivers, bei 64bit Windosen Windows\SysWOW64\drivers). Dazu muss das Programm mit Admin-Rechten gestartet werden, und zwar einmal nach jedem Windows-Start (jedenfalls bei mir).
Code: | Extern "Windows-Ms" Lib "inpout32"
Declare Function Inp32(PortAddress as UShort) as UShort
Declare Sub Out32(PortAddress as UShort, Value as UShort)
End Extern
Out32 &h378, &b00100100
Print Bin(Inp32(&h378))
Sleep
Out32 &h378, 0 |
Bei dieser Variante wird inpout32.dll verwendet. Die dll muss natürlich vorhanden sein; üblicherweise im selben Verzeichnis wie das aufrufende Programm. Auch hier sind Admin-Rechte erforderlich, aber nur beim allerersten Start. Dann landet ein sys-Treiber (inpout32.sys oder hwinterface.sys) den o.g. Verzeichnissen. Anschließend reichen normale Benutzerprivilegien zum Gebrauch.
Aktuelle Versionen der dll, die auch auf 64bit Systemen laufen, können wir hier herunterladen:
http://www.highrez.co.uk/Downloads/InpOut32/default.htm
Version von Henrik Haftmann:
http://www-user.tu-chemnitz.de/~heha/hs/inpout32-h%23s.zip _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 12.05.2014, 18:51 Titel: |
|
|
Hallo Steini63,
das ist ja toll und genau das, was ich suche!
Ich werde es ausprobieren und kurze Rückmeldung geben.
Wenn das so funktioniert, mache ich ein Bier auf euer Wohl auf!
Lieben Gruß
Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1236 Wohnort: Ruhrpott
|
|
Nach oben |
|
|
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 13.05.2014, 23:29 Titel: |
|
|
(in Bezug auf eine PN, die ich zwecks Kontextwahrung mit Gerrits Zustimmung gerne noch hier reineditiere):
Ja, mit GPIO-Modulen hast du einen relativ einfachen Zugriff auf die steuerbaren GPIO-Pins des Moduls, d.h. du kannst sie an- und ausschalten, oder abfragen, ob z.B. ein angeschlossener Taster gedrueckt ist oder nicht. Manche Module bieten dir auch einen oder mehrere DACs, d.h. du kannst z.B. einen Photo- oder Drehwiderstand abfragen.
Eventuell kann dir das hier weiterhelfen, oder zumindest als erster Einstieg dienen:
http://www.ullihome.de/wiki/USBAVRLab/Firmwares/Bitbanging
http://www.ullihome.de/wiki/USBAVRLab/index allgemein.
Ich habe es selbst nicht genutzt, aber der Beschreibung nach liegt eine .DLL bei, die man einfach in eigene Programme einbinden kann, und dann Befehle absetzen kann wie
Code: |
set_pin(1); // schalte die erste LED an
clear_pin(3); // schalte die dritte LED aus
if (get_pin_state(2)) // wenn der Button gedrueckt wurde, ...
|
Du haettest damit sechs steuerbare Pins, wobei mit den gleichen Bauteilen und einer leicht veraenderten Platine wohl sehr viel mehr als nur sechs Pins moeglich waeren.
Damit koenntest du nicht nur LEDs schalten, sondern auch -- mit geeignetem Motortreiber natuerlich -- Motoren ansteuern (direkt an die Pins haengen geht nicht, das wuerde sie ueberlasten; aber das Problem haettest du mit dem Parallelport auch)
Und, das ganze waere auch unter Linux machbar (vermutlich).
Ein weiterer Vorschlag waere die Anschaffung eines Raspberry Pis oder eines Beaglebone Blacks. Beides sind Linux-betriebene Klein(st)computer fuer 30 bzw ~40 Euro, die unter anderem eine Steckerleiste mit GPIO-Ports bieten.
Das koennte aber Overkill sein, zumal RasPis nicht unbedingt sehr schnell sind _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 14.05.2014, 16:43 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo Flo,
das ist sehr ermutigend und bringt mich echt weiter!
Vielen Dank!
LG
Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 14.05.2014, 19:41 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo,
Freebasic läuft unter Win XP geschmeidig.
ABER: An LPT hängt ein Interface mit LEDs. Gebe ich zum Probieren ein:
Extern "Windows-Ms" Lib "inpout32"
Declare Function Inp32(PortAddress as UShort) as UShort
Declare Sub Out32(PortAddress as UShort, Value as UShort)
End Extern
Out32 &h378, &b00100100
Sleep 5000
dann meckert das Programm:
... undefined reference to 'Out 32'
Es geht scheinbar um die Schreibweise von Portadresse und Byte. Das &-Zeichen wird als unpassend angesehen.
Nun will ich nicht jedesmal um Hilfe schreien, wenn mal was nicht läuft, ich finde aber keine Dokumentation um den Fehler systematisch einzukreisen.
Kann mir jemand Rat geben: Wo kann ich da suchen?
LG
Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 14.05.2014, 21:28 Titel: |
|
|
Bei mir geht es auch mit WinXP!?
Anscheinend findet er die Prozedur Out32 innerhalb der DLL nicht.
Ersten Start mit Admin-Rechten gemacht?
Groß-/Kleinschreibung ist für den Prozedurnamen relevant, das muss genau Out32 lauten. _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 15.05.2014, 20:58 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo,
es hat geklappt!!!! Windows XP, FreeBasic, parallele Schnittstelle, Out-Befehl:
Lämchen an und aus, Motor an und aus - wunderbar!
Allerdings ist mir nicht ganz klar woran es nun im Einzelnen liegt:
- Ich bin Steinis Rat gefolgt und habe das Programm als Administrator gestartet. Dafür musste ich erst mal ein Passwort für den Administrator einrichten, damit XP das überhaupt zulässt.
- Dann habe ich den Code eingegeben
Extern "Windows-Ms" Lib "inpout32"
Declare Function Inp32(PortAddress as UShort) as UShort
Declare Sub Out32(PortAddress as UShort, Value as UShort)
End Extern
Out32 &h378, &b00100100
Sleep 5000
das ging nicht.
- Wildes Herumprobieren führte mich in der bisherigen Out32-Zeile zum Text
OUT 888,1
das lief!
- Auch
Out &h378, 1
lief!
- Auch weiteres kurzes Herumspielen funktionierte.
Der Eingabeteil meines Interfaces ist z.Zt. kaputt, über den INP-Befehl kann ich noch nichts sagen. Ich werde den weiteren Fortschritt melden.
- Die Logik der .dll-Dateien und der Fehlermeldungen erschließt sich mir noch nicht. Aber ich bin guter Dinge, mich an tiefere Einblicke heran zu wagen.
Vielen Dank an Euch, das hat Vieles leichter gemacht!
Ich bin wirklich beeindruckt, wie Menschen in solch einem Forum anderen weiterhelfen wollen und können.
Jetzt trinke ich ein Bier auf euer Wohl.
LG Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1236 Wohnort: Ruhrpott
|
Verfasst am: 15.05.2014, 23:46 Titel: |
|
|
Hallo Gerrit
Die neuen Befehle müssen korrekt in das Programm eingebunden werden:
Code: | 'parallelporttreiber für Windows XP einbinden
Dim parallelport As Any Ptr
Dim Shared OUT32 As Sub (Adresse As integer, Wert As Integer)
Dim Shared INP32 As Function (Adresse As Integer ) As Integer
parallelport = DylibLoad("inpout32.dll") 'treiber laden
If parallelport Then 'neue befehle deklarieren
Out32 = DylibSymbol(parallelport, "Out32") 'byte ausgeben
Inp32 = DylibSymbol(parallelport, "Inp32") 'byte einlesen
Else 'fehler
Print "INPOUT32.dll nicht gefunden."
Sleep
EndIf |
Dein Steuerbefehl würde dann lauten: Code: | Out32(&h378, &b00100100) |
Die Befehle müssen übrigens nicht zwangsläufig "Out32" und "Inp32" heißen, die Namen sind frei wählbar. Du könntest sogar die ursprüglichen Schlüsselwörter "Out" und "Inp" beibehalten, indem du sie umdefinierst. Dadurch könntest du deine alten Programme unverändert weiterbenutzen. Code: | #Undef Out
#Undef Inp
Dim parallelport As Any Ptr
Dim Shared Out As Sub (Adresse As integer, Wert As Integer)
Dim Shared Inp As Function (Adresse As Integer ) As Integer
parallelport = DylibLoad("inpout32.dll") 'treiber laden
If parallelport Then 'neue befehle deklarieren
Out = DylibSymbol(parallelport, "Out32") 'byte ausgeben
Inp = DylibSymbol(parallelport, "Inp32") 'byte einlesen
Else 'fehler
Print "INPOUT32.dll nicht gefunden."
Sleep
EndIf |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 16.05.2014, 17:26 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo Grindstone ,
vielen Dank für deine ausführliche Hilfe. Mit den ganzen Deklarartionen muss ich mich wohl eingehender beschäftigen, vielleicht mal probieren, selbst eine DLL zu erstellen.
Heute musste ich eine kleine Ampel ausprobieren und war ganz glücklich, das mit FreeBasic als Administrator mit den herkömmlichen Befehlen wie unter QBasic tun zu können. Laut dem Beitrag von Steini63 geht das ja auch, wenn man sich bei jedem Windowsstart als Administrator anmeldet. Da die XP-Rechner einen Datenairbag haben, wäre das auch eine Möglichkeit zu arbeiten, bis ich besser an der DLL-Einbindung entlang blicke.
LG Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1236 Wohnort: Ruhrpott
|
Verfasst am: 17.05.2014, 02:26 Titel: |
|
|
Hallo Gerrit!
Es ist eigentlich ganz einfach: Eine dll ist eine Sammlung von ganz normalen Prozeduren (Funcitons und/oder Subs), die von einem Programm während der Laufzeit nachgeladen werden können.
Um eine solche Prozedur nutzen zu können, muß sie wie jede andere Prozedur zunächst einmal deklariert werden. Dabei muß dem Kompiler mitgeteilt werden, daß der spätere Aufruf nicht über einen "normalen" Prozedurnamen, sondern über einen (noch zu ermittelnden) Pointer erfolgt. Das geschieht, indem zum Deklarieren nicht "Declare", sondern "Dim" verwendet wird: Code: | Dim Shared Out As Sub (Adresse As integer, Wert As Integer) | Der angegebene Prozedurname ("Out") ist der Name, den die Prozedur IM AUFRUFENDEN PROGRAMM haben soll.
Als nächstes wird die dll - Datei in den Arbeitsspeicher geladen: Code: | parallelport = DylibLoad("inpout32.dll") | Der Rückgabewert (also der Inhalt der Variable "parallelport") ist ein Handle zu der soeben geladenen dll, eine Art Identifikationsnummer, mit der die dll ab jetzt angesprochen werden kann.
Nun muß der zuvor deklarierten Prozedur noch der entsprechende Pointer (die Startadresse der Prozedur im Arbeitsspeicher) zugewiesen werden: Code: | Out = DylibSymbol(parallelport, "Out32") | Der erste Parameter ist das Handle zur dll, der zweite Parameter ("Out32") ist der Name, den die Prozedur IN DER DLL hat.
Bei Prozeduraufrufen über Pointer solltest du übrigens IMMER vorher prüfen, ob der angegebene Pointer ungleich 0 ist, denn ein Prozeduraufruf mit Pointer auf Adresse 0 führt unweigerlich zum Programmabsturz.
Wenn du dir einmal den -ausführlich kommentierten- Quellcode einer dll ansehen möchtest, empfehle ich dir (ganz unbescheiden ) das hier.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Gerrit
Anmeldungsdatum: 10.05.2014 Beiträge: 12
|
Verfasst am: 29.05.2014, 12:00 Titel: parallele Schnittstelle unter Win 7 |
|
|
Hallo Grindstone,
vielen Dank für deine geduldige und ausführliche Erklärung!
Ein kleines Ampelprojekt mit großen Baustellenampeln z.B. für den Verkehrstag einer Grundschule läuft wunderbar - allerdings immer noch unter Administratorenrechten. Ein preiswertes Relaisinterface hilft uns.
An die von dir geschilderte Verwendung der dll pirsche ich mich langsam heran.
Spannend ist auch das von Flo ins Spiel gebrachte GPIO-Interface. Kriege ich das handwerklich in den Griff, könnten Jugendlich sich endlich selbstständig auch zu Hause Hardware basteln und weiter mit Programmierung beschäftigen.
Vielen Dank!
Lieben Gruß
Gerrit _________________ Alles wird gut! |
|
Nach oben |
|
|
|