- Požadované komponenty:
- Schéma zapojení a vysvětlení: -
- Získání údajů o poloze z GPS:
- Kroky k propojení GPS s mikrokontrolérem PIC: -
- Vysvětlení kódu:
GPS je krátká forma globálního pozičního systému. Jedná se o systém, který poskytuje přesnou nadmořskou výšku, šířku, délku, čas UTC a mnoho dalších informací, které jsou převzaty z 2, 3, 4 nebo více satelitů. Abychom mohli číst data z GPS, potřebujeme nějaký mikrokontrolér a GPS jsme již propojili s Arduinem a Raspberry Pi.
Vybrali jsme modul GPS G7020, který vyrábí společnost U-blox. Obdržíme zeměpisnou délku a šířku konkrétní polohy ze satelitu a zobrazíme je na 16x2 znakovém LCD. Takže zde budeme propojovat GPS s mikrokontrolérem PIC16F877A pomocí mikročipu.
Požadované komponenty:
- Pic16F877A - balíček PDIP40
- Chlebová deska
- Pickit-3
- 5V adaptér
- LCD JHD162A
- GPS modul uBLOX-G7020
- Dráty pro připojení periferních zařízení.
- 4,7k rezistory
- 10k hrnec
- 20mHz krystal
- 2 ks keramických kondenzátorů 33pF
Schéma zapojení a vysvětlení: -
16x2 znakový LCD je připojen přes mikrokontrolér PIC16F877A, ve kterém jsou RB0, RB1, RB2 připojeny příslušně k pinům LCD, které jsou RS, R / W a E. RB4, RB5, RB6 a RB7 jsou připojeny přes 4 pinové D4, D5 LCD, D6, D7. Displej LCD je připojen v režimu 4bit nebo nibble. Další informace o propojení LCD s mikrokontrolérem PIC.
Krystalový oscilátor 20MHz se dvěma keramickými kondenzátory 33pF připojenými přes pin OSC1 a OSC2. Mikrokontroléru poskytne konstantní taktovací frekvenci 20 MHz.
Modul GPS uBlox-G7020, příjem a přenos dat pomocí UART. PIC16F877A se skládá z jednoho ovladače USART uvnitř čipu, data z modulu GPS budeme přijímat pomocí USART, takže bude provedeno křížové spojení z kolíku Rx mikrokontroléru na kolík Tx GPS a kolík USART Receive připojený přes kolík GPS Transmit.
UBlox-G7020 má barevný kód pro kolíky. Pozitivní nebo 5V kolík je v červené barvě, záporný nebo GND kolík je v černé barvě a kolík Transmit je v modré barvě.
To vše jsem propojil na prkénku.
Získání údajů o poloze z GPS:
Podívejme se, jak propojit GPS pomocí USART a uvidíme výsledek na 16x2 znakovém LCD.
Modul bude přenášet data ve více řetězcích rychlostí 9600 baudů. Pokud použijeme terminál UART s přenosovou rychlostí 9600 Baud, uvidíme data přijatá GPS.
GPS modul odesílá údaje o poloze sledování v reálném čase ve formátu NMEA (viz výše uvedený snímek obrazovky). Formát NMEA se skládá z několika vět, ve kterých jsou níže uvedeny čtyři důležité věty. Více podrobností o větě NMEA a jejím datovém formátu najdete zde.
- $ GPGGA: Údaje o opravách globálního pozičního systému
- $ GPGSV: Zobrazují se satelity GPS
- $ GPGSA: GPS DOP a aktivní satelity
- $ GPRMC: Doporučená minimální konkrétní data GPS / Transit
Další informace o datech GPS a řetězcích NMEA naleznete zde.
Toto jsou data přijatá GPS při připojení na 9600 baudech.
$ GPRMC, 141848,00, A, 2237,63306, N, 08820,86316, E, 0,553,, 100418,,, A * 73 $ GPVTG,, T,, M, 0,553, N, 1,024, K, A * 27 $ GPGGA, 141848,00, 2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2,75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820,86316, E, 141848,00, A, A * 65
Když používáme modul GPS ke sledování libovolného místa, potřebujeme pouze souřadnice a můžeme jej najít v řetězci $ GPGGA. V programech se většinou používá pouze řetězec $ GPGGA (Global Positioning System Fix Data) a ostatní řetězce jsou ignorovány.
$ GPGGA, 141848,00,2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Co znamená ten řádek?
Význam tohoto řádku je: -
1. Řetězec vždy začíná znakem „$“
2. GPGGA je zkratka pro Global Positioning System Fix Data
3. „,“ čárka označuje oddělení mezi dvěma hodnotami
4. 141848,00: GMT čas jako 14 (h): 18 (min): 48 (s): 00 (ms)
5. 2237,63306, N: Zeměpisná šířka 22 (stupeň) 37 (minuty) 63306 (s) Sever
6. 08820.86316, E: Zeměpisná délka 088 (stupeň) 20 (minuty) 86316 (s) na východ
7. 1: Fixní množství 0 = neplatná data, 1 = platná data, 2 = oprava DGPS
8. 03: Počet aktuálně zobrazených satelitů.
9. 1.0: HDOP
10. 2,56, M: Nadmořská výška (výška nad mořem v metrech)
11. 1,9, M: Výška geoidů
12. * 74: kontrolní součet
Potřebujeme tedy č. 5 a č. 6, abychom shromáždili informace o umístění modulu nebo o tom, kde se nachází.
Kroky k propojení GPS s mikrokontrolérem PIC: -
- Nastavte konfigurace mikrokontroléru, které zahrnují konfiguraci oscilátoru.
- Nastavte požadovaný port pro LCD včetně registru TRIS.
- Připojte modul GPS k mikrokontroléru pomocí USART.
- Inicializujte systém USART v režimu nepřetržitého příjmu s přenosovou rychlostí 9600 a LCD se 4bitovým režimem.
- Vezměte dvě pole znaků v závislosti na délce zeměpisné šířky a délce.
- Přijímejte jeden znak po druhém a zkontrolujte, zda je spuštěn z $ nebo ne.
- Pokud $ Receive je to řetězec, musíme zkontrolovat GPGGA, těchto 5 písmen a čárku.
- Pokud je to GPGGA, pak přeskočíme čas a vyhledáme zeměpisné šířky a délky. Uložíme zeměpisné šířky a délky do dvouznakového pole, dokud nebudou přijaty N (sever) a E (východ).
- Pole vytiskneme na LCD.
- Vymažte pole.
Vysvětlení kódu:
Podívejme se na kód po řádku. Prvních několik řádků slouží k nastavení konfiguračních bitů, které byly vysvětleny v předchozím tutoriálu, takže je zatím přeskakuji. Celý kód je uveden na konci tohoto tutoriálu.
Těchto pět řádků se používá pro zahrnutí hlavičkových souborů knihovny, lcd.h a eusart.h je pro LCD a USART. A xc.h je pro záhlaví souboru mikrokontroléru.
#zahrnout
Ve funkci void main () je system_init () ; funkce slouží k inicializaci LCD a USART.
Zrušit hlavní (neplatné) { TRISB = 0x00; // Nastavení jako výstup system_init ();
LCD_Init (); a EUSART_Intialize (); je volána ze dvou knihoven lcd.h a eusart.h
void system_init (void) { lcd_init (); // Tím se inicializuje lcd EUSART1_Initialize (); // Tím se inicializuje Eusart }
V zatímco smyčka jsme prolomit GPGGA řetězec získat zeměpisné délky a šířky koordinovat. Přijímáme jeden bit po druhém a porovnáváme jej s jednotlivými znaky přítomnými v řetězci GPGGA.
Rozbijeme kódy, které dostaneme: -
incomer_data = EUSART1_Read (); // Zkontrolujte řetězec '$ GPGGA,' / * ------------------------------ Krok za krokem najít linku GPGGA- --------------------------- * / if (incomer_data == '$') {// První výpis dat GPS začíná $ sign incomer_data = EUSART1_Read (); // Pokud se první stane pravdivou, pak další fáze if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'P'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// první, přijato incomer_data = EUSART1_Read (); // V této fázi je dokončena závěrečná kontrola, je nalezeno GPGGA.
Použitím tohoto kódu jsme přeskočili čas UTC.
while (incomer_data! = ',') {// přeskočení času GMT incomer_data = EUSART1_Read (); }
Tento kód slouží k ukládání dat zeměpisné šířky a délky v poli znaků.
incomer_data = EUSART1_Read (); zeměpisná šířka = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); zeměpisná šířka = incomer_data; // Uložení dat Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); zeměpisná délka = incomer_data; // Uložení údajů o zeměpisné délce } }
A konečně jsme na LCD vytiskli zeměpisnou délku a šířku.
array_count = 0; lcd_com (0x80); // Řádek LCD jeden výběr while (array_count <12) {// Pole dat Latitude je 11 číslic lcd_data (zeměpisná šířka); // Tisk datového pole Latitude_count ++; } pocet_poctu = 0; lcd_com (0xC0); // Lcd řádek dva výběr while (array_count <13) {// Pole dat zeměpisné délky je 12 číslic lcd_data (zeměpisná délka); // Tisk datového pole Zeměpisná délka_počet ++; }
Takto můžeme propojit modul GPS s mikrokontrolérem PIC, abychom získali zeměpisnou šířku a délku aktuální polohy.
Kompletní soubory kódu a záhlaví jsou uvedeny níže.