Input mit inpout32.dll abfragen!

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
iron2006
Beiträge: 20
Registriert: 21.10.2006 04:23

Input mit inpout32.dll abfragen!

Beitrag von iron2006 »

Hallo,

ich möchte die ersten 4 Bit des des LPT auf 1 setzen und Taster dazwischen schalten um die die anderen 4 Bit des LPT abzufragen.
Wenn der Taster gedrückt wird soll also eine Aktion ausgeführt werden.

Setzen Datenleitung mit der DLL und dem Befehl Out(%00000001) ist kein Problem aber wie frage ich ab? Mit INP() bekomme ich immer eine 0 .

Ist das so überhaupt möglich ? Die Ausgangsspannung ist ca. 3,8 Volt ist das vielleicht nicht genug um als 1 erkannt zu werden?

Darf man die Datenkanäle so überhaupt kurzschliessen?

Für anworten wäre ich euch wie immer dankbar.

Viele Grüße Iron2006
PB 4.02
iron2006
Beiträge: 20
Registriert: 21.10.2006 04:23

Beitrag von iron2006 »

Ups, das ist wohl doch bei der Hardware besser aufgehoben. Vielleicht kann das ja noch jemand verschieben.

Gruß Iron 2006
PB 4.02
smiley46
Beiträge: 7
Registriert: 14.09.2008 22:01
Wohnort: Geiziger Süddeutscher

Input mit inpout32.dll abfragen!

Beitrag von smiley46 »

Ist die LPT Adresse bekannt? Wie ist der Port im BIOS definiert, als Standard, als ECP oder als EPP? Der Standard Port kann von den Daten nicht lesen, aber es geht über Error, SelectIn, PE, ACK und Busy.

Code: Alles auswählen

; Centronics Schnittstelle
;
; Signalname | LPT-Pin | BitNr | Portname
; --------------------------------------------
; Data0      |    2    |   0   |  DatenPort
; Data1      |    3    |   1   |  DatenPort
; Data2      |    4    |   2   |  DatenPort
; Data3      |    5    |   3   |  DatenPort
; Data4      |    6    |   4   |  DatenPort
; Data5      |    7    |   5   |  DatenPort
; Data6      |    8    |   6   |  DatenPort
; Data7      |    9    |   7   |  DatenPort
; --------------------------------------------
; Err        |   15    |   3   | -InputPort
; SelectIn   |   13    |   4   |  InputPort
; PE         |   12    |   5   |  InputPort
; Ack        |   10    |   6   | -InputPort
; Busy       |   11    |   7   |  InputPort
; --------------------------------------------
; Strobe     |    1    |   0   | -KontrollPort
; AutoFed    |   14    |   1   | -KontrollPort
; InitPrnt   |   16    |   2   | -KontrollPort
; Select     |   17    |   3   | -KontrollPort
; OutEnable  |         |   5   | +KontrollPort
; --------------------------------------------
; GND        |  18-25  |   -   | Masse
; --------------------------------------------
;
; Basisadressen (default): LPT1=$378, LPT2=$278, LPT3=$3BC
; Die Adresse des InputPort ist immer Basisadresse + 1
; Die Adresse die KontrollPort ist immer Basisadresse + 2 
; Signale mit vorgestelltem - Minuszeichen sind invertiert
; OutEnable ist optional (+). Falls vorhanden, muss dieses 
; Bit auf 0 gesetzt werden, um Signale auszugeben.

Global port=$378                       ; $378, $278, $3BC

If OpenLibrary(0, "inpout32.dll") = 0
  MessageRequester("Fehler","Die inpout32.dll konnte nicht geladen werden")
  End
EndIf

kon = 1
CallFunction(0, "Out32", port+2, kon)  ; Druckerport aktivieren

dat = $1F                              ; Die untersten 5 Bits auf 1
CallFunction(0, "Out32", port, dat)    ; Daten Ausgeben

; von D0 ... D4 jeweils einen Widerstand 1,2k auf Err ... Busy
; dann jeweils von Err ... Busy einen Taster oder ähnliches auf GND schalten

If OpenConsole()
  Repeat
    ; Exor, da manche Bits invertiert sind
    Ergebnis = CallFunction(0, "Inp32", port+1) ! $16
    PrintN(Str(Ergebnis))

    Delay(200)
    a$ = Inkey()
  Until a$ = Chr(27) ; Warten bis Escape gedrückt
  CloseConsole()
EndIf
iron2006
Beiträge: 20
Registriert: 21.10.2006 04:23

Beitrag von iron2006 »

Hallo smiley46,

vielen Dank für die Antwort mit den Input-Port´s klappt das Schalten sehr gut! :allright:
Mein Fehler war das ich immer versuchen wollte D5 bis D7 einen Input einzulesen.

Viele Grüße Iron2006
PB 4.02
Atomius
Beiträge: 1
Registriert: 05.11.2010 20:13

Re: Input mit inpout32.dll abfragen!

Beitrag von Atomius »

Könntest du vielleicht nochmal erläutern wie genau du das realisiert hast?

Ich habe gerade mit dem sehr interessanten Thema Steuerung über LPT Port angefangen, und schon erste Erfolge mit Pure Basic und LED's erzielt, jetzt will ich aber mehr :D

Wie bekomme ich es hin, dass mir der Rechner nen Data Port abfragt, und augibt ob der nun high oder low is? So das ich aufgrund dessen, irgendeine if bedingung (gibts doch bestimmt auch bei pure basic, wenns das auch in basic gab ^^) schreiben kann.

Vielen Dank schonmal im vorraus
Antworten