- Požadované komponenty:
- Schéma zapojenia a vysvetlenie: -
- Získanie údajov o polohe z GPS:
- Kroky na prepojenie GPS s mikrokontrolérom PIC: -
- Vysvetlenie kódu:
GPS je skrátená forma globálneho pozičného systému. Je to systém, ktorý poskytuje presnú nadmorskú výšku, šírku, dĺžku, čas UTC a mnoho ďalších informácií, ktoré sú prevzaté z 2, 3, 4 alebo viacerých satelitov. Na čítanie údajov z GPS potrebujeme nejaký mikrokontrolér a GPS sme už prepojili s Arduinom a Raspberry Pi.
Vybrali sme modul GPS G7020, ktorý vyrába spoločnosť U-blox. Zemepisnú dĺžku a šírku konkrétnej polohy získame zo satelitu a rovnaké údaje zobrazíme na 16-znakovom LCD displeji. Takže tu budeme prepojovať GPS s mikrokontrolérom PIC16F877A pomocou mikročipu.
Požadované komponenty:
- Pic16F877A - balík PDIP40
- Chlebová doska
- Pickit-3
- 5V adaptér
- LCD JHD162A
- GPS modul uBLOX-G7020
- Drôty na pripojenie periférnych zariadení.
- 4,7k rezistory
- 10k hrniec
- 20mHz kryštál
- 2 ks keramické kondenzátory 33pF
Schéma zapojenia a vysvetlenie: -
16x2 znakový LCD je pripojený cez mikrokontrolér PIC16F877A, v ktorom sú RB0, RB1, RB2 pripojené k pinom LCD, ktoré sú RS, R / W a E. RB4, RB5, RB6 a RB7 sú pripojené cez 4 pinové LCD D4, D5, D6, D7. LCD je pripojený v 4bitovom režime alebo v režime nibble. Získajte viac informácií o prepojení LCD s mikrokontrolérom PIC.
Krištáľový oscilátor 20 MHz s dvoma keramickými kondenzátormi 33 pF pripojenými cez kolíky OSC1 a OSC2. Mikrokontroléru poskytne konštantnú frekvenciu hodín 20 MHz.
Modul GPS uBlox-G7020, prijímajte a prenášajte údaje pomocou protokolu UART. PIC16F877A sa skladá z jedného ovládača USART vo vnútri čipu, údaje z modulu GPS budeme prijímať pomocou systému USART, takže dôjde k krížovému prepojeniu od kolíka Rx mikrokontroléra k kolíku Tx GPS a kolíku USART Receive pripojenému cez kolík vysielania GPS.
UBlox-G7020 má farebný kód pre kolíky. Pozitívny alebo 5V pin je v červenej farbe, záporný alebo GND pin je v čiernej farbe a pin Transmit je v modrej farbe.
Toto všetko som prepojil v doske.
Získanie údajov o polohe z GPS:
Pozrime sa, ako prepojiť GPS pomocou USART a uvidíme výsledok na 16x2 znakovom LCD.
Modul bude prenášať dáta vo viacerých reťazcoch s rýchlosťou 9600 Baud. Ak použijeme terminál UART s rýchlosťou 9600 Baud, uvidíme údaje prijaté pomocou GPS.
GPS modul odosiela údaje o polohe sledovania v reálnom čase vo formáte NMEA (pozri snímku obrazovky vyššie). Formát NMEA pozostáva z niekoľkých viet, v ktorých sú nižšie uvedené štyri dôležité vety. Viac podrobností o vete NMEA a jej dátovom formáte nájdete tu.
- $ GPGGA: Údaje o opravách globálneho pozičného systému
- $ GPGSV: Zobrazujú sa satelity GPS
- $ GPGSA: GPS DOP a aktívne satelity
- $ GPRMC: Odporúčané minimálne konkrétne údaje GPS / Tranzit
Viac informácií o údajoch GPS a reťazcoch NMEA sa dozviete tu.
Toto sú dáta prijaté GPS pri pripojení na 9600 baudov.
$ 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
Keď na sledovanie ľubovoľného miesta používame modul GPS , potrebujeme iba súradnice, ktoré nájdeme v reťazci $ GPGGA. V programoch sa väčšinou používa iba reťazec $ GPGGA (Global Positioning System Fix Data) a ostatné reťazce sú ignorované.
$ GPGGA, 141848,00 2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Aký význam má tento riadok?
Význam tohto riadku je: -
1. Reťazec sa vždy začína znakom „$“
2. GPGGA je skratka pre Global Fixing System Fix Data
3. „,“ čiarka označuje oddelenie medzi dvoma hodnotami
4. 141848,00: GMT čas ako 14 (h): 18 (min): 48 (s): 00 (ms)
5. 2237,63306, N: Zemepisná šírka 22 (stupeň) 37 (minúty) 63306 (s) sever
6. 08820.86316, E: Zemepisná dĺžka 088 (stupeň) 20 (minúty) 86316 (s) Východ
7. 1: Množstvo opravy 0 = neplatné údaje, 1 = platné údaje, 2 = oprava DGPS
8. 03: Počet aktuálne zobrazených satelitov.
9. 1.0: HDOP
10. 2,56, M: Nadmorská výška (výška nad hladinou mora v metroch)
11. 1,9, M: Výška geoidov
12. * 74: kontrolný súčet
Potrebujeme teda č. 5 a č. 6, aby sme zhromaždili informácie o umiestnení modulu alebo o tom, kde sa nachádza.
Kroky na prepojenie GPS s mikrokontrolérom PIC: -
- Nastavte konfiguráciu mikrokontroléra, ktorá obsahuje konfiguráciu oscilátora.
- Nastavte požadovaný port pre LCD vrátane registra TRIS.
- Pripojte modul GPS k mikrokontroléru pomocou USART.
- Inicializujte systém USART v režime nepretržitého príjmu s 9600 baudovou rýchlosťou a LCD so 4bitovým režimom.
- Vytvorte dve polia znakov v závislosti od dĺžky a zemepisnej šírky.
- Prijímajte po jednom bite a kontrolujte, či je spustený z $ alebo nie.
- Ak $ Receive je to reťazec, musíme skontrolovať GPGGA, týchto 5 písmen a čiarku.
- Ak je to GPGGA, potom preskočíme čas a budeme hľadať zemepisnú šírku a dĺžku. Zemepisnú šírku a dĺžku uložíme do dvojmiestneho poľa, kým nedostaneme sever (sever) a východ (východ).
- Pole vytlačíme na LCD.
- Vymažte pole.
Vysvetlenie kódu:
Pozrime sa na kódový riadok po riadku. Prvých pár riadkov slúži na nastavenie konfiguračných bitov, ktoré boli vysvetlené v predchádzajúcom návode, takže ich zatiaľ preskakujem. Celý kód je uvedený na konci tohto tutoriálu.
Týchto päť linky sú používané pre zahrnutie knižnice hlavičkové súbory, lcd.h a eusart.h je určený pre LCD a USART, resp. A xc.h je pre hlavičkový súbor mikrokontroléra.
#include
Vo funkcii void main () je system_init () ; funkcia slúži na inicializáciu LCD a USART.
Zrušiť hlavné (neplatné) { TRISB = 0x00; // Nastavenie ako výstup system_init ();
LCD_Init (); a EUSART_Intialize (); je volaná z dvoch knižníc lcd.h a eusart.h
void system_init (void) { lcd_init (); // Týmto sa inicializuje lcd EUSART1_Initialize (); // Týmto sa inicializuje Eusart }
V zatiaľ čo slučka sme prelomiť GPGGA reťazec získať zemepisnej dĺžky a šírky koordinovať. Dostávame jeden bit po druhom a porovnávame ho s jednotlivými znakmi prítomnými v reťazci GPGGA.
Rozbijeme kódy, ktoré dostaneme: -
incomer_data = EUSART1_Read (); // Skontrolujte reťazec '$ GPGGA,' / * ------------------------------ Krok za krokom nájdenie riadku GPGGA - --------------------------- * / if (incomer_data == '$') {// Prvý výpis údajov GPS začína znakom $ sign incomer_data = EUSART1_Read (); // Ak sa prvá stane skutočnosťou, potom ďalšia fáza 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 == ',') {// prvý, prijatý incomer_data = EUSART1_Read (); // V tejto fáze je dokončená konečná kontrola, nachádza sa GPGGA.
Použitím tohto kódu preskočíme čas UTC.
while (incomer_data! = ',') {// preskočenie času GMT incomer_data = EUSART1_Read (); }
Tento kód slúži na ukladanie údajov o zemepisnej šírke a dĺžke do poľa znakov.
incomer_data = EUSART1_Read (); zemepisná šírka = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); zemepisná šírka = incomer_data; // Uloženie údajov Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); zemepisná dĺžka = incomer_data; // Uloženie údajov o zemepisnej dĺžke } }
A konečne sme vytlačili zemepisnú dĺžku a šírku na LCD.
pole_počet = 0; lcd_com (0x80); // Jeden riadok LCD výber while (array_count <12) {// Pole údajov Latitude je 11-miestne lcd_data (zemepisná šírka); // Vytlačte Latitude data array_count ++; } pocet_poctu = 0; lcd_com (0xC0); // Lcd riadok dva výber while (array_count <13) {// Údaje o zemepisnej dĺžke sú 12-miestne lcd_data (zemepisná dĺžka); // Vytlačte údaj o zemepisnej dĺžke array_count ++; }
Takto môžeme prepojiť modul GPS s mikrokontrolérom PIC a získať tak zemepisnú šírku a dĺžku aktuálneho umiestnenia.
Kompletné súbory s kódom a hlavičkami sú uvedené nižšie.