- Nepieciešamās sastāvdaļas:
- Ķēdes shēma un skaidrojums: -
- Atrašanās vietas datu iegūšana no GPS:
- Soļi GPS saskarnei ar PIC mikrokontrolleru: -
- Koda skaidrojums:
GPS ir globālās pozicionēšanas sistēmas īsforma. Tā ir sistēma, kas nodrošina precīzu augstumu, platumu, garumu, UTC laiku un daudz vairāk informācijas, kas ņemta no 2, 3, 4 vai vairāk satelīta. Lai nolasītu datus no GPS, mums ir nepieciešams mikrokontrolleris, un mēs jau esam saskarnē GPS ar Arduino un ar Raspberry Pi.
Mēs esam izvēlējušies G7020 GPS moduli, kuru izgatavo U-blox. Mēs saņemsim konkrētas atrašanās vietas garumu un platumu no satelīta un to pašu parādīsim 16x2 rakstzīmju LCD ekrānā. Tātad šeit mēs saskarsmē GPS ar PIC16F877A mikrokontrolleru, izmantojot mikroshēmu.
Nepieciešamās sastāvdaļas:
- Pic16F877A - PDIP40 pakete
- Maizes dēlis
- Pikets-3
- 5V adapteris
- LCD JHD162A
- uBLOX-G7020 GPS modulis
- Vadi perifērijas ierīču savienošanai.
- 4.7k rezistori
- 10k katls
- 20mHz kristāls
- 2 gab 33pF keramikas kondensatori
Ķēdes shēma un skaidrojums: -
16x2 rakstzīmju LCD ir savienots ar PIC16F877A mikrokontrolleru, kurā RB0, RB1, RB2 ir savienoti attiecīgi ar LCD kontaktu, kas ir RS, R / W un E. RB4, RB5, RB6 un RB7 ir savienoti ar LCD 4 kontaktu D4, D5, D6, D7. LCD ir savienots 4 bitu vai kniebiena režīmā. Uzziniet vairāk par LCD saskarni ar PIC mikrokontrolleru.
20MHz kristāla oscilators ar diviem keramikas kondensatoriem 33pF, kas savienoti pāri OSC1 un OSC2 tapām. Tas nodrošinās pastāvīgu 20 MHz takts frekvenci mikrokontrollerim.
uBlox-G7020 GPS modulis, saņemiet un pārsūtiet datus, izmantojot UART. PIC16F877A sastāv no viena USART draivera mikroshēmas iekšpusē. Mēs saņemsim datus no GPS moduļa, izmantojot USART, tāpēc tiks izveidots šķērssavienojums no mikrokontrollera Rx tapas ar GPS Tx kontaktu un USART saņemšanas tapu, kas savienots caur GPS pārraides tapu.
UBlox-G7020 ir tapu krāsu kods. Pozitīvā vai 5V tapa ir sarkanā krāsā, negatīvā vai GND tapa ir melnā krāsā, bet pārraides tapa ir zilā krāsā.
To visu es esmu savienojis maizes dēlī.
Atrašanās vietas datu iegūšana no GPS:
Apskatīsim, kā saskarni GPS, izmantojot USART, un redzēsim rezultātu 16x2 rakstzīmju LCD.
Modulis pārsūtīs datus vairākās virknēs ar 9600 pārraides ātrumu. Ja izmantosim UART termināli ar 9600 Baud ātrumu, mēs redzēsim GPS saņemtos datus.
GPS modulis reāllaika izsekošanas pozīcijas datus nosūta NMEA formātā (skatiet iepriekš redzamo ekrānuzņēmumu). NMEA formāts sastāv no vairākiem teikumiem, kuros turpmāk ir norādīti četri svarīgi teikumi. Sīkāka informācija par NMEA teikumu un tā datu formātu ir atrodama šeit.
- $ GPGGA: Globālās pozicionēšanas sistēmas fiksēšanas dati
- $ GPGSV: GPS satelīti ir redzami
- $ GPGSA: GPS DOP un aktīvi satelīti
- $ GPRMC: ieteicamais minimālais specifiskais GPS / tranzīta dati
Uzziniet vairāk par GPS datiem un NMEA virknēm šeit.
Šie ir dati, ko GPS saņem, kad ir izveidots savienojums ar 9600 bitu pārraides ātrumu.
$ 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
Kad mēs izmantojam GPS moduli jebkuras vietas izsekošanai, mums ir nepieciešamas tikai koordinātas, un to varam atrast virknē $ GPGGA. Programmās lielākoties tiek izmantota tikai virkne $ GPGGA (globālās pozicionēšanas sistēmas labošanas dati), un citas virknes tiek ignorētas.
GPGGA, 141848.00, 2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Kāda ir šīs līnijas nozīme?
Šīs līnijas nozīme ir: -
1. Stīgas vienmēr sākas ar zīmi “$”
2. GPGGA apzīmē globālās pozicionēšanas sistēmas fiksēšanas datus
3. “,” Comma norāda divu vērtību atdalīšanu
4. 141848.00: GMT laiks kā 14 (h): 18 (min): 48 (sec): 00 (ms)
5. 2237.63306, N: 22 platums (grāds) 37 (minūtes) 63306 (sek) ziemeļi
6. 08820.86316, E: 088 garums (grāds) 20 (minūtes) 86316 (sek) Austrumi
7. 1: Fix Quantity 0 = nederīgi dati, 1 = derīgi dati, 2 = DGPS labojums
8. 03: Pašlaik skatīto satelītu skaits.
9. 1.0: HDOP
10. 2.56, M: augstums (augstums virs jūras līmeņa metros)
11. 1.9, M: ģeoīdu augstums
12. * 74: kontrolsumma
Tāpēc mums ir vajadzīgi Nr. 5 un Nr. 6, lai apkopotu informāciju par moduļa atrašanās vietu vai, kur tā atrodas.
Soļi GPS saskarnei ar PIC mikrokontrolleru: -
- Iestatiet mikrokontrollera konfigurācijas, kas ietver oscilatora konfigurāciju.
- Iestatiet LCD vēlamo portu, ieskaitot TRIS reģistru.
- Savienojiet GPS moduli ar mikrokontrolleru, izmantojot USART.
- Inicializējiet sistēmu USART nepārtrauktas saņemšanas režīmā ar 9600 bitu pārraides ātrumu un LCD ar 4 bitu režīmu.
- Ņemiet divus rakstzīmju blokus atkarībā no platuma un garuma garuma.
- Saņemiet vienu rakstzīmju bitu vienlaikus un pārbaudiet, vai tas ir sācis no $.
- Ja $ Saņemt, tad tā ir virkne, mums jāpārbauda GPGGA, šie 5 burti un komats.
- Ja tas ir GPGGA, tad mēs izlaidīsim laiku un meklēsim platumu un garumu, mēs uzglabāsim platuma un garuma datus divu rakstzīmju masīvā, līdz N (ziemeļi) un E (austrumi) netiks saņemti.
- Mēs izdrukāsim masīvu LCD.
- Notīriet masīvu.
Koda skaidrojums:
Apskatīsim kodu pa rindām. Pirmās rindas ir paredzētas konfigurācijas bitu iestatīšanai, kas tika izskaidroti iepriekšējā apmācībā, tāpēc es tos tagad izlaižu. Pilns kods ir norādīts šīs apmācības beigās.
Šīs piecas rindas tiek izmantotas bibliotēkas galvenes failu iekļaušanai , lcd.h un eusart.h ir attiecīgi LCD un USART. Un xc.h ir paredzēts mikrokontrolleru galvenes failam.
# iekļaut
In spēku Main () funkciju, system_init () ; funkcija tiek izmantota, lai inicializētu LCD un USART.
Spēkā nav galvenā (tukšums) { TRISB = 0x00; // Iestatīšana kā izvades sistēma_init ();
The lcd_init (); un EUSART_Intialize (); tiek izsaukts no divām bibliotēkām lcd.h un eusart.h
void system_init (void) { lcd_init (); // Tas inicializēs lcd EUSART1_Initialize (); // Tas inicializēs Eusart }
Laikā, kamēr cilpa, mēs pārtraucam GPGGA virkni, lai iegūtu garuma un platuma koordinātas. Mēs saņemam vienu bitu vienlaikus un salīdzinām to ar atsevišķām rakstzīmēm, kas atrodas GPGGA virknē.
Mēs pārkāpjam kodus, kurus mēs iegūsim: -
incomer_data = EUSART1_Read (); // Pārbaudiet virkni '$ GPGGA,' / * ------------------------------ Soli pa solim atrodiet GPGGA līniju- --------------------------- * / ja (incomer_data == '$') {// GPS datu pirmais paziņojums sākas ar $ sign incomer_data = EUSART1_Read (); // Ja pirmā kļūst patiesa, tad nākamā 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 (); ja (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// pirmkārt, saņemts incomer_data = EUSART1_Read (); // Šajā posmā ir pabeigta pēdējā pārbaude, ir atrasta GPGGA.
Izmantojot šo kodu, mēs izlaižam UTC laiku.
while (incomer_data! = ',') {// izlaižot GMT laiku incomer_data = EUSART1_Read (); }
Šis kods ir paredzēts platuma un garuma datu glabāšanai rakstzīmju masīvā.
incomer_data = EUSART1_Read (); platums = incomer_data; while (incomer_data! = ',') { for (masīva_skaitlis = 1; incomera_dati! = 'N'; masīva_skaitlis ++) { incomer_data = EUSART1_Read (); platums = incomer_data; // Saglabāt Latitude datus } incomer_data = EUSART1_Read (); ja (incomer_data == ',') { for (masīva_skaitījums = 0; incomer_data! = 'E'; masīva_skaitlis ++) { incomer_data = EUSART1_Read (); garums = incomer_data; // Saglabāt garuma datus } }
Un visbeidzot, mēs esam uz LCD uzdrukājuši garumu un platumu.
masīva_skaits = 0; lcd_com (0x80); // LCD līnijas viena atlase, savukārt (masīva_skaitījums <12) {// Platuma datu masīvs ir 11 ciparu lcd_data (platums); // Izdrukājiet Latitude datu masīva_skaits ++; } masīva_skaits = 0; lcd_com (0xC0); // Lcd divu rindiņu atlase, savukārt (masīva_skaits <13) {// Garuma datu masīvs ir 12 ciparu lcd_data (garums); // Izdrukājiet garuma datu masīva_skaitījumu ++; }
Tas ir veids, kā mēs varam saskarni GPS moduli ar PIC mikrokontrolleru, lai iegūtu pašreizējās atrašanās vietas platumu un garumu.
Pilni koda un galvenes faili ir norādīti zemāk.