Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

parallele Schnittstelle unter Win 7
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 10.05.2014, 22:56    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 849
Wohnort: Ruhrpott

BeitragVerfasst am: 10.05.2014, 23:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 11.05.2014, 09:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 11.05.2014, 12:31    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

Hallo,

sorry,
es muss in meinem vorherigen Beitrag heißen ... Windows XP... nicht Windows 98 ..

LG
Gerrit
_________________
Alles wird gut!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1208

BeitragVerfasst am: 11.05.2014, 12:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 11.05.2014, 13:33    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 11.05.2014, 17:06    Titel: Antworten mit Zitat

Hallo, schau mal ob du damit was anfangen kannst. http://www.elektronik.nmp24.de/?CNC_Experimente:Parallelport
Ich kenns zwar nicht, da aber auf eine DLL-Datei zugegriffen wird, kannst dir sicher eine eigene BI-Datei Basteln.

mfg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 11.05.2014, 19:54    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 12.05.2014, 19:26    Titel: Parallelport und aktuelle Windosen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 12.05.2014, 19:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 849
Wohnort: Ruhrpott

BeitragVerfasst am: 13.05.2014, 02:08    Titel: Antworten mit Zitat

Hallo Gerrit,

ergänzend dazu noch zwei weitere Threads zu diesem Thema (du siehst, ich habe mich auch schon damit beschäftigt lächeln ):
http://forum.qbasic.at/viewtopic.php?p=102808#102808 und
http://forum.qbasic.at/viewtopic.php?t=6197,
mit Beispielcode zur Handhabung von inpout32.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1208

BeitragVerfasst am: 14.05.2014, 00:29    Titel: Antworten mit Zitat

(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 zwinkern
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 14.05.2014, 17:43    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

Hallo Flo,

das ist sehr ermutigend und bringt mich echt weiter!
Vielen Dank!

LG

Gerrit
_________________
Alles wird gut!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 14.05.2014, 20:41    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 14.05.2014, 22:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 15.05.2014, 21:58    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 849
Wohnort: Ruhrpott

BeitragVerfasst am: 16.05.2014, 00:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 16.05.2014, 18:26    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 849
Wohnort: Ruhrpott

BeitragVerfasst am: 17.05.2014, 03:26    Titel: Antworten mit Zitat

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 grinsen ) das hier.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gerrit



Anmeldungsdatum: 10.05.2014
Beiträge: 12

BeitragVerfasst am: 29.05.2014, 13:00    Titel: parallele Schnittstelle unter Win 7 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz