PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Parallele Schnittstelle mit QBASIC unter Windows2k proggen??



JayCool
16.01.2007, 13:19
Hi Leute,

ich habe den Verdacht, dass die parallele Schnittstelle an meinem Rechner defekt ist, da ich über selbige meinen Drucker nicht ansprechen kann. Dagegen über USB läuft der Drucker.

Um die Funktion des Parallelports zu testen, habe ich mir überlegt, dass ich einfach die verschiedenen Datenleitungen über einen ausreichend großen Vorwiderstand mit LEDs mit der GND-Leitung verbinde, und dann über QBASIC die einzelnen Leitungen ansteuere. Ich hab' da sowas gelesen mit Adresse 0378H oder so ähnlich. Werd mich da nochmal kundig machen.

Mein Problem ist aber Folgendes: Ich habe das Betriebssystem Windows2000 und in dem Zusammenhang sei es wohl etwas problematisch mit dem Direktzugriff auf irgendwelche Schnittstellen.

Jetzt meine Frage:
Hat hier im Forum irgendjemand schonmal sowas gemacht und kann mir vielleicht ein paar Tipps geben, ob es da gewisse Treiber/Zusatzprogramme/.DLLs/... gibt, mit deren Hilfe der Direktzugriff auf die Schnittstelle irgendwie doch unter QBASIC erfolgen kann???

Außerdem werden Tipps zum Schaltungsaufbau ebenfalls gerne angenommen!

Erstmal vielen Dank im Voraus

Gruß, Jan

PICture
17.01.2007, 00:38
Hallo JayCool!

Ich habe früher u.a. die paralelle Schnittstelle (LPT1) für verschiedene mit dem Notebook (NB) verbundene Hardware unter DOS in ASM programmiert. Diese kurze ASM Programme waren als Funktionen ins QBasic eigebunden.

Seit ich von Microsoft gezwungen bin ein Windows XP Betriebsystem zu nutzen, kann ich das nur noch auf dem altem NB machen, weil ich nicht weiss, wie es unter Windows geht. In jedem Fall die Register Adressen und die zugehörigen Bits und Pins sind wie folgt im Code.

Die restlichen Pins 18-25 sind mit Gnd (Masse) verbunden.

Es wäre toll, wenn ich wieder auch unter Windows XP mein NB in ASM programmieren könnte. :)

MfG


Register Bit (BX) und Pin (PX)

0378h B7 B6 B5 B4 B3 B2 B1 B0 -> Outputs
P9 P8 P7 P6 P5 P4 P3 P2

0379h B7 B6 B5 B4 B3 <- Inputs
P11 P10 P12 P13 P15

037Ah B3 B2 B1 B0 -> Outputs
P17 P16 P14 P1

JayCool
17.01.2007, 08:04
Hi PICture,

erstmal vielen Dank für Dein Feedback!
Bei mir dreht es sich nicht um ein kompliziertes Interfacing, sondern nur um einen Test, um zu sehen, ob alle Leitungen noch funktionsfähig sind.

Da das mit Windows2000 offensichtlich softwaretechnisch ein wenig problematisch ist, habe ich mir überlegt, dass ich einfach eine Windows95-Startdiskette verwende, alles davon lösche, was man nicht unbedingt braucht und ich dann hoffentlich so viel Platz darauf habe, dass das QBASIC mit einem Umfang von Größenordnung 200 kB und das Testprogramm (schätzungsweise 2 - 3 kB) draufpasst. Dann betreibe ich den Rechner einfach testweise mit der Startdiskette. Ich brauch dazu ja keine Festplatte ...

Was mich interessieren würde:
Ist auf einer Startdiskette, die mit Windows95 erzeugt wurde, defaultmäßig die parallele Schnittstelle schon zugewiesen und liegt die dann auf Adresse 378h, oder muss man da noch irgendwelche DOS-Kommandos eingeben, um dies zu erledigen? Ich kenn' mich nämlich null mit DOS aus!

Im Netz habe ich gelesen, dass die Portpins nur sehr geringe Ströme verkraften, d.h. so etwa 2 mA. Da ich den Hardwareaufwand gering halten möchte, würde ich einfach an die Ausgänge ein paar Low-Current LEDs mit jeweils einem Vorwiderstand von 1 kOhm dranhängen.
Meinst Du, der Widerstand ist ausreichend? Ich weiß nämlich nicht exakt, welche Spannung aus dem Port rauskommt.

Gruß, Jan

bad-joker
17.01.2007, 11:01
also aus dem parallelport kommen 5v raus. und eine led kann der ohne weiteres treiben. die einstellung von deiner drucker port adresse kannst du im bios vornehmen, da kann man meistens 3 adressen aussuchen. was alles auf deiner windows95 startdiskette drauf ist weis ich leider nicht, besorg dir doch einfach ne dos startdiskette und dann läuft das. um einen rechner unter dos zu booten hab ich mir ein komplettes dos auf nem usb stick installiert. einfach mal probieren ob dein bios sowas unterstützt.
ansonsten google einfach mal ein bsichen ob es nicht auch für win2000 so ein kleines tool gibt wo du die pins des druckerport einzelln ansteuern kannst.
grüße
thomas

kalledom
17.01.2007, 11:56
Hallo Jan,
auf 2 meiner Rechner ist noch Windows 98 drauf und damit kann ich von QBasic aus mit LPRINT die parallele und mit OPEN COMx die serielle Schnittstelle ansprechen. Allerdings habe ich DOS-QBasic und muß dazu auch auf DOS-Ebene runter. Windows 98 sperrt offensichtlich die Hardware nicht im Gegesatz zu dem was nach Windows 98 kommt; da müßte ich mein gesamtes Equipment zum Brennen, Programmieren, Zeichnen, DOS-Eagle, DOS-OrCad in den Mülleimer werfen.
Die Adressen der Hardware bleiben unverändert, weil die auf dem Board festgelegt sind. Alles nach Windows 98 verhindert aber irgendwie Zugriffe auf diese Adressen.
Mit der Win95 / 98 oder DOS-Startdiskette zu starten ist eine gute Idee.
Wenn Du eine DOS 6.x Diskette findest, bleibt dort mehr Platz frei für QBasic und Co.

Aus dem ParallelPort kommt evtl. nur GND raus, wenn es sich um OpenCollektor-Ausgänge handelt und keine PullUp-Widerstände vorhanden sind. Deshalb würde ich die LowCurrent-Leds mit 1...2,2k Vorwiderstand zwischen Ausgang und +5V anschließen. Dann leuchten die LEDs allerdings bei logisch 0 / Low-Pegel. Das dürfte zum Testen aber keine Rolle spielen.

PICture
18.01.2007, 02:18
Hallo JeyCool!

Genauer gesagt sind die Adressen von Ports im Setup definiert und nur dort können sie geändert werden.

Den Rest hat der kalledom schon Erklärt.

Am einfachsten wäre die Windows 95 Installation-/Startdiskette zu kopieren und dann alle ausser in autoexec.bat aufgeführten Dateien zu löschen.

Danach kannst Du auf die fast leere Diskette den QBasic und Dein Testprogramm kopieren.

Nach dem booten mit der Diskette, kannst Du durch Eingabe seines Namens und Return beliebiges Program aus der Diskette starten.

Übrigens, ich habe noch ein ganz altes Programm "Check It" (ca. 400KB). Mit dem kann man die ganze Hardware (ausser CPU und RAM, weil sie inzwischen zu schnell/zu gross für das Programm geworden sind) des PC´s testen.

Fürs Testen der Ports (COM und LPT) muss man nur zwei einfache Dongle´s anfertigen.

MfG

JayCool
22.01.2007, 08:22
Hi all of you,

ich hab' jetzt mal übers Wochenende mein Parallelport-Interface erfolgreich aufgebaut. Bei der Output-Beschaltung (Leitungen 2 - 9 und 1, 14, 16, 17) habe ich aber nicht Low-Current-LEDs genommen (waren mir zu dunkel und ich hatte wegen der Schnittstelle Skrupel, kleinere Widerstände zu verwenden), sondern ich habe die Beschaltung mit Hilfe eines Treiber-ICs (ULN2803) aufgebaut. An jedem Ausgang hängt jeweils eine normale LED mit 1 kOhm Vorwiderstand. Siehe nachfolgende Zeichnung:
https://www.roboternetz.de/phpBB2/files/output_uln2803.gif


Die Eingangsbeschaltung habe ich zunächst nach Maßgabe von http://ourworld.compuserve.com/homepages/Bill_Bowden/page6.htm aufgebaut.
http://ourworld.compuserve.com/homepages/Bill_Bowden/p_input.gif.

Mein QBASIC habe ich dann auf eine Windows95-Startdiskette draufgemacht und den PC von Diskette gestartet. Die Ansteuerung lief ohne Probleme!!!

Was ich nun an dieser Stelle noch fragen wollte: Auf der Seite http://www.southwest.com.au/~jfuller/sio5works.htm gibt es einen Schaltungsvorschlag einer Input-Beschaltung mit Hilfe eines ICs 74LS244 - siehe nachfolgendes Bild.
https://www.roboternetz.de/phpBB2/files/input_74ls244.gif
Ich habe jedoch in meiner Bastelkiste nur ein IC 74HCT244. Kann ich bedenkenlos den LS-Typ gegen den HCT-Typ austauschen?

Gruß, Jan

PICture
22.01.2007, 13:53
Hallo JayCool!

Mit welchen Befehlen lassen sich Eingänge und mit welchen Ausgänge des LPT´s von QBASIC steuern ?

Du kannst locker, aber nicht bedenkloss den 74LS244 mit 74HCT244 ersetzen, wenn Du alle unbenutzte Eingänge mit Ground b.z.w. +5V verbindest. Die alle unbenutzte Ausgänge kannst Du unbeschaltet lassen.

Übrigens, Du kannst noch ein Treiber von 74HCT244 für Pin 15 des LPT´s verwenden.

Viel Spass und Erfolg weiterhin ! :)

MfG

JayCool
22.01.2007, 14:26
Hi PICture,

in QBASIC kann die parallele Schnittstelle angesprochen werden mit Hilfe von

OUT Port,Data
INP Port


OUT schreibt den Wert 'Data' (0-255) in die Speicherstelle 'Port' (Wertebereich 0-65535). INP liest entsprechend den Port.
Der eingebaute LPT-Port hat normalerweise die Adresse (dez.) 888, 889 und 890.
Unter 888 sind die Leitungen 2 bis 9 ansprechbar. Unter 890, wenn ich mich recht erinnere, die Leitungen 10 und 12 bis 15. Unter 889 sind 5 Bits, auf die man nur lesend zugreifen kann.
Ich müsste aber heute abend nochmal genauer in meinen Aufzeichnungen nachsehen, welche Adresse/Bit mit welcher Leitung korrespondiert.
Oder google halt mal ein wenig!

Allerdings habe ich bis jetzt das Ganze nur von der Startdiskette aus unter Primitiv-DOS ausprobiert. Versuche unter Windows2000 stehen noch aus!

Gruß, Jan

PICture
22.01.2007, 14:45
@JayCool

Vielen Dank ! Diese Befehle habe ich bisher nicht benutzt, da ich LPT in ASM programmiert habe.

Die von Dir angegebene Adressen scheinen eine dezimale Darstellung den hexadezimalen zu sein. (378h=888d, 379h=889d und 37Ah=890d)

Das ist eben das Problem, das ab Windows 2000 kein direkter Zugriff auf die Hardware möglich ist. Mich interesiert das, vor allem, was für ein Treiber dazu benötigt wird.

Weil ich ASM Programme als Funktionen in QBASIC anbinden kann, könnte ich indirekt in die Hardware angreifen.

Vielleicht wenn man den QBASIC im DOS Modus ausführt, wird ein benötigter Treiber von WINDOWS schon automatisch installiert ?

Ich bedanke mich bei Dir im voraus für weitere Informationen ! :)

MfG

coil
26.01.2007, 18:14
Hallo PICture,

versuche es mal mit der inpout32.dll, findest du im Net. Unter VB5 oder CX kann ich dir zum testen ein Tool schicken.

Gruß
Joe

PICture
27.01.2007, 07:04
Hallo coil!

Vielen Dank für den Treibernamen ! Momentan werde ich mich sowieso nicht damit beschäftigen, aber vielleicht später. Ich kenne mich mit VB und CX nicht, habe nur in QBASIC programmiert. Im schlimsten Fall kann ich immer noch auf einem anderen Laptop unter DOS mit MASM direkt in ASM programmieren.

MfG