Autor | Thema: Druckerport direkt ansteuern? | | Datum:15.11.01 20:24 
(DH6YAX@t-online.de) | |
Hallo
Ich habe eine Relaikarte von Conrad ,die über den Druckerport
angesteuert wird.
Durch senden von Zeichen werden 8 Relais gesteuert
Wenn ich das jedoch mit Startprint versuche ,kommt ne Fehlermeldung (Gerät nicht bereit oder so)
In QBasic klappt das mit Lprint,
aber wie kann ich unter Profan (ich benutze 6.5)
den Druckerport direckt ansteuern?
besten dank
Ludger
|
| | Datum:16.11.01 07:49 
(idefix_nosferatus@lycos.de) | |
Hallo Ludger,
mit STARTPRINT und ENDPRINT geht das auch nicht,
aber dennoch mit Profan GANZ einfach ...
Solange es hier Windows 95 / 98 Milenium ist,
einfach direkt den Port ansteuern, mit
OUTPB adresse, wert
wird direkt auf die Adresse geschrieben. Für LPT 1
ist das die Adresse $378, (oder Dezimal 888).
Mit 2 Zeilen Profan kann also schon die Relaiskarte
angesteuert werden !!
CLS 'zeile 1 'scren öffnen (zur sicherheit)
OUTPB 888,3 'zeile 2 'daten zur LPT senden.
hier wird bit 0 und 1 gesetzt, bit 2 bis 7 auf Null
gesetzt, also würde Relay 1 und 2 anziehen, 3 bis 8
nicht erregt sein.
Windos 2000 / NT kann leider nicht direkt auf den
Port Schreiben, hier ist ein Umweg über ein Device
nötig.
gruss
Christian
|
| | Datum:16.11.01 22:00 
(dh6yax@t-online.de) | |
Hallo Christian
Erst mal vielen Dank für Deine Antwort.
Doch leider tut sich damit noch nichts
Ich benutze Win 98 (erste version)
Die Relai Karte ist in Ordnung (habe ich mit Qbasik ausprobiert)und hängt auch an LPT 1
-----------------------------------------
Damit habe ich es ausprobiert :
cls
OUTPB 888,3
Ich bin ratlos??
in Basic mußte man noch ein simikolon anhängen
hilft hier aber auch nicht.
??
|
| | Datum:17.11.01 08:02 
(idefix_nosferatus@lycos.de) | |
Nun kann es auch sein, das du das Steuerwort erst
in einer Bitfolge umsetzen must, poste doch mal
den qbsic quellcode um zu sehen, was genau gesendet
wird und wie es dann in profan aussehen könnte ...
gruss
Christian
|
| | Datum:20.11.01 22:52 
(dh6yax@t-online.de) | |
Hallo Christian
hier der qbasic text
:
10 input"geben Sie eine Zahl (zwischen 0-255)ein";A
20 if A<0 or A>255 then goto 10
30 lprint chr$(A); rem fals das ; fehlt sendet der rechner CR oder LF
,welches die zahl überschreibt
40 goto 10
das ist der Quelltext.
Gruß Ludger
|
| | Datum:21.11.01 07:23 
(info@heinemaennchen.de) | |
Das mag sein, das das so geht. Hab ich früher in TP auch so programmiert. Allerdings ist eigentlich falsch die Zahlen von 0 bis 255 zu übergeben. Normalerweise müßte man an dieser Stelle die einzelnen Bits übergeben.
|
| | Datum:21.11.01 16:49 
(k.ebersbach@gmx.de) | |
Hallo Ludger,
Versuch es mal so:
--- snip ---
declare lpt%,befehl%
'Wenn LPT 1 an 0x378 dann 0d888
let lpt%=888
'Wenn LPT 2 an 0x278 dann 0d632
let lpt%=632
'einen davon musst Du aussuchen, den anderen auskommentieren
'Den Befehl wählen:
let befehl%=0 'kein Relais / alle AUS
'bis
let befehl=255 'alle 8 Relais /alle EIN
'alle 256 Möglichkeiten
OutPB lpt%,befehl% 'schickt den befehl zum LPT
Mehr brauchst Du eigentlich unter Profn nihct, um Daten zum LPT zu senden. Über die Einschränkungen von NT und 2K haben ja die Voposter schon was gesagt, da gehts ohne Treiber nicht.
HTH+Greetings
Kai
|
| | Datum:21.11.01 20:30 
(martin@technopolis.de) | |
Oder compilierst das Qbasicprog und über gibst ihm per Parameter die Daten.
Martin
|
| | Datum:21.11.01 21:38 
(DH6YAX@t-online.de) | |
Hallo Martin,Kai und M.Heinemann
zu Kai:
bei Deinem Quelltext rührt sich auch kein Relai !!
zu Martin :
ich habe leider keinen Compiler ,der mir ne EXE oder DLL
raus macht ,und irgendwie fände ich es auch recht kompliziert
zu M.Heinemann
wie ist das gemeint mit den Bits übergeben??
Leider bin ich noch nicht viel weiter, dennoch vielen Dank für Eure Bemühungen
Ich bin etwas verzweifelt ,also wenn noch jemand ne Idee hatt!!
her damit!
Ich habe auch mal ausprobiert OUTPB 888,65 zum Drucker zu
schicken (müßte doch ein " a " Drucken
tuter aber nicht :-(
|
| | Datum:22.11.01 14:53 
(martin@technopolis.de) | |
Basic oder QBasic? Ich wusste nicht das man in QBasic Zeilenzahlen davor schreibt. Schick mir den QBasiccode und ich compilier ihn dir zur exe (natürlich mit Übergabeparametern) wenns nicht anders gehen sollte.
Martin
|
| | Datum:24.11.01 09:30 
(idefix_nosferatus@lycos.de) | |
Hi,
>let befehl%=0 'kein Relais / alle AUS
>'bis
>let befehl=255 'alle 8 Relais /alle EIN
>'alle 256 Möglichkeiten
>Mehr brauchst Du eigentlich unter Profn nihct, um Daten zum
>LPT zu senden.
Hab da nochmal in meinen Unterlagen von damals reingeschaut,
und die Doku von der Relayskarte (Conrad) besorgt.
Zum einem sendet QBasic via LPRINT nicht nur das
Steurerwort zum Drucker, (8 Bits), sondern setzt auch noch
den STROBE auf High, was den Drucker erst ansteuert.
Die Relayskarte nutzt ebenfalls dieses Strobe Signal,
da nicht direkt durch die 8 Bits das Relay angesteuert wird,
sondern da noch je ein Flip-Flpos vorsitzen, die der Rechner
anstuert, und nur bei STROBE übernommen werden. Dadurch
bleiben die Relasy in dem letzten Zustand, wenn an den
8 bits auch Null anliegt.
Jetzt müste man demnach nur das Strobe Signal per OUT
ebenfalls setzen können !!! Vieleicht wiess Roland hier
Rat, wies geht ?
Gruss
Christian
|
| | Datum:24.11.01 10:40 
(k.ebersbach@gmx.de) | |
Hallo,
das Datenregister wird normalerweise mit der Basisadresse des LPT (also 0x0378 oder 0x0278) angesprochen (bit0-bit7).
Wenn ich die englischen Ausführungen auf Beyond Logic
http://www.beyondlogic.org/spp/parallel.htm
richtig interpretiere, gehört der Strobe Ausgang zum
Controlregister und das wird mit base+2 angesprochen.
Laut Tabelle soll dann bit0 Strobe setzen können.
Versuche also mal Strobe mit einer um 2 erhöhten Adresse auf bit0 anzuspechen, also 0d890 statt 0d888 für LPT1..
Falls Du hast, ist hier sicher ein Logiktester oder ein LPT Tester mit LEDs nützlich. Ich habe mir mal son Ding zusammengelötet, wenn ich es schaffe, probiere ich meinen eigenen Tip nachher mal aus und berichte darüber :-)
Kai
|
| | Datum:24.11.01 11:32 
(k.ebersbach@gmx.de) | |
Da bin ich schon wieder. Das hat mir doch keine Ruhe gelassen :-)
Mit folgendem Listing liess sich bei mir auf der Erweiterungskarte LPT2 auch ausserhalb des Datenregisters ansprechen, zumindest wechselten die LEDs ihren Leuchtzustand.
Der Strobeausgang ist am Tester etwas merkwürden verdrahtet (wegen Invertierung Transistor und Kondensator), so dass hier der Wechsel zwar sichtbar, allerdings nicht so deutlich (Helligkeitsänderung nur langsam) war. Der Reset Ausgang blinkte jedoch klar im Takt.
HTH+Greetings
Kai
---- Listing des Testproggies ----
declare lpt%,befehl%,z%,output%
PROC Pause
'Prozedur zur Verzögerung, Zeit wird als Parameter übergeben: Pause 1000 = 1000ms Pause
Parameters N&
Declare Ende%
SetTimer N&
Let Ende% = 0
WHILENOT Ende%
WaitInput
Case %wmTimer:Let Ende% = 1
ENDWHILE
KillTimer
ENDPROC
Windowstyle 128 '46
Window 0,0-640,480
Windowtitle "LPTTester"
cls
let output%=2 'setzt aktiven LPT (bei mir LPT 2)
print "Testschleife 1 Datenregister base+0 läuft (0-255)"
case @equ(output%,1):let lpt%=888 'LPT1 hex 0378
case @equ(output%,2):let lpt%=632 'LPT2 hex 0278
let z%=0
whilenot @gt(z%,255)
let befehl%=z%
OutPB lpt%,befehl%
Pause 100
inc z%
wend
print "Schleife 1 beendet"
waitinput
print "Testschleife 2 Statusregister base+1 läuft (0-255)"
case @equ(output%,1):let lpt%=889 'LPT1 hex 0378
case @equ(output%,2):let lpt%=633 'LPT2 hex 0278
let z%=0
whilenot @gt(z%,255)
let befehl%=z%
OutPB lpt%,befehl%
Pause 100
inc z%
wend
print "Schleife 2 beendet"
waitinput
print "Testschleife 3 Controlregister base+2 läuft (0-255)"
case @equ(output%,1):let lpt%=890 'LPT1 hex 0378
case @equ(output%,2):let lpt%=634 'LPT2 hex 0278
let z%=0
whilenot @gt(z%,255)
let befehl%=z%
OutPB lpt%,befehl%
Pause 100
inc z%
wend
print "Schleife 3 beendet"
waitinput
End
|
| | Datum:24.11.01 14:30 
(idefix_nosferatus@lycos.de) | |
Hallo Kai,
auch mir hat das ehrlich keine ruhe gelassen, hatte soetwas
damals mal aufn 8084 gemacht, allerdings in Assembler.
Das ist aber auch schon ein paar Jährchen her und mehr,
und die heutigen Rechner sind mit einem X84 ja nun nicht
mehr zu vergleichen ....
Werde aber mal deinen code auch mal ausprobieren.
|
| | Datum: 30.11.01 20:13 
(idefix_nosferatus@lycos.de) | |
Hi,
So, wemm es NOCH Interessiert:
der LPT (egal ob 1 oder 2) hat ein Daten, ein Status
und ein Steuerregister.
Das Datenregister steuert die 8 bit, und liegt auf
der Basisadresse selber.
Das Steuerregister liegt 2 Bytes weiter, (BASIS + 2),
davon sind NUR die ersten 4 Bytes belegt.
Bit 0 = Strobe, Bit 1 = Feed, Bit 2 = Init, Bit 3 = Select
(Init ist Invertiert)
Das Statusregister liegt bei BASIS + 1, davon sind die
obersten 5 Bits belegt, die NUR Ausglesen werden können,
Bit 8 = Bussy, Bit 7 = ACK, Bit 6 = PE, Bit 5 = Select, Bit 4 = Error
gruss
Christian
|
|
|