Bardzo wiele osob pyta (zastanawia) sie jak sterowac urzadzeniami zewnetrznymi np silniczki, przekazniki itp za pomoca PC'eta.
Pozwole sobie opisac ten temat mam nadzieje w prosty sposob (sam kiedys nie przespalem pare nocek).
Wykorzystam do tego port LPT, jest idealny na poczatek
Polecam darmowa biblioteke inpout32.dll do sciagniecia chociazby z:
http://www.lvr.com/parport.htm
i wprowadzic ja do systemu lub do katalogu gdzie znajduje sie program.
Port LPT sugeruje ustawic jako ECP.
W module trzeba zadeklarowac biblioteke:
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
I juz nasz VB widzi port idealnie, bezposrednio, nie wnikajac czy jest zajety przez system czy nie. (mozna nawet podpatrywac co sie dzieje na portach nie tylko LPT). Za pomoca tej biblioteki mozna skanowac i ustawiac Com1, Com2... PS, Joystick itp.
Nastepnie trzeba znalezc adres portu, ktory chcemy obslugiwac.
Standartowo LPT1 ma adres 0378-037F
Mozna to sprawdzisc w biosie lub "MoJ Komputer->wlasciwosci->Menadzer urzadzen->Porty(COM&LPT)...
Teraz na szybko budowa portu LPT. (opisze jak dziala dla potrzeb tego postu. inne funkcje niech zostana dla dalszych rozbudowan)
OFFSET = 00h (0378)
bit 7 6 5 4 3 2 1 0
pin 9 8 7 6 5 4 3 2
Niech sobie zostana jako wyjscia.
w VB bedziemy nimi sterowac w ten sposob:
Dim Wyjscie as Byte
Out &H378, Wyjsie
Gdzie wyjscie rowna sie sumie:
bit0 = 1
bit1 = 2
bit2 = 4
bit3 = 8
bit4 = 16
bit5 = 32
bit6 = 64
bit7 = 128
Czyli zeby wystawic na pinie 8 (bit6) i 2 (bit0) +5V trzeba wyslac na port wartosc 64+1 = 65 itp
Teraz troszke najprostszego Hardware.
Zeby obsluzyc jakies urzadzenia z portu lpt potrzebny jest tzw Driver.
Mozna sobie testowac wyjscia diodami swiecacymi podpietymi do masy i do kolejnych pinow najlepiej przez rezystor ok 1kohm.
Ale zeby otrzymac "cos wiecej" to znaczy wysterowac przekaznik 12V lub urzadzenie do 500mA 12V (mozna wiecej) proponuje zastosowac ULN2803A, na ktory prosto mowiac wystarczy podac +5v z portu a on wysteruje minusem (masa) napiecie takie jak w pdf'ie tego ukladu (warto pobrac szukajac chociazby w googlach). dla 12V bedzie to ok 0.5 A.
Oczywiscie mozna laczyc piny by podwoic "moc". (dwa wysterowane piny =2x0.5A = 1A).
Teraz wypadalo by odczytac dane przychodzace na port LPT.
Wiec tak, wykorzystamy do tego OFFSET = 01h (0378+1=0379)
bit 7 6 5 4 3 2 1 0
pin 11 10 12 13 15 - - -
w Vb bedzie to wygladalo w ten sposob:
Dim MojLPT as byte
MojLPT = Inp &H379
If (MojLPT AND 128) = 128 then 'bit7 czyli pin11
....
end if
bit3 = 8
bit4 = 16
bit5 = 32
bit6 = 64
bit7 = 128
Nie bez potrzeby podalem taki przyklad pniewaz ten bit jest negowany. Oznacza to ze 1 to jest podany na niego stan niski (masa) reszta pinow to stan wysoki (+5v).
Wazne jest zeby przy starcie ustawic port 0378 na 0:
Out &H378, 0
A nastepnie odswiezac czytanie portu w petli nie zapominajac o "DoEvents".
To tyle. Tak sobie napisalem bo mi sie nudzilo
Prosze nie polemizowac za mocno nad trescia tego postu , chcialem opisac temat dosc prosto. Oczywiscie wszelkie bledy poprawie.
Pozdrawiam
Pozwole sobie opisac ten temat mam nadzieje w prosty sposob (sam kiedys nie przespalem pare nocek).
Wykorzystam do tego port LPT, jest idealny na poczatek
Polecam darmowa biblioteke inpout32.dll do sciagniecia chociazby z:
http://www.lvr.com/parport.htm
i wprowadzic ja do systemu lub do katalogu gdzie znajduje sie program.
Port LPT sugeruje ustawic jako ECP.
W module trzeba zadeklarowac biblioteke:
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
I juz nasz VB widzi port idealnie, bezposrednio, nie wnikajac czy jest zajety przez system czy nie. (mozna nawet podpatrywac co sie dzieje na portach nie tylko LPT). Za pomoca tej biblioteki mozna skanowac i ustawiac Com1, Com2... PS, Joystick itp.
Nastepnie trzeba znalezc adres portu, ktory chcemy obslugiwac.
Standartowo LPT1 ma adres 0378-037F
Mozna to sprawdzisc w biosie lub "MoJ Komputer->wlasciwosci->Menadzer urzadzen->Porty(COM&LPT)...
Teraz na szybko budowa portu LPT. (opisze jak dziala dla potrzeb tego postu. inne funkcje niech zostana dla dalszych rozbudowan)
OFFSET = 00h (0378)
bit 7 6 5 4 3 2 1 0
pin 9 8 7 6 5 4 3 2
Niech sobie zostana jako wyjscia.
w VB bedziemy nimi sterowac w ten sposob:
Dim Wyjscie as Byte
Out &H378, Wyjsie
Gdzie wyjscie rowna sie sumie:
bit0 = 1
bit1 = 2
bit2 = 4
bit3 = 8
bit4 = 16
bit5 = 32
bit6 = 64
bit7 = 128
Czyli zeby wystawic na pinie 8 (bit6) i 2 (bit0) +5V trzeba wyslac na port wartosc 64+1 = 65 itp
Teraz troszke najprostszego Hardware.
Zeby obsluzyc jakies urzadzenia z portu lpt potrzebny jest tzw Driver.
Mozna sobie testowac wyjscia diodami swiecacymi podpietymi do masy i do kolejnych pinow najlepiej przez rezystor ok 1kohm.
Ale zeby otrzymac "cos wiecej" to znaczy wysterowac przekaznik 12V lub urzadzenie do 500mA 12V (mozna wiecej) proponuje zastosowac ULN2803A, na ktory prosto mowiac wystarczy podac +5v z portu a on wysteruje minusem (masa) napiecie takie jak w pdf'ie tego ukladu (warto pobrac szukajac chociazby w googlach). dla 12V bedzie to ok 0.5 A.
Oczywiscie mozna laczyc piny by podwoic "moc". (dwa wysterowane piny =2x0.5A = 1A).
Teraz wypadalo by odczytac dane przychodzace na port LPT.
Wiec tak, wykorzystamy do tego OFFSET = 01h (0378+1=0379)
bit 7 6 5 4 3 2 1 0
pin 11 10 12 13 15 - - -
w Vb bedzie to wygladalo w ten sposob:
Dim MojLPT as byte
MojLPT = Inp &H379
If (MojLPT AND 128) = 128 then 'bit7 czyli pin11
....
end if
bit3 = 8
bit4 = 16
bit5 = 32
bit6 = 64
bit7 = 128
Nie bez potrzeby podalem taki przyklad pniewaz ten bit jest negowany. Oznacza to ze 1 to jest podany na niego stan niski (masa) reszta pinow to stan wysoki (+5v).
Wazne jest zeby przy starcie ustawic port 0378 na 0:
Out &H378, 0
A nastepnie odswiezac czytanie portu w petli nie zapominajac o "DoEvents".
To tyle. Tak sobie napisalem bo mi sie nudzilo
Prosze nie polemizowac za mocno nad trescia tego postu , chcialem opisac temat dosc prosto. Oczywiscie wszelkie bledy poprawie.
Pozdrawiam