Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Czytnik linii papilarnych GT-511C1R (komunikacja z Atmega8, eclipse c)

Pawel_1985 16 Mar 2017 21:10 468 10
  • #1 16 Mar 2017 21:10
    Pawel_1985
    Poziom 6  

    Witam!

    Kupiłem czytnik linii papilarnych o oznaczeniu TTL GT-511C1R (dokumentacja w załączniku) i próbuję się z nim skomunikować za pomocą RS232 z mikrokontrolerem Atmega8.

    Sam czytnik jest sprawny, po podłączeniu przez przejściówkę RS232-USB, na dołączonym programowaniu wszystko działa prawidłowo.

    Transmisja RS232 w Atmedze8 działa prawidłowo (sprawdzone na kilka sposobów).

    Niestety, ale dołączony przez producenta program dedykowany jest na arduino... a ja pisze po prostu w c i mam problem z odczytaniem dokumentacji i sposobu jak wysyłać dane.

    Według dokumentacji pakiet danych do wysłania powinien wyglądać tak:

    Code:

    OFFSET ITEM TYPE DESCRIPTION
    0 0x55 BYTE Command start code1
    1 0xAA BYTE Command start code2
    2 Device ID WORD Device ID: default is 0x0001, always fixed
    4 Parameter DWORD Input parameter
    8 Command WORD Command code
    10 Check Sum WORD Check Sum (byte addition) OFFSET[0]+…+OFFSET[9]=Check Sum


    Pytanie czy po każdym poleceniu muszę wysłać polecenie końca linii (znak 13), co jeśli przesyłam większą liczbę (word) za pomocą dwóch bajtów to czy też muszę stosować znak końca linii?

    Dodatkowo mam pytanie w jaki sposób obliczyć CheckSum?

    No i jeszcze mam kłopot z opcją parametr, która jest typu "dword", a w dokumentacji nie ma za dużo napisane

  • Pomocny post
    #2 17 Mar 2017 00:37
    malcompl
    Poziom 12  

    Pawel_1985 napisał:
    Pytanie czy po każdym poleceniu muszę wysłać polecenie końca linii (znak 13), co jeśli przesyłam większą liczbę (word) za pomocą dwóch bajtów to czy też muszę stosować znak końca linii?

    To jest binarny protokół, nie powinieneś wysyłać żądnych dodatkowych znaków poza pakietem/ramką.

    Pawel_1985 napisał:
    Dodatkowo mam pytanie w jaki sposób obliczyć CheckSum?

    Tak jak zostało napisane w dokumentacji, sumujesz wszystkie 10 bajtów (tak to przynajmniej zrozumiałem) i dołączasz do pakietu jako 16-bitową liczbę.

    Pawel_1985 napisał:
    No i jeszcze mam kłopot z opcją parametr, która jest typu "dword", a w dokumentacji nie ma za dużo napisane

    DWORD - double word - 32-bitowa liczba

  • #4 17 Mar 2017 13:14
    Pawel_1985
    Poziom 6  

    Witam!

    Udało mi się skomunikować z czytnikiem wpierw za pomocą programu "realterm", a później już za pomocą mikrokontrolera.

    Niestety w obu przypadkach działają tylko najprostsze funkcje jak otwarcie, zamkniecie czytnika czy sterowanie diodą LED w czytniku.

    Na przykład procedura zapalania i gaszenia niebieskiej lampki w czytniku:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Niestety, ale bardziej skomplikowane funkcje mi nie działają. Na przykład w teorii prosta opcja "ispressfinger". Poniżej kod obsługujący tą funkcję, czytnik w ogóle nie reaguję. Nie chodzi już o wysłanie informacji zwrotnej, ale sam czytnik powinien zapalić się na chwilkę na niebiesko (tak działa z programem na PC)

    W komentarzach zaznaczyłem liczby jak obliczam do sumy kontrolnej

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

  • #5 18 Mar 2017 13:41
    malcompl
    Poziom 12  

    Wysyłany pakiet wygląda ok, zgodnie z dokumentacją. A co pakietem zwrotnym, otrzymujesz go? Może w nim być zawarta informacja o ewentualnym błędzie. Problemy mogą być różne, konfiguracyjne, elektryczne, komunikacyjne...

    Czy na początku nim cokolwiek zrobisz, "otwierasz" (inicjalizujesz) urządzenie za pomocą komendy Open?

    Dokumentacja jest trochę uboga, w rozdziale opisującym 'flow' protokołu w ogóle nie podają nic o inicjalizacji etc.

  • #6 18 Mar 2017 15:39
    lehastar
    Poziom 14  

    Punkt 5.11 mówi "This command is used while enrollment..". Myślę, że trzeba wcześniej uruchomić 5.7 Start an enrollment.

  • #8 19 Mar 2017 00:03
    Piotrus_999
    Poziom 39  

    Tak przy okazji co to jest eclipse C, Bo o takim dialekcie jeszcze nie słyszałem

  • #9 20 Mar 2017 10:54
    Pawel_1985
    Poziom 6  

    piotrva napisał:
    Zainstaluj sobie IO Ninja i zobacz jakie ramki wymienia soft na komputerze z czytnikiem.


    Dzięki za podpowiedź, co prawda skorzystałem z innego programu, bo z Free Device Monitoring Studio, ale droga jest właściwa i faktycznie można prześledzić transmisje pomiędzy czytnikiem a oryginalnym oprogramowaniem.

    Okazało się, że polecenie "IsPressFinger" nie powoduję zapalenie diody led podświetlającej czujnik... to trzeba zrobić samodzielnie.

    Czyli poprawna sekwencja to po kolei zapalenie diody, wysłanie polecenia "IsPressFinger" i zgaszenie diody. Po drodze jeszcze trzeba oczywiście odczytywać odpowiedzi z czytnika.

    Szkoda, że takie rzeczy nie wynikają wprost z dokumentacji.

    Cytat:
    Tak przy okazji co to jest eclipse C, Bo o takim dialekcie jeszcze nie słyszałem


    Po prostu zwykłe C, a używam środowiska eclipse

  • #11 20 Mar 2017 14:30
    lehastar
    Poziom 14  

    piotrva, IO Ninja - świetny program. Bardzo dziekuje..

Szybka odpowiedź lub zadaj pytanie
Dziękuję Ci. Ta wiadomość oczekuje na moderatora.
 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME