LPT Pins einzeln Ansteuern.

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Morpheus
Beiträge: 10
Registriert: 06.10.2005 11:51

LPT Pins einzeln Ansteuern.

Beitrag von Morpheus »

Ich habe mir schon viele andere Threads von euch angesehen aber habe nicht das gefunden was ich suchte. Ich stelle fest das es bei den meisten darum geht ein LCD anzusteuern aber das ist hier nicht der Fall.

So...

Also ich würde gern wissen wie ich jeden einzelnen Pin (auch wenn es nur die Datenpins sind) des LPT1 ansteuern kann!?
Ich würde dort gern eine Steuerung anhängen und bin damit ein wenig überfordert da ich keine Ahung habe wie ich einen einzelnen Pin auf HI oder LOW setzen kann.

Bitte helft mir.

Ich möchte nur die einzelnen Pins ansteuern können, was ich dann daraus mache weis ich schon in etwa, aber bitte helft mir.

lg... Morpheus.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ich weiß nicht, ob du dich mal bei mir auf meiner Homepage umgesehen
hast. Aber da habe ich schon ein Beispiel, wie man die 8 Datenleitungen
in PB mit Hilfe der INPOut32 ein-, und ausschalten kann.
Evt. müsste man es für PB4 noch anpassen.

Beispiel ist unter der Seite Basic und dann den Button Purebasic, wenn du dann auf LPT-Würfel
klickst, zu laden. Die InpOut32 habe ich ebenfalls auf ein
extra Button gelegt.

Also, wenn du schon mal den Anfang hast, kann man es ja hier posten und evt. dann ergänzen.

Die LPT hat aber noch weitere Leitungen, die man mit Hi und Low schalten kann.
Die kann ich dann mal später hier aufführen. Das hängt dann nur von
der BasisAdresse ab, welche du dann angeben musst um das Control- und
Steuerregister zu erreichen.

Das Beispiel von mir benutzt die Basisadresse des Datenregisters.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Morpheus
Beiträge: 10
Registriert: 06.10.2005 11:51

Beitrag von Morpheus »

Ja richtig, auf deiner Seite war ich schon... hab mir dort auch den LPT Würfel runtergeladen und angesehen.

Aber wäre es möglich das du mir das Grundgerüst geben kannst. Also etwas wo ich wirklich nur die ansteuerung der Pins habe... weil ich hab es immer ein wenig schwer aus einem Quellcode einen bestimmten Teil - vorallem wenn überall etwas davon ist - herraus zu finden.

Wäre echt nett.

lg... Morpheus
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ungetestet!
Ich hoffe dieses ist als Grundgerüst verständlich genug.
Binär habe ich genommen, damit man es so am einfachsten
sehen kann, wie das mit den einzelnen Datenleitungen zusammenhängt.
Man kann es auch mit Hex $FF oder Dezimal 255 schreiben, was dann
%11111111 für alle Datenkanäle HI entspricht .

Grüße ..Falko

Code: Alles auswählen

;Die inpout32.dll sollte sich entweder im Systemverzeichnis oder im Ordner des Programms befinden.
;-  BaseAdress LPT1: Hex $378 = 888; LPT2: Hex $278 = 632
#BA=888 ; Basisadresse des Datenregister von D1...D8  (Also 8 Leitungen Pin2 bis Pin9)

; Hier kann man Signale auf die Datenpins 2-9 legen
Procedure Out(Wert.b);
 CallFunction(0,"Out32",#BA,Wert);Funktion inpout32.dll zur Ausgabe.
EndProcedure

;Hier wird das Datenregister komplett eingelesen. Wenn also an irgendein 
Pin 3-5V anliegt, wird das Bitmuster ausgegeben

Procedure.l INP();
 ProcedureReturn CallFunction(0,"INP32",#BA);Funktion inpout32.dll zum lesen der Datenkanäle
EndProcedure

;- Load Library INPOUT32

Ok=OpenLibrary(0,"inpout32.dll")
If OK>0
Else
 MessageRequester("Fehlermeldung","INPOUT32.DLL nicht gefunden oder fehlerhaft !",#PB_MessageRequester_Ok );Error if LPT not activate
EndIf
;
;Hier wird der Reihe nach der jeweilige Datakanal von D0 bis D7 ein-, bzw.
;ausgeschaltet, quasi wie ein Laufflicht. Bei 1 ist HI und bei Null ist LO.
;Zwar kann man es auch einfacher schreiben, wenn man Hexzahlen und eine Zählschleife nutzt, 
;aber damit man sehen kann wie jede Dataleitung geschaltet wird, habe ich es mal mit Binär vereinfacht.

;
For i = 1 To 10 ; wiederhole das ganze dann 10x
Out(%00000001) ; Schalte D0 an und alle anderen aus
Delay(2000) ; warte jeweil 2 Sekunden
Out(%00000010) ; Schalte D1 an und alle anderen aus
Delay(2000)
Out(%00000100) ; Schalte D2 an und alle anderen aus
Delay(2000)
Out(%00001000) ; Schalte D3 an und alle anderen aus
Delay(2000)
Out(%00010000) ; Schalte D4 an und alle anderen aus
Delay(2000)
Out(%00100000) ; Schalte D5 an und alle anderen aus
Delay(2000)
Out(%01000000) ; Schalte D6 an und alle anderen aus
Delay(2000)
Out(%10000000) ; Schalte D7 an und alle anderen aus
Delay(2000)
Next i
; ;
Out(%11111111) ; Alle Datenkanäle D0..D7 auf HI setzen.
Out(%00000000) ; Alle Datenkanäle D0..D7 auf LO setzen.

;Debug INP(); Zum Anzeigen, der Datenkanäle D0..D7, wenn jeweils dort 3-5V anliegt.

CloseLibrary(0); Beendet die DLL

Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten