PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LPT Port ansteuern...



Digo
20.06.2007, 14:12
HI...
Ich habe diesen code zum steuern des LPT Ports gefunden:


//==============
// fluffy code for bcc32
// direct parallel I/O using Inpout32.dll
// done by plapperkatz 16.8.2006
//==============
#include <windows.h>

int main()
{

typedef UINT (CALLBACK* LPFNDLLFUNC1)(INT,INT);
typedef UINT (CALLBACK* LPFNDLLFUNC2)(INT); // fuer Input, hier nicht verwendet
HINSTANCE hDLL;
LPFNDLLFUNC1 Output;
LPFNDLLFUNC2 Input; // fuer Input, hier nicht verwendet
INT Addr=0x378;
INT Value;
hDLL = LoadLibrary("Inpout32");
if (hDLL != NULL)
{
Output = (LPFNDLLFUNC1)GetProcAddress(hDLL,"Out32");
Input = (LPFNDLLFUNC2)GetProcAddress(hDLL,"Inp32"); // fuer Input, hier nicht verwendet
if (!Output || !Input)
{
exit(1);
}
}

// der 3tte eingangs-pin soll geschaltet werden, das ist pin 4 am Sub D Stecker

// Wert 4 an LPT senden, damit ist pin 4 auf HIGH
Value = 4;
Output(Addr, Value);

// warten (denn das fluffy braucht bisschen zeit)
Sleep(100);

// Wert 0 an LPT senden, damit sind alle pins auf LOW
Value = 0;
Output(Addr, Value);

// fertig, fluffy maunzt
return 0;
}
Quelle: http://codefactory.dead-men.de/index.php?content=75

Jetzt meine Frage wie kann ich jetzt nen einzelnen Port wieder abschalten?
Also auf low setzen? z.b. nur die nummer 1? Geht das?

Wenns niemand weiß kennt jmd ein board wo sich mit diesem Theam beschäftigt?

robocat
20.06.2007, 14:21
ich habe eben versucht, es dort zu erklären. etwas verwirrend ist, dass pin 1 am stecker nicht der erste datenpin ist.

der wert des parallelports wird mit einem 2ten wert &-verknüpft. alle bits, die in beiden werten gesetzt sind, bleiben bestehen, alle anderen werden auf 0 gesetzt.

10010011 (dezimal 147)
& 00001111 (dezimal 15) ergibt dann
------------------
00000011 (dezimal 3)

gruesse

Hessibaby
20.06.2007, 14:31
Mit 255 sind alle an, wenn Bit 1 auf LOW soll muß Du 253 an den Port senden.
Da das ein Parallelport ist muß Du zwangsläufig immer alle 8 Bit ansprechen, d.h. 0= alles Low ; 1=Bit0 gesetzt usw. bis 255
Versuch das mal
Gruß

Digo
21.06.2007, 14:21
Hi..
Gibts da ne liste was ich dann bei welchem Port senden muss?
Oder ist Port 2 dann 252???

Hessibaby
21.06.2007, 14:52
Binäres Zahlensystem 1,2,4,8,16,32,64,128
Kannst Dir ja ne Excell Tabelle machen
Gruß Hartmut

fluchtpunkt
21.06.2007, 15:00
Gibts da ne liste was ich dann bei welchem Port senden muss?
Es gibt eine Formel um die richtige Dezimalzahl fuer ein Bitmuster auszurechnen :)


Pin7*2^7 + Pin6*2^6 + Pin5*2^5 + Pin4*2^4 + Pin3*2^3 + Pin2*2^2 + Pin1*2^1 + Pin0*2^0

Pin6, Pin3, Pin2 und Pin0 auf 1 und der Rest auf Null waere dann:

0*2^7 + 1*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0

Und da 0*x == 0 kann man das kuerzen zu

1*2^6 + 1*2^3 + 1*2^2 + 1*2^0 = 77 = 0x4D = 0b01001101

Toll was. Das ganze nennt sich Dualsystem, und wenn man was programmieren will sollte man schonmal davon gehoert haben :)
Der Profi benutzt uebrigens das Hexadezimalsystem(das mit den Buchstaben wie in 0x4D)




Edit: Mist da war einer schneller.

Digo
21.06.2007, 16:34
OK.. Noch eine Frage! Welcher Pin wird als erster Pin behandelt! Der erste im Stecker oder der erste in dem schaltbaren block? Hoffe ihr versteth was ich meine!!!

Digo
21.06.2007, 17:33
Sry für den doppel Post...
Ich hab jetzt alle Pins mal angeschloßen! Und dir ersten 3 leuten dauerhaft egal was für ein Befehl ich sende! Woran liegt das? Die obrige frage gillt noch :)

robocat
21.06.2007, 19:00
leuten = leuchten? da wäre ich etwas vorsichtig, der parallelport verträgt nur sehr kleine ströme. pin2 entspricht dem ersten bit, pin9 dem 8ten. wenn nach einem Output(Addr,0); die leds an pin2 und pin3 nicht ausgehen, hast du gute chancen, dass dein druckerport nen treffer hat.