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

Sterowanie 8 urządzeniami przez LPT – jak odczytać napięcie z portu równoległego?

przemo.t 30 Wrz 2003 14:33 24969 48
  • #1 344007
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Witam

    Na poczatku mial byc to programik tylko do wlaczania i wylaczania oswietlenia na dworze no ale troche sie rozrosl. Ostatecznie program moze sterowac niezaleznie osmioma urzadzeniami podpietymi pod LPT. Dla kazdego urzadzenia mozna ustawic czas i date jego wlaczenia oraz wylaczenia lub nastawic je na tryb wlaczania codziennego o ustalowej godzinie
    Mam nadzieje ze przyda sie on nie tylko mi :)

    Napiszcie co o tym myslicie

    Pozdrawiam
    Załączniki:
    • LPT_ster.exe (200.57 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #2 345067
    h-doc
    Poziom 27  
    Posty: 1208
    Pomógł: 57
    Ocena: 21
    fajny - przyda mi się do testowania programatorów pod LPT. Pomyśl o rozbudowie programu (przydałaby się komunikacja dwukierunkowa)
  • #3 345429
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Witam

    dzieki za opinie :), programikiem zajme sie jak bede mial troche wolnego czasu bo teraz studia sie zaczely :sm21:

    Jak mozesz napisz czy jesli chodzi o monitorowanie wejsc maja one w zaleznosci od swojego stanu kontrolowac wyjsciami czy moze chodzi tylko o sam odczyt ich stanu

    Pozdro
  • #4 345686
    h-doc
    Poziom 27  
    Posty: 1208
    Pomógł: 57
    Ocena: 21
    w zasadzie byłoby przydatne ustawienie, które linie są wejściami, a które wyjściami. W przypadku wyjść przydałby się radio-box czy wystawiamy 0 czy 1, a w przypadku wejść okienko z 0 lub 1 (w zależności od aktualnego stanu linii). Można by się nawet pokusić o utworzenie systemu, który wysyłałby konkretne sekwencje na linie wyjściowe (określone w jakimś pliku skryptowym) i zapisywał stan linii wejściowych w drugim pliku. A do tego okienko z graficzną interpretacją wyników. To byłaby nieoceniona pomoc dla ludzi uruchamiających urządzenia pod LPT. Ale też dosyć sporo roboty.

    Pozdrawiam!
  • #5 345935
    SIEKIERA_666
    Poziom 22  
    Posty: 505
    Pomógł: 22
    Ocena: 79
    Najlepiej napisz jak zmusic LPT (ECP+EPP) żeby pracowało jako wejście.
    Na które wejścia podać jakie stany żeby można było mieć do dyspozycji całe 8 bitów jako wejścia. Wiem że można wykorzystac rejestry sterujace , ale chodzi mi konkretnie o 378H tak żeby można było przełączać w miare potrzeb raz jako wejście a raz jako wyjscie. Może jako wejście pracuje już pod innym adresem - słyszałem że są tam siakieś rejestry, które przetrzymują dane. Jak sie do tego dostać ??


    :sm19:
  • #6 346241
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    SIEKIERA_666 napisał:
    Najlepiej napisz jak zmusic LPT (ECP+EPP) żeby pracowało jako wejście.
    Czyta się z tego samego rejestru co zapisuje, a wejścia się uaktywnia bitem 5tym pod adresem bazowym+2
  • #7 346676
    Metrex
    Poziom 15  
    Posty: 180
    Ocena: 6
    Zrobiłem program który sledzi wejścia pod lpt 378
    Konkretnie piny od 2 do 9
    . adres 37a bit piąty to włączenie dwukierunkowości portu
  • #8 348206
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Witam
    Szczerze mowiac to nie udalo mi sie jeszcze zczytywac calych 8 bitow z LPT. Jak narazie to wiem jak zczytac 5 bitow rejestru wejsciowego(BASE+1, czyli 389h dla LPT1 ) bo posostale naleza do rejestru dwukierunkowego i z tym wlasnie jest problem w DELPHI, Wpisuje niby adres tego rejestru ale niestety nie moge zaobserwowac zmian na porcie.

    Ok dzieki za uwagi bede nad tym pracowal :)
    jesli ktos wie jak zczytac rejestr dwukierunkowy portu LPT pod DELPHI to bylbym b.wdzieczny za info.

    Pozdro
  • #9 349188
    nado
    Poziom 12  
    Posty: 23
    zrobilem jakis czas temu uklad z 64 wyjsciami na LPT

    szeregowo wpisywal dane do 74LS164 i zeby nie bylo zaklocen buforowal w 74LS573, do tego program w Pascalu
    odnalazlem to przypadkiem gdzies w rupiecach

    ktos zainteresowany schematem?
  • #11 350036
    Metrex
    Poziom 15  
    Posty: 180
    Ocena: 6
    Może dlatego nie możesz zaobserwować zmiany bo masz w biosie włączony tryb SPP
    .Ostatnio pracowałem na tym żeby by mój program działał pod nowe windowsy nt . Ponieważ tam nie można tak sobie wysyłać danych bez inicjacji portu. Pracuje tylko w delphi jeśli kogoś to interesuje mogę wysłać.
  • #12 350567
    mati c
    Poziom 2  
    Posty: 2
    Metrex napisał:
    Może dlatego nie możesz zaobserwować zmiany bo masz w biosie włączony tryb SPP
    .Ostatnio pracowałem na tym żeby by mój program działał pod nowe windowsy nt . Ponieważ tam nie można tak sobie wysyłać danych bez inicjacji portu. Pracuje tylko w delphi jeśli kogoś to interesuje mogę wysłać.


    Przepraszam może pytanie niezbyt sensownelub smieszne, ale czy po takiej inicjacji portu można potem z innych aplikacji do niego pisać wprost?
  • #13 370730
    Sabudda
    Poziom 11  
    Posty: 28
    Ocena: 1
    hmm mam problem, przy kompilowaniu w Virtual Basic skryptu(pod win XP):

    Private Sub Command1_Click()
    PortAddress = (&H378)
    Out PortAddress, 1
    Command2.Visible = True
    Command1.Visible = False

    End Sub

    wyskakuje mi error "sub of function not definied" (przy outport adress)


    (korzystam z inpout32.dll )
  • #14 371289
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    Pooprostu nie zdefiniowałeś funkcji out powinna być zdefiniowana w module i odnoscić się do DLL

    Pozdrawiam Eagle
  • #15 371568
    Konto nie istnieje
    Konto nie istnieje  
  • #16 372236
    zibi11
    Poziom 19  
    Posty: 537
    Pomógł: 1
    Ocena: 30
    Może by kolega podesłał kod żródłowy do sterownika lpt
    zibi11(_at_)xl.wp.p

    zibi11(_at_)xl.wp.pl
  • #17 375223
    Sabudda
    Poziom 11  
    Posty: 28
    Ocena: 1
    Thx za pomoc. Jak by ktos chcial to doczepiam programik do sterowania bitem d0. Program chowany jest w trayu, umozliwia wlaczenie na 'stale' urzadzenia jak i ustawienie by wlaczalo sie i wylaczalo o danej godzinie.
    Załączniki:
    • lpt.rar (39.92 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #18 381633
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Witam!!
    No i stalo sie: padl mi twadziel :( . mialy byc aktualizacje programiku a tu wszystko poszlo, tak wiec jesli wygospodaruje jakas wolna chwile postaram sie napisac cos jeszcze raz uwzgledniajac wasze uwagi.

    jak by co pytac na maila pomoge jesli bede mogl

    pozdro
  • #19 485808
    przemo.t
    Poziom 27  
    Posty: 994
    Pomógł: 79
    Ocena: 30
    Dostalem wiele zapytan jak podlaczyc jakies urzadzenie do LPT i sterowac nim za pomoca tego programu, wiec zamieszczam schemacik owego polaczenia z wykorzystaniem optortiakow i przekaznikow...
    Załączniki:
    • Sterowanie 8 urządzeniami przez LPT – jak odczytać napięcie z portu równoległego? schemat.JPG (7.18 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #20 546433
    DmZ
    Poziom 18  
    Posty: 371
    Ocena: 37
    nado napisał:
    zrobilem jakis czas temu uklad z 64 wyjsciami na LPT

    szeregowo wpisywal dane do 74LS164 i zeby nie bylo zaklocen buforowal w 74LS573, do tego program w Pascalu
    odnalazlem to przypadkiem gdzies w rupiecach

    ktos zainteresowany schematem?


    Ja jestem bardzo zainteresowany tym schematem.
    może jakiś konkretny przykłąd użycia dla zobrazowania?
  • #21 547503
    DmZ
    Poziom 18  
    Posty: 371
    Ocena: 37
    elektryk napisał:
    SIEKIERA_666 napisał:
    Najlepiej napisz jak zmusic LPT (ECP+EPP) żeby pracowało jako wejście.
    Czyta się z tego samego rejestru co zapisuje, a wejścia się uaktywnia bitem 5tym pod adresem bazowym+2
    na który pin trzeba podać sygnał, zeby to zadziałało.czy trzeba to zrobić z programu?ma ktoś gotową funkcję?
  • #22 547524
    Nemo
    Poziom 31  
    Posty: 2078
    Pomógł: 9
    Ocena: 72
    Pięknie to wygląda, ale odczyt LPT przy pomocy bitu 5 w base+2 jest możliwy tylko w trybie standart, a nie ECP+EPP. Pomocne jest przestawienie w BIOS'ie portu na Standart lub Normal, ewentualnie zaznaczając opcję Enable BiDirectory, jeżeli istnieje.
    Pozdrawiam.
  • #23 547679
    DmZ
    Poziom 18  
    Posty: 371
    Ocena: 37
    ja mam w biosie ustawione ECP. z tego co wiem to nowszy standard, przez to jest dwukierunkowy. w jakies specyfikacji przeczytałem, ze mozna przez niego "wpuścić" całe 8 bitów i to szyną danych.
    próbowałem ale jakoś nie wychodzi.
  • #24 547754
    Nemo
    Poziom 31  
    Posty: 2078
    Pomógł: 9
    Ocena: 72
    Zatem przestaw na Standart, albo Normal i sprawdź, czy działa. Zajmie Ci to kilka minut, a efekt może być korzystny.
    Pozdrawiam.
  • #25 591426
    DmZ
    Poziom 18  
    Posty: 371
    Ocena: 37
    dalej nic. może napisz jakąś funkcje ( ja uzywam inportb() z userport.sys)
    może sygnał podaje zły?
    zapis do lpt jest ok. po użyciu outport(); na lpt jest pewna liczba. kiedy uzyje inportb(); program odczytuje tą liczbe poprawnie. problem w tym, ze jak podłączam jakies urządzenie ustawiające stany logiczne, program juz tego nie widzi.
    co robie źle? :(
    pozdr
  • #26 591487
    Nemo
    Poziom 31  
    Posty: 2078
    Pomógł: 9
    Ocena: 72
    Funkcje inport() i outport() przynajmniej w Borland C++ są dość nieprzewidywalne. Być może to tylko moje zdanie. Jednakże na swoje potrzeby napisałem mutację takich funkcji, które korzystają ze wstawek asemblerowych. Mniej więcej coś takiego:
    
    void outprt (int gdzie, unsigned char co)
    {
     asm
     {
       mov dx,gdzie
       mov al,co
       out dx,al
     }
    }
    


    Dla odczytu podobnie (przepraszam, jeśli pomyliłem literki, albo kolejność, piszę z pamięci - a ta niezbyt dopisuje) :(

    
    unsigned char prtin (int skad) 
     {
      unsigned char zwrot = 0;
     asm
      {
    	mov dx, skad
    	in  al, dx
    	mov zwrot, al
      }
      return zwrot;
     }

    To mniej więcej tak wygląda. No i działają.
    Pozdrawiam.
    PS. Wersje poprawione, działają.
  • #27 591629
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    unsigned char &co ma 8 bitów... rejestr bx ma 16 więc
    mov bx,co
    i
    mov co,bx
    sie nieskompiluje.. ja używam rejestru al ...
    w c++ wstawki asm rozpoczyna sie od __asm,
    odczyt z portu 8 bitowego do rejestru 16 bitowego może powodować niemiłe skutki, funkcja inprt powinna zwracać wartość a nie pobierać miejsce na wartość przez referencje... w poleceniu "in" najpierw podaje sie miejsce docelowe.. a potem rejestr z numerem portu (tylko dx) [ odwrotnie niż w 'out']
  • #28 591716
    Nemo
    Poziom 31  
    Posty: 2078
    Pomógł: 9
    Ocena: 72
    Otóż to. Przepatrzę jeszcze ten program ze źródła. W tej chwili nie mam go pod ręką, stąd błędy w zapisie.
    Na razie nie miałem problemów z tą funkcją, wszystko przechodzi bez problemu. Chyba, że znowu coś nie tak zapisałem...
    Pozdrawiam.
  • #30 593023
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    BoskiDialer napisał:
    w poleceniu "in" najpierw podaje się miejsce docelowe.. a potem rejestr z numerem portu (tylko dx) [ odwrotnie niż w 'out']
    Święta prawda, ale wszystko zależy jeszcze od programu asemblującego, bo może mieć on inną konwecje zapisu.

Podsumowanie tematu

✨ Dyskusja dotyczy sterowania ośmioma urządzeniami podłączonymi do portu równoległego (LPT) komputera, z możliwością ustawiania czasu i daty włączania oraz wyłączania każdego urządzenia, a także trybu codziennego włączania o określonej godzinie. Poruszono kwestie techniczne związane z dwukierunkową komunikacją przez port LPT, w tym przełączaniem linii portu między wejściami a wyjściami, odczytem stanu linii, oraz problemami z odczytem pełnych 8 bitów w trybie ECP/EPP. Wskazano, że w BIOS-ie port LPT powinien być ustawiony w tryb Standard lub Normal, aby umożliwić dwukierunkowość i odczyt danych. Omówiono wykorzystanie rejestrów sterujących portem, adresów bazowych (np. 378h, 37Ah, 389h) oraz bitu 5 pod adresem bazowym+2 do aktywacji dwukierunkowości. Zaproponowano programy i fragmenty kodów w Delphi, Pascalu, C++ z użyciem asemblera do bezpośredniego odczytu i zapisu portu LPT. Wskazano na problemy z funkcjami inport() i outport() w różnych kompilatorach oraz potrzebę stosowania sterowników (np. inpout32.dll, giveo.sys) pod systemami Windows NT/XP. Przedstawiono schematy elektroniczne z użyciem układów 74LS164, 74LS573, optoizolatorów i przekaźników do sterowania urządzeniami z portu LPT. Poruszono także alternatywę sterowania przez port COM z wykorzystaniem linii DTR, RTS i tranzystorów MOSFET oraz układu ULN2803 do rozszerzenia liczby wyjść. W dyskusji pojawiły się przykłady zastosowań, takie jak matryce diodowe sterowane z LPT, programy do wizualizacji stanu portu oraz proste procedury do sterowania pojedynczymi bitami portu. Użytkownicy dzielili się doświadczeniami dotyczącymi konfiguracji portu, programowania i sprzętowych aspektów sterowania urządzeniami przez port równoległy.
Wygenerowane przez model językowy.
REKLAMA