Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249328 (10764)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Druckerport direkt ansteuern?
Ludger Resing
| 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
Christian Devilbis
| 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
Ludger Resing
| 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. ??
Christian Devilbis
| 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
Ludger Resing
| 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
M.Heinemann
| 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.
Kai Ebersbach
| 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
Martin
| Datum:21.11.01 20:30 (martin@technopolis.de) |
Oder compilierst das Qbasicprog und über gibst ihm per Parameter die Daten. Martin
Ludger Resing
| 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 :-(
Martin
| 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
Christian Devilbis
| 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
Kai Ebersbach
| 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
Kai Ebersbach
| 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
Christian Devilbis
| 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.
Christian Devilbis
| 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

| Zurück zur Übersicht