Zbudowany jest on na procesorku ADuC845 (niby z rodziny 8051, ale za to mocno rozbudowany), który posiada m. in. dosyć dokładne 24-bitowe przetworniki ADC sigma-delta, 62kB pamięci programu FLASH, 4kB pamięci danych EEPROM, możliwość programowania za pomocą interfejsu RS232-TTL (wbudowany bootloader), przetwornik D/A i różne inne już bardziej typowe peryferia. Może być zasilany napięciem od 3 do 5V, a do taktowania wewnętrznego generatora wystarczy podłączyć kwarc "zegarkowy" 32,768kHz. Procesorek zamknięty jest w obudowie MQFP52 o rastrze 0,65mm.
Procesorek ten współpracuje za pomocą interfejsu RS232-LVTTLz odbiornikiem sygnału GPS oraz z wyświetlaczem LCD od Nokii 3310, klawiaturą i małym sygnalizatorem dźwiękowym.
Całość zasilana jest trzema akumulatorkami Ni-MH AA.
A oto owo cudo podczas czekania na sygnał GPS.
a tu już po otrzymaniu prawidłowego sygnału GPS.
Od góry mamy informację o długości i szerokości geograficznej oraz o poziomie baterii i sygnału GPS, a poniżej aktualny kurs i prędkość w węzłach lub w km/h.
Przycisk PAGE służy do zmiany kolejnych ekranów (poniżej dwa ekrany statusu)
Następny ekran w zasadzie był używany podczas pisania programu i zawiera on treść komend NMEA odbieranych od modułu GPS.
Następny ekran zawiera informacje o ilości satelitów widzianych przez moduł GPS, ilości satelitów, z których obliczana jest aktualna pozycja i graficzny poziom sygnału na poszczególnych kanałach odbiornika.
W menu urządzenia znajdują się następujące pozycje:
- GOTO WAYPOINT - wybór aktywnego waypointa z listy (nawigacja na waypoint)
- CANCEL GOTO - anulowanie nawigacji na waypoint
- ADD WAYPOINT - dodawanie nowego waypointa do listy
- DEL WAYPOINT - kasowanie waypointa z listy
- EDIT WAYPOINT - edycja waypointa z listy
- TIME ZONE - wybór strefy czasowej
- SETTINGS - na razie wybór jednostki prędkości (węzły lub km/h)
- LAT CORRECT. - korekcja długości geograficznej
- LON CORRECT - korekcja szerokości geograficznej
- NIGHT MODE - tryb ze stałym delikatnym podświetlaniem wyświetlacza
Korekcja pozycji geograficznej jest przydatna jeżeli mapa (np. papierowa), której używamy do nawigacji została sporządzona według elipsoidy innej niż WGS-84 (np. mapy chorwackie).
Urządzenie posiada możliwość wpisania do 48 waypointów wraz z 4-znakowym opisem.
Po wybraniu jakiegoś waypointa (tu MIK1 czyli Mikołajki) urządzenie przechodzi w tryb nawigacji.
W tym trybie na ekranie podawane są:
- SOG: prędkość nad dnem
- COG: kurs nad dnem
- BRG: namiar na waypoint (kurs jakim należy podążać aby dotrzeć do waypointa)
- DST: odległość od waypointa
- ETE: orientacyjny czas, jaki pozostał do pokonania, aby dotrzeć do waypointa
Przy wyliczaniu BRG i DST okazało się, że nie jest to takie proste zadanie. Do obliczeń wykorzystuje się dosyć skomplikowane działania w większości trygonometryczne na liczbach float. Przy małych odległościach między punktem odniesienia a punktem docelowym wartości tych obliczeń są na tyle małe, że czterobajtowa precyzja zmiennych float jest niewystarczająca. Dlatego zastosowano dwie metody obliczeń. Dla odległości mniejszych niż 10Nm(mil morskich) zastosowano uproszczoną metodę liczenia według tzw. loksodromy, a powyżej 10Nm według ortodromy.
Poniżej ekran wprowadzania nowego waypointa
Po dodaniu, edycji bądź usunięciu waypointa, cała lista jest sortowana i zapisywana w pamięci EEPROM w kolejności alfabetycznej według nazw waypointów.
Ekran zmiany strefy czasowej
Ekran korekcji pozycji geograficznej
Urządzenie posiada również funkcję ładowania wbudowanych akumulatorków według metody -dV.
Po podłączeniu zasilacza zewnętrznego urządzenie wykrywa ten fakt i jeżeli napięci e akumulatorków jest mniejsze niż 4V rozpoczyna proces ładowania.
Program pisałem przy wykorzystaniu kompilatora SDCC. Podczas pisania okazało się, że kompilator ma problemy z obsługą pamięci RAM procesorka (procesorek posiada 2kB RAM-u) i przy deklarowaniu zmiennych konieczne było ich bezpośrednie przyporządkowanie do poszczególnych komórek pamięci
(np. __xdata unsigned char at 0x3c0 utc_hour;)
A oto link do projektu -> http://krzoska.tk/elektronika/gps.zip