logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak sterować urządzeniem przez LPT w Visual Basic? Schemat i kod programu

Piotrek.pxf 05 Lip 2005 00:02 5675 12
REKLAMA
  • #1 1629509
    Piotrek.pxf
    Poziom 27  
    Posty: 806
    Pomógł: 118
    Ocena: 65
    Chciałbym sterować urządzeniem za pomocą jednego bitu (włącz/wyłącz) oraz odbierać z tego urządzenia sygnał 1 lub 0. (komunikacja dwustronna :) ) Czy ma ktoś jakieś opisy jak mogę coś takiego wykonać. Wiem że najłatwiej będzie na porcie LPT.
    Prosiłbym o schemat jak i wyjaśnienie (lub przykład) programu w Visual Basicu.
  • REKLAMA
  • #3 1629751
    Piotrek.pxf
    Poziom 27  
    Posty: 806
    Pomógł: 118
    Ocena: 65
    Dzięki, mała rzecz a cieszy. Bardzo ciekawe artykuły, ale nie ma tam nawet wzmianki o VB. A mi właśnie coś takiego potrzeba. Może ktoś ma też opis czegoś takiego na port COM (chętnie popatrzę). Tylko zaznaczam, że nie bawię się w programowanie µP itp bo nie umiem. Proszę o coś prościutkiego :D

    Z góry dziękuję. Pozdrowienia.
  • REKLAMA
  • Pomocny post
    #4 1629787
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Wykorzystaj biblioteke inpout32.dll dostepna w sieci i ma status free.

    deklarujesz biblioteke w module

    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)


    Jezeli znasz budowe portu lpt i jakie bity przypadaja na ktore piny to juz umiesz oslugiwac port w vb :))
    Dzieki niej masz dostep do wszystkich postow (lpt,com,ps itp)
    Jest wygodna bo czytasz lub wstawiasz bity na konkretny port mimo tego ze jest on juz zajety.

    przyklad:
    jezeli lpt jest na 378

    Out &H378, 1 'wstawiasz jedynke na pinie 2 lpt
    Out &H378, 2 'wstawiasz jedynke na pinie 3 lpt (drugi pin 0)
    Out &H378, 3 'wstawiasz jedynke na pinie 3 i 2 lpt

    inp &H378 'czytasz z portu.


    pozdrawiam
  • #5 1630476
    Piotrek.pxf
    Poziom 27  
    Posty: 806
    Pomógł: 118
    Ocena: 65
    Czekam również na jakieś przykłady projektów w VB ze sterowaniem portów oraz jakieś proste schemaciki.
    Zaczynam rozumieć tą bibliotekę Inpout32. :D
    Jak się wyśle 1 na port (czyli 0001) to na D0 będzie 1, jeśli wyślemy 2 (czyli 0010) to na porcie D1 będzie 1. Ale czy dało by się prościej sterować? Np poszczególnymi pinami osobno?
    Jeśli bym chciał żeby D0-D3 były wyjściowe (włącz/wyłącz 4 różne urządzenia) a D4-D7 były wejściowe (pobierz stan z 4 innych urządzeń).

    Btw. Jaki adres ma port COM?
  • Pomocny post
    #6 1630700
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Piotrek.pxf napisał:
    Jak się wyśle 1 na port (czyli 0001) to na D0 będzie 1, jeśli wyślemy 2 (czyli 0010) to na porcie D1 będzie 1. Ale czy dało by się prościej sterować? Np poszczególnymi pinami osobno?
    Jeśli bym chciał żeby D0-D3 były wyjściowe (włącz/wyłącz 4 różne urządzenia) a D4-D7 były wejściowe (pobierz stan z 4 innych urządzeń).
    Nie da rady, LPT (jak zresztą jego nazwa wskazuje) jest wymyślony do przesyłania 8-bitowych danych równolegle, resztę sposobów na psucie tego portu wymyślili niesforni użyszkodnicy ;), możesz za to użyć sąsiedniego adresu dla linii rejestru kontroli (LPT Control Register), jako wyjścia, oraz stanu (LPT Status Register), jako wejścia (szczegóły w "tutku", którego adres podałem wyżej ;)).

    Piotrek.pxf napisał:
    Btw. Jaki adres ma port COM?
    Adresy możesz przeczytać, po wciśnięciu "Pause", gdy BIOS wyświetla tabelkę podsumowującą, lub szperając w Menedżerze urządzeń w Windows. U mnie COM1 ma adres 0x03F8, a COM2 - 0x02F8.
    --
    Pozdrawiam, Daniel
  • #7 1631188
    Piotrek.pxf
    Poziom 27  
    Posty: 806
    Pomógł: 118
    Ocena: 65
    Dzięki, czekam na wszelkie info o sterowaniu LPT. Ma ktos schematy?
  • Pomocny post
    #8 1632475
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Cytat:
    Ale czy dało by się prościej sterować? Np poszczególnymi pinami osobno?


    Ale to jest proste! Masz jezyk programowania wiec zrob sobie funkcje ktora to obsluzy.
    Np. robisz sobie zmienna "Stan" typu byte i na poczatku funkcji ma wartosc zero. jezeli chcesz wlaczyc ktorys z kolejnych pinow to dodajesz do niej 1,2,4,8,16,32,64,128. i ta zmienna wysylasz na port jako stan pinow.
    Nastepna funkcja czyta sasiedni adres tak jak zaproponowal Light'I czyli "Inp &H379". Mozesz to zrobic operatorem "AND":

    Dim ReadLPT as byte
    ReadLPT = Inp &H379
    If (ReadLPT AND 8) = 8 then
    'pin15
    ....
    end if
  • REKLAMA
  • #9 1632715
    Piotrek.pxf
    Poziom 27  
    Posty: 806
    Pomógł: 118
    Ocena: 65
    Dzięki wielkie.
    Udało mi się już opanować wysyłanie na port. Ale nie mogę nic odbierać.
    Czy np jeśli połączę ze sobą piny D0 i D1 a potem wyślę na port nr 00000001 to w odbiorze będę miał 00000011? Bo przecież jeśli na D0 jest napięcie, to jest ono też na D1.
  • #10 1632752
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Zostaw te piny jako nadawcze a skorzystaj z nastepnego rejestru.

    Cytat:
    Nastepna funkcja czyta sasiedni adres tak jak zaproponowal Light'I czyli "Inp &H379". Mozesz to zrobic operatorem "AND":

    Dim ReadLPT as byte
    ReadLPT = Inp &H379
    If (ReadLPT AND 8) = 8 then 'pin15
    ....
    end if


    Naprawde warto zapoznac sie z tym opisem portu LPT na elektrodzie.
    Nie musisz wnikadz w kod bo pod vb nie zabardzo bedzie przydatny ale zapoznaj sie z budowa portu. Zauwaz ze niektore piny sa negowane - co oznacza ze stan 1 to nie jest wstawienie "+" tylko "-". Jezeli moge to tak okreslic.
  • #11 1632987
    Piotrek.pxf
    Poziom 27  
    Posty: 806
    Pomógł: 118
    Ocena: 65
    Gdy podaję napięcie na obojętnie jaki pin z rejestru H379 to zawsze z odczytu jest wartość 126. A funkcja "(ReadLPT And 8) = 8" ma wartość true.
  • Pomocny post
    #12 1633329
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Ustaw port LPT na ECP
    Przy ladowaniu formatki ustaw port na zero "out &H379, 0"
    Mam nadzieje ze odswiezasz czytanie portu w petli?

    8 zawiera sie w 126 wiec jest true.
  • REKLAMA
  • #13 12030075
    shinshuke
    Poziom 9  
    Posty: 6
    Ocena: 4
    Z góry przepraszam za taki odkop po latach... Ale zajmuje się akurat silnikami krokowymi i chciałbym napisać swój program w VB który wysyłałby sygnały na LPT. Mógłby ktoś odświeżyć tego linka w 2 poście?

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy sterowania urządzeniem za pomocą portu LPT w języku Visual Basic, z dwukierunkową komunikacją (włącz/wyłącz oraz odczyt sygnału 1/0). Zalecane jest użycie biblioteki inpout32.dll, która umożliwia bezpośredni dostęp do portów LPT i COM, pozwalając na odczyt i zapis wartości na konkretnych adresach portów (np. 0x378 dla LPT). Sterowanie pojedynczymi pinami realizuje się przez manipulację bajtem, gdzie poszczególne bity odpowiadają pinom D0-D7. Port LPT przesyła dane równolegle 8-bitowo, a linie kontrolne i statusowe można wykorzystać do wejścia i wyjścia sygnałów. Przykładowo, zapis wartości na adresie 0x378 ustawia stan pinów wyjściowych, a odczyt z 0x379 pozwala na pobranie stanu pinów wejściowych. Wskazano, że niektóre piny są negowane, co wpływa na interpretację sygnału. Zaleca się ustawienie portu LPT w tryb ECP oraz inicjalizację portu zerem przed operacjami. Autorzy dyskusji podkreślają konieczność odświeżania odczytu w pętli oraz zwracają uwagę na adresy portów COM (np. 0x03F8 dla COM1). Wątek zawiera także proste przykłady kodu w Visual Basic oraz sugestie dotyczące schematów połączeń, choć schematy nie zostały szczegółowo opisane. Na końcu pojawiła się prośba o aktualizację linku do artykułu na elektroda.pl, który zawiera szczegółowy opis portu LPT.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA