Podstawowym założeniem dla tego projektu było wyeliminowanie potrzeby ingerencji użytkownika, dlatego współpracując z odbiornikiem GPS zegar automatycznie ustawia się. Większość takich odbiorników wysyła dane w formacie NMEA0183.
Ten standard opisuje kilkadziesiąt ramek zawierających wiele parametrów. Oprogramowanie zegara wyszukuje ramkę w formacie RMC (recommended minimum gps data) przesyłaną przez większość odbiorników. Przykładowe ramka ma postać:
$GPRMC,220516,A,5133.82,N,00042.2 4,W,173.8,231.8,130694,004.2,W*70
Opis jej parametrów składowych umieszczono w tabeli 1.
Dla potrzeb zegara najistotniejszy jest aktualny czas UTC. Oznacza on wzorcowy czas uniwersalny ustalany na podstawie TAI (International Atomic Time) uwzględniający nieregularność ruchu obrotowego Ziemi i koordynowany względem czasu słonecznego.
Należy jednak zwrócić uwagę, że jest to czas właściwy dla południka zerowego, za który przyjęto południk przechodzący przez obserwatorium astronomiczne w miejscowości Greenwich, a więc jest czasem strefowym pierwszej strefy czasowej, od którego liczy się czas pozostałych stref.
Czas właściwy dla danego obszaru zależy od długości geograficznej, a dokładniej od państwa, na którego terenie się znajdujemy. Na przykład, Hiszpania i Francja znajdują się w strefie UTC+1, choć położone są na długości geograficznej odpowiadających strefie UTC+0.
Aby zegar wskazywał właściwy czas należy ustawić obwiązującą strefę czasową. Polska znajduje się w strefie czasowej UTC+1, czyli czas jest przesunięty o godzinę do przodu względem czasu uniwersalnego i takie jest domyślne ustawienie zegara.
Czas uniwersalny nie uwzględnia zmian czasu na zimowy i letni. Zmiana czasu na letni, czyli o godzinę do przodu, odbywa się w ostatnią niedzielę marca, natomiast zmiana na czas zimowy, czyli o godzinę do tylu, odbywa się w ostatnią niedzielę października. Nie są to stale daty, ponieważ każdego roku wypadają w inny dzień miesiąca.
Informację o obowiązywaniu czasu letniego/zimowego można uzyskać analizując datę, a informacja o aktualnej dacie jest dostępna w zdaniu RMC (parametr 11 w tab. 1). Do obliczeń nie wystarczy tylko informacja o dniu miesiąca, miesiącu i roku, potrzebny jest jeszcze jeden parametr - dzień tygodnia.
Jest on określany przez oprogramowanie, w którym zapisano, że 1-go stycznia 2000 roku była sobota, więc znając aktualną datę można obliczyć liczbę dni, które upłynęły od tej daty i wyznaczyć aktualny dzień tygodnia. Dysponując tymi danymi można określić czy obowiązuje czas zimowy, czy letni.
Dodawanie i odejmowanie godzin względem czasu uniwersalnego, związane ze strefami czasowymi i zmianami czasu bardzo komplikuje utrzymanie integralności struktury clock, która zawiera informacje o dacie i godzinie podzielone na podstawowe elementy (rok, miesiąc, dzień, godzina, minuta, sekunda).
Lepszą metodą okazał się zapis czasu w postaci liczby sekund. Zmienna time.digital określa liczbę sekund, która upłynęła od 1 stycznia 2000 r. Wartość ta będzie dalej nazywana czasem względnym. Zmienna ma rozmiar 32 bitów i jej zakres w zupełności wystarczy do zliczenia sekund do roku 2100.
Po tej dacie należałoby wprowadzić małą zmianę w programie. Po każdej sekundzie następuje zwiększenie czasu względnego o jeden. Następnie czas względny zostanie zwiększony lub pomniejszony o wartość wynikającą z ustawionej strefy czasowej (od -14 do +14 godzin).
Na podstawie czasu względnego jest tworzona struktura clock oraz obliczany dzień tygodnia. W kolejnym etapie, program sprawdza czy obowiązuje czas letni i jeśli tak to do czasu względnego dodawane jest 3600 sekund (1 godzina) a wynik ponownie przekształcony zostaje na strukturę clock. Dopiero wtedy otrzymywany jest prawidłowy, aktualna godzina oraz data, zsynchronizowane z czasem UTC i uwzględniające strefę czasową oraz zmiany czasu.
Czas jest synchronizowany sygnałem GPS po włączeniu zasilania, a potem okresowo co 3 godziny. Urządzenie oczekuje wtedy na właściwą ramkę RMC. Jeśli w ciągu 30 sekund ramka nie zostanie odebrana, to jest to traktowane jako praca bez synchronizacji i sygnalizowane krótkim miganiem dwukropka na wyświetlaczu (ok 1/3 s).
Jeśli prawidłowa ramka zostanie odebrana, to urządzenie zaktualizuje wskazanie czasu oraz czas zegara RTC i zasygnalizuje to długim miganiem dwukropka na wyświetlaczu (ok 2/3 s).
Wykaz elementówPłytka główna Rezystory: Kondensatory: Półprzewodniki: Inne: Wyświetlacz standardowy: R1: 1 kΩ Wyświetlacz opcjonalny: R1, R2: 220 Ω |
Budowa
Schemat ideowy zegara pokazano na rysunku 1, natomiast wyświetlaczy - na rysunkach 2 (mniejszy, podstawowy) i 5 (duży, opcjonalny). Pracą urządzenia steruje mikrokontroler ATmega8. Pomiędzy punktami synchronizacji czasu urządzenie odmierza czas za pomocą wyspecjalizowanego układu zegara RTC typu MCP7940.
Pracuje on w takiej konfiguracji, że na wyprowadzeniu MFP jest generowany przebieg prostokątny o częstotliwości dokładnie 1 Hz. Wyprowadzenie MFP jest połączone z wejściem INT0 procesora i każde zbocze opadające powoduje wygenerowanie przerwania. Sygnał 1 Hz z zegara RTC nie jest synchronizowany z czasem UTC, więc wskazania zegara mogą być spóźnione o maksymalnie 1 sekundę.
Zasilanie wyświetlaczy od strony katod realizuje ośmiokrotny driver ujemnej szyny zasilania ULN2803. Anody zasilane są poprzez podobny driver, ale sterujący dodatnim biegunem zasilania UDN2981. Dwa stabilizatory dostarczają oddzielne napięcie zasilania +5 V dla mikrokontrolera i jego peryferiów oraz oddzielne +9 V dla wyświetlaczy w wersji podstawowej (fotografia 4).
Zegar zbudowano w sposób pozwalający na dołączenie dużo większych wyświetlaczy, niż te zastosowane w modelu (fotografia 5). Wymaga to doprowadzenia wyższego napięcia zasilającego anody, więc stabilizator IC6 należy zastąpić zworą (połączyć skrajne wyprowadzenia) i zasilić urządzenie odpowiednim napięciem (maksymalnie +24 V). Prąd pojedynczego segmentu wyświetlacza nie może przekraczać 100 mA.
Sterowanie wyświetlaczy jest realizowanie dzięki multipleksowaniu. Po każdym cyklu zaświecenia się cyfry, następuje krótszy cykl pełnego wygaszenia wyświetlaczy. Zapobiega to prześwitywaniu cyfr na sąsiednie wyświetlacze spowodowane czasem propagacji driverów.
Ponadto, poprzez zmianę stosunku czasu zaświecenia do czasu wygaszenia jest regulowana intensywność świecenia wyświetlacza. Parametrem regulującym intensywność świecenia jest sygnał z fotorezystora - im oświetlenie otoczenia silniejsze, tym silniej świeci wyświetlacz.
Obsługa
Do obsługi zegara służą dwa przyciski S1 i S2. Krótkie naciśnięcie przycisku S1 powoduje wyświetlenie daty w formacie DD:MM:RR - po ok. 5 sekundach zegar powróci do wyświetlania czasu.
Krótkie naciśnięcie przycisku S2 wyświetli temperaturę odczytaną z dołączonego czujnika i jak poprzednio po chwili zegar powróci do wyświetlania czasu.
Dłuższe przytrzymanie (ok. 3 s) przycisku S1 uruchamia tryb ręcznego ustawiania czasu. W pierwszym kroku zostanie wyświetlona data, będzie to sygnalizowane świeceniem się kropek. Rok jest wyświetlany w postaci dwóch ostatnich cyfr (2015 będzie pokazywany jako 15).
Wartość dni będzie migała na przemian z kursorem. Każde przyciśnięcie S2 spowoduje zwiększenie, a przyciśnięcie S1 zmniejszenie wartości. Uwaga! W czasie ustawiania daty program nie koryguje liczby dni dla danego miesiąca - w każdym miesiącu możemy ustawić 31.
Po ustawieniu dnia dłuższe przytrzymanie przycisku S1 lub S2 przesuwa kursor na następną pozycję - miesiąc, a po miesiącu na rok. Kolejne dłuższe przyciśnięcie spowoduje wyświetlenie godziny - wówczas kropki zostaną wyłączone. Na początku będzie migała liczba godzin, analogicznie jak przy ustawiania daty.
Po zakończeniu ustawiania zegar powróci do normalnej pracy. Dłuższe przytrzymanie S2 uruchomi synchronizację na żądanie - zegar będzie śledził sygnał z odbiornika GPS i zaktualizuje czas po odebraniu ramki RMC.
Zegar wymaga ustawienia kilku parametrów. Włączenie zasilania układu, gdy jest wciśnięty S1 uruchamia procedurę ustawienia strefy czasowej. Pierwsze dwa pola wyświetlacza (pierwsze 4 cyfry) pokazują wartość przesunięcia zegara względem czasu uniwersalnego.
Ustawanie przebiega analogicznie, jak ustawianie daty i godziny. Zakres możliwych do ustawienia wartości zawiera się w przedziale od -14 do +14 ze skokiem 1 godzinę (oprogramowanie nie uwzględnia stref czasowych, takich jak +3:30 czy +12:45). Domyślna wartość to 1:0,0 a wiec dla Polski i większości Europy nie trzeba nic zmieniać.
Trzecie pole wyświetlacza (ostanie dwie cyfry) określa status automatycznej zmiany czasu. Wartość 0 oznacza, że funkcja jest wyłączona, wartość 1 oznacza, że funkcja jest włączona i zmiany czasu na letni/zimowy będą wykonywane automatycznie. Domyślnie funkcja jest włączona.
Włączenie zasilania układu, gdy jest wciśnięty S2 uruchamia dodatkowe ustawienia. Pierwsze pole wyświetlacza określa prędkość komunikacji z odbiornikiem GPS (baudrate). Do wyboru mamy 0 - 4800, 1 - 9600, 2 - 14400, 3 - 19200. Wartość domyślna to 1 (9600 b/s).
Drugie pole wyświetlacza określa status funkcji automatycznego wyświetlania temperatury. Gdy funkcja jest włączona ("1") temperatura jest pokazywana co ok. 70 sekund. Gdy czujnik temperatury jest odłączony, to temperatura nie będzie pokazywana pomimo aktywnej funkcji. Domyślnie funkcja jest aktywna.
Montaż i uruchomienie
Montaż płytki głównej zegara wykonujemy zgodnie z rysunkiem 7 i z zachowaniem ogólnych zasad. Płytkę zaprojektowano dla elementów przewlekanych, więc poradzą sobie nawet osoby z mniejszym doświadczeniem.
Złącze CON1 pozwala na programowanie mikrokontrolera w układzie, ale nie musi, jeśli mikrokontroler jest zaprogramowany. Przed montażem należy zdecydować, czy zegar zostanie wyposażony w standardowy czy duży wyświetlacz.
Schemat montażowy wyświetlacza standardowego pokazano na rysunku 8. Montując go należy wlutować stabilizator IC6, a rezystory R15 i R16 powinny mieć rezystancję 100 Ω, dzięki czemu wyświetlacz sekund, który jest innego typu niż pozostałe, będzie świecił z taką samą intensywnością.
Na koniec, zmontowane płytki sterownika i wyświetlacza, należy połączyć rzędem kątowych goldpinów lutując je bezpośrednio do płytek (fotografia 9).
Dla wersji z dużym wyświetlaczem (rysunek 10), stabilizator IC6 zastępujemy zworką, a rezystory R15 i R16 powinny mieć rezystancję 1 Ω. W miejscu złącza wyświetlacza DISP, po stronie lutowania, należy zamontować gniazdo goldpin. Na płytce dużego wyświetlacza należy w pierwszej kolejności zamontować listwę szpilek goldpin, również po stronie lutowania.
Po zmontowaniu obu płytek, można je łatwo połączyć. Wyświetlacze na płytce dużego wyświetlacza warto zamontować kilka milimetrów ponad płytką, dzięki czemu będzie możliwe wsunięcie nakrętek za otwory montażowe i solidne umocowanie płytek z użyciem śrub i tulejek dystansowych (fotografia 11).
Po zmontowaniu z użyciem zaprogramowanego mikrokontrolera zegar jest gotowy do pracy. W wersji standardowej można umieścić przyciski na płytce wyświetlacza.
Jeśli zegar będzie umieszczony w obudowie, to trzeba przygotować otwory na przyciski w ściance frontowej - to może być kłopotliwe i może zniszczyć estetykę obudowy.
Wygodniejszym rozwiązaniem jest dołączenie przycisków przewodami do złącza SW i wyprowadzenie ich np. z tyłu obudowy.
Do złącza TERM można dołączyć czujnik temperatury typu DS18B20, dzięki czemu zegar zyska dodatkową funkcjonalność. Wyświetlacze warto okleić czerwoną samoprzylepną folią lub umieścić w obudowie z czerwonym filtrem, co znacząco poprawi kontrast wyświetlacza i odczyt będzie możliwy nawet z kilkunastu metrów.
Odbiornik GPS należy dołączyć do złącza SIG. Odbiornik musi mieć interfejs UART o poziomie napięcia 3,3 V lub 5 V i parametrach transmisji: 8 bitów danych, parzystość - żaden, pojedynczy bit stopu. Jak pamiętamy, dopuszczalne, obsługiwane przez program prędkości transmisji to: 4800, 9600, 14400 lub 19200 b/s. Dodatkowo, powinien działać przy zasilaniu +5 V, ponieważ takie jest wyprowadzone na złączu.
Wszystkie te wymagania spełnia odbiornik GPS MARS600 zbudowany na bazie modułu u-blox 6 (fotografia 12). Co ważne, ma on zintegrowaną antenę, a całość jest zamknięta w małej, estetycznej obudowie z magnesem do montażu na powierzchni metalowej.
Moduł jest wyposażony w 2,5-metrowy przewód zakończony wtykiem PS2. Wtyk można uciąć lub dołączyć do gniazda PS2, a potem przewodami do zegara. Na rysunku 13 pokazano sygnały występujące na złączu. Doprowadzenie GND łączymy z zaciskiem G złącza SIG, VCC5.0V z zaciskiem V, a TTL_TX z zaciskiem S.
Sam odbiornik powinien być tak umieszczony, aby "widział" niebo. Oczywiście można zastosować dowolny inny odbiornik GPS, który spełnia opisane wymagania.
Należy przy tym pamiętać, że odbiornik GPS nie jest elementem niezbędnym do pracy zegara. Przy pracy bez odbiornika zegar wymaga ustawienia czasu po pierwszym włączeniu i okresowej kontroli wskazań.
KS