Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Stoper uruchamiany przez COM (na zwarcie)

05 Mar 2012 21:07 1142 8
  • Poziom 9  
    Witam

    Chciałbym napisać program Np w Delphi bo to środowisko znam ale nigdy nie miałem styczności z odbieraniem impulsów z poza PC np COM

    Mianowicie potrzebuje program który będzie spełniał rolę stopera ale wyzwalany ma być zewnętrznie np przez przerwanie sygnału na linii fotocel albo najprościej pisząc zwarcia dwóch przewodów które połączone są do urządzenia które przetwarza to w impuls startu lub mety.

    Wiem jak napisać taki stoper i mam urządzenie ale nie wiem jak w delphi odbierać zwykły impuls pochodzący z com który byłby np przyciskiem start

    Posiadam jeden program ale niestety nie mam kodu źródłowego bo wystarczyła by niewielka zmiana. mankamentem tego programu jest to że ma zastosowanie dla jednej osoby.
    Na start np pistolet startowy program rusza i np biegnie 5 osób i wpada pierwsza stoper się zatrzymuje zamiast złapać czas i biec dalej po czym złapać kolejna osobę itd.

    Chodzi o stworzenie Chronometru w PC.
  • Poziom 42  
    Odbiór impulsu przez COM raczej nie jest możliwy. Jest to interfejs szeregowy, który musi wysłać cały bajt. Możesz zrobić pętlę, to znaczy wysyłać cały czas jakąś daną i ją odbierać. Fotokomórka zewrze Rx z Tx przez co pojawienie się sygnału na wejściu pozwoli Ci na zliczenie.
  • Poziom 20  
    Nie wprowadzaj w błąd. Stany przycisków można odczytać na liniach modemowych.
    Nie wiem pod jaki system piszesz (od win2k zablokowano bezpośredni dostęp do portów)

    Rejestry sterownika RS232C (w stosunku do bazowego np. 3F8H):
    +2 - rejestr identyfikacji przerwań (tylko odczyt)
    +3 - rejestr parametrów transmisji (LCR)
    +4 - rejestr sterowania modemu (MCR)
    +5 - rejestr stanu transmisji (LSR)
    +6 - rejestr stanu modemu (MSR)

    Rejestr stanu modemu (MSR):
    0 1- linia CTS zmieniła stan
    1 1- linia DSR zmieniła stan
    2 1- linia RI zmieniła stan
    3 1- linia RLSD zmieniła stan
    4 stan linii CTS
    5 stan linii DSR
    6 stan linii RI
    7 stan linii RLSD

    Wszystkie linie sterujące (w przeciwieństwie do sygnałowych) są w logice dodatniej tzn: 1 - napięcia 3 do 15V, 0 - napięcia -3 do -15V
  • Moderator Programowanie
    PiRoman2 napisał:
    Nie wprowadzaj w błąd. Stany przycisków można odczytać na liniach modemowych.

    No to niech kolega się pochwali, jakie to "linie modemowe" trzeba zewrzeć, żeby wywołać reakcję na porcie ?
  • Poziom 20  
    Chyba dość wyraźnie to opisałem, a co do połączenia to np.:

    CTS pin 8 (5)
    DSR pin 6 (6)

    złącze 9 pin
    (w nawiasie dla złącza 25 pin)
  • Moderator Programowanie
    PiRoman2 napisał:
    Chyba dość wyraźnie to opisałem, a co do połączenia to np.:

    CTS pin 8 (5)
    DSR pin 6 (6)[...]

    Czyli chce kolega sprawdzać stan połączenia pomiędzy liniami CTS (Clear To Send) oraz DSR (Data Set Ready) ?
    Przy czym CTS jest sterowany sprzętowo przez RTS/CTS flow controller.
    Jakich sygnałów możemy się spodziewać przy takim połączeniu ? Niskich ? Wysokich ?
  • Poziom 20  
    Kolega Ostryla wyraźnie napisał o porcie COM w komputerze PC.
    Wyprowadzenia dla złącza DB9:
    1- DCD (DAta Carrier Detect)
    2- Receive Data (RxD)
    3- Transmit Data (TxD)
    4- Data Terminal Ready (DTR)
    5- Signal Ground
    6- Data Set Ready (DSR)
    7- Request To Send (RTS)
    8- Clear To Send (CTS)
    9- Ring Indicator (RI)

    Tylko dwie linie RxD i TxD powiązane są z rejestrami przesuwnymi i nie mamy wpływu na ich stan (statyczny). Pozostałe linie wykorzystuje się do sprzętowego sterownia transmisją (nazwanie ich "liniami modemowymi" to pewien skrót myślowy).
    Stan linii DSR, CTS i RI można zmieniać podając napięcia dodatnie (powyżej 3V) dla "1" i ujemne (poniżej -3V) dla "0". Dodatnie napięcie można brać z linii TxD (przy braku transmisji jest tam napięcie ok. 12V). Napięcie ujemne np. z pinu 4.
    W rejestrze MCR (adres bazowy +4) możesz na bitach 0 i 1 ustawić bezpośrednio stan linii DTR i RTS. Jak ma się dostępne napięcia ujemne i dodatnie to albo przełącznik, albo jedno z napięć przez rezystor a drugie przez styk.

    Pozdrowienia
  • Poziom 27  
    arnoldziq napisał:
    Czyli chce kolega sprawdzać stan połączenia pomiędzy liniami CTS (Clear To Send) oraz DSR (Data Set Ready) ?
    Przy czym CTS jest sterowany sprzętowo przez RTS/CTS flow controller.
    Jakich sygnałów możemy się spodziewać przy takim połączeniu ? Niskich ? Wysokich ?
    Jest to absulutnie wykonalne, kiedyś zaprojektowałem takiego banalnego "dongla" żeby specjalny program dał się tylko uruchamiać na jednym z komputerów. Test jest prosty, wystarczy odczytać stan przy wysterowaniu niskim i wysokim, piny trzeba skonfigurować jako "software controlled", Wysterować i odczytać można bez problemu korzystając z Windows API, na każdym system od 95 do 7. Jeśli kolega jest już takim purystom i uznaje takie zastosowanie portu szeregowego za "niegodne" to w ostateczności można ustawić nadawanie na porcie szeregowym i wykrywać czy przychodzą takie same dane po zwarciu RxD z TxD. Tylko wtedy trzeba uważać bo mogą się pojawiać błędy ramki.