Strony

piątek, 12 lipca 2013

uC/PC Time Sync - Bluetooth/RS232 - synchronizuj swój czas

Witam, 

Postanowiłem zaprezentować jeszcze jedno narzędzie, które często wykorzystuję w swoich projektach z mikrokontrolerami jeśli potrzebuję synchronizować czas w uC tak żeby zegarek "chodził" ;) bardzo bardzo dokładnie. Zamiast bawić się w SUPER KWARC'e, zamiast bawić się w super dostrajanie czy dobieranie mega dokładnych układów zegarkowych RTC, wystarczy, że zastosujemy prostą synchronizację z komputera przez: 

1. RS232 - zwykły kabel 
2. RS232 - przejściówka USB/RS232 
3. RS232 - Bluetooth - np za pomocą BTM-222 / BTM-112 

Program sam ładnie wykrywa bez najmniejszego problemu wszystkie dostępne w systemie porty COM, w tym także te związane z przejściówkami USB/Bluetooth. W tym celu napisałem mały zgrabniutki programik na PC, który może się uruchamiać razem z Windows i chować się do TRAY'a systemowego. Nadmienię oczywiście, że projekt powstał już dawno temu ale często go wykorzystuję w praktyce a może i wam się przyda ? Ten programik to w pełni darmowe narzędzie zarówno do celów komercyjnych jak i niekomercyjnych ;) 




Bezpośrednio po uruchomieniu komputera program dokonuje: 

1. synchronizacji czasu z serwerami czasu w internecie (SNTP) 
2. ustawia prawidłowy czas na PC 
3. przesyła prawidłowy czas do naszego mikrokontrolera przez wybrane łącze 
4. synchronizacja odbywa się automatycznie co pół godzinki 
5. program nie zabiera czasu procesora - w zasadzie cały czas śpi



W trakcie synchronizacji do mikrokontrolera przesyłana jest data i czas w formacie: 

AT+CZAS=yyyy-mm-dd,gg:mm:ss

oraz znak ENTER czyli CR na końcu tego łańcucha. Wystarczy to odebrać w swoim mikrokontrolerze i ustawić czas we własnym RTC. Bardzo często w taki sposób synchronizuję różne zegary, które zwykle są albo podłączone kablem USB/RS232 albo posiadają na pokładzie moduł Bluetooth np ATB-BTM-222



Teraz - dzięki waszym sugestiom program został rozszerzony o możliwości: 

1. Synchronizacji czasu PC na żądanie - trzeba kliknąć w zielony tekst 
2. Synchronizacji czasu uC na żądanie - trzeba kliknąć w niebieski tekst 
3. Edycję daty i czasu do dowolnej/próbnej synchronizacji czasu w uC 
4. Wprowadzanie własnego nagłówka do polecenia zmiany czasu w uC 

Dzięki temu że programik na PC odpala się w pełni automatycznie, zapominam wręcz o jego istnieniu a komputer przecież i tak prawie codziennie włączam - prawda ? .... internet też każdy ma - więc proszę - taki fajny miły i bardzo dobry i tani sposób na synchronizację swoich RTC przy prockach. 

Oczywiście jest to jeden z wielu alternatywnych prostych sposobów synchronizacji swoich zegarków RTC ... można też bezpośrednio przez Ethernet itp .... jednak ta metoda wydaje się być na początek nieco prostsza. 

Program napisany w Delphi BDS2006. Udostępniam go w wersjii FREE dla wszystkich zainteresowanych. Proszę sprawdzić działanie. Jeśli będą jakies uwagi to proszę pisać tutaj, chętnie odpowiem lub pomogę. 

Polecenie to można odbierać zarówno w swoich programach pisanych w Bascomie, w C czy w asemblerze. To tylko kwestia przeanalizowania łańcucha znaków podanego powyżej i wyciągnięcia z niego czasu. 

UWAGA! - Program do poprawnego działania ( szczególnie synchronizacja czasu na PC) potrzebuje aby w Win Vista / Win7 / Win8 we właściwościach - "Zgodności" było zaznaczone "Uruchom jako administrator", lub wyłączona kontrola UAC 

Poniżej można pobrać program na PC, życzę udanych testów i korzystania:


;)

10 komentarzy:

  1. ja tu mirka chwale a on kasuje moje komentarze :)

    OdpowiedzUsuń
    Odpowiedzi
    1. Ja bardzo przepraszam, ale to po prostu nie jest tematem tego artykułu, poza tym można do mnie maila napisać.

      Usuń
  2. Witam.
    Proszę o wyjaśnienie polecenia "AT+CZAS". Czy mam rozumieć, że poleceniem, może być dowolny łańcuch i czy symbol w równaniu + jest znakiem czy pustym polem? Najlepiej proszę o przykład - podać jakiś łańcuch(to co wyrzuca program dla przykładu z poleceniem AT).
    Z góry dziękuję.

    OdpowiedzUsuń
    Odpowiedzi
    1. No ale przecież w tekście wyraźnie napisałem i na niebiesko zaznaczyłem format wysyłanych danych do procka ;)

      AT+CZAS=yyyy-mm-dd,gg:mm:ss

      co więcej można sobie zmienić ten string AT+CZAS na dowolny własny wg uznania np:

      AlaMaKota

      wtedy do procka poleci to w formacie:

      AlaMaKotayyyy-mm-dd,gg:mm:ss

      nie za bardzo rozumiem jak jaśniej mogę to przedstawić. A zdecydowałem się domyślnie na komendę typu AT jak w modemach, GPS'ach i wielu innych urządzeniach komunikujących się przez RS232, i wymyśliłem sobie AT+CZAS=

      DOKŁADNY opis jak można w procku bardzo łatwo obsługiwać takie komendy i wygodnie - znajduje się w ostatnim rozdziale książki:

      http://atnel.pl/jezyk-c-pasja-programowania.html

      i szczerze a także z pełną odpowiedzialnością za to co mówię, polecam taki sposób jak jest w niej opisany. Jeszcze nie zdarzyła się osoba, która po skorzystaniu z niego powiedziałaby że jest coś nie tak. Wręcz odwrotnie - wtedy dopiero zaczyna się przyjemna komunikacja własnych urządzeń z komputerem, z telefonem z innym urządzeniem itd ;)

      Usuń
    2. "AlaMaKotayyyy-mm-dd,gg:mm:ss" i o to mi chodziło. Jeszcze nie mam tej książki, ale na pewno ją kupię.THX.

      Usuń
    3. A, no to cieszę się, że się wyjaśniło - jak coś to śmiało pytaj.

      Usuń
  3. Witam mam win XP program zainstalowałem ale nie mam go w pasku zadań czyłi w
    TRAY'u i po instalacji program pokazuje się na chwile same kontury bez treści i zaraz znika.Kurcze cienki bolek chyba jestem nie wiem co to może być .

    OdpowiedzUsuń
    Odpowiedzi
    1. Spokojnie nie jesteś żaden cienki bolek. Ale jak możesz to sprawdź to na innym kompie bo coś mi się wydaje, że twój WinXP ledwo żyje. Jak na innym ci ruszy to będziesz wiedział że nadszedł czas na wygenerowanie windy od nowa.

      Usuń
  4. Witam winde generowałem niedawno ze dwa tygodnie temu więc to chyba nie to .
    Natomiast doszedłem że przyczyną była zbieżności portu com taka sama w przejściówce USB jak i w programie to jest com3
    Przestawiłem na com1 i działa ale trochę włosów se wyrwałem

    OdpowiedzUsuń
  5. A czy dało by radę dopisać do programu opcję wyboru/wpisania ręcznego co ile czasu ma wysyłać ramkę danych do uC? Potrzebował bym aby program wysyłał dane co np. 1,5,10,15,20,25,30,40,50,60 min do wyboru. Tak na dobrą sprawę potrzebuję "coś" co pewien określony czas wysyła 3 konkretne znaki do urządzenia uruchamiając je o dokładnie ustalonej godzinie zgodnie z UTC. ten program prawie dokładnie spełnia moją potrzebę (wpisuję własny nagłówek ramki danych a reszta jest ignorowana w uC). Pozdrawiam. Grzegorz.

    OdpowiedzUsuń