- Potrebne komponente:
- Kružni dijagram i objašnjenje: -
- Dohvaćanje podataka o lokaciji s GPS-a:
- Koraci za povezivanje GPS-a s PIC mikrokontrolerom: -
- Objašnjenje koda:
GPS je kratki oblik Global Positioning System. To je sustav koji pruža točne nadmorske visine, širine, dužinu, UTC vrijeme i mnogo više informacija preuzetih s 2, 3, 4 ili više satelita. Da bismo čitali podatke s GPS-a, potreban nam je mikrokontroler i već smo povezali GPS s Arduinom i Raspberry Pi.
Odabrali smo G7020 GPS modul koji proizvodi U-blox. Primit ćemo zemljopisnu dužinu i širinu određenog položaja sa satelita i prikazat ćemo ih na LCD-u sa znakovima 16x2. Dakle, ovdje ćemo povezati GPS s mikrokontrolerom PIC16F877A mikročipom.
Potrebne komponente:
- Pic16F877A - PDIP40 paket
- Daska za kruh
- Pickit-3
- 5V adapter
- LCD JHD162A
- uBLOX-G7020 GPS modul
- Žice za povezivanje perifernih uređaja.
- Otpornici 4.7k
- 10k lonac
- Kristal od 20 MHz
- 2 kom 33pF keramičkih kondenzatora
Kružni dijagram i objašnjenje: -

LCD od 16 x 2 znaka povezan je preko mikrokontrolera PIC16F877A, u kojem su RB0, RB1, RB2 spojeni na LCD pin koji je RS, R / W i E. RB4, RB5, RB6 i RB7 povezani su preko LCD 4-polnog D4, D5, D6, D7. LCD je povezan u 4-bitnom načinu ili grickajućem načinu. Saznajte više o povezivanju LCD-a s PIC mikrokontrolerom.
Kristalni oscilator od 20 MHz s dva keramička kondenzatora od 33 pF povezana preko OSC1 i OSC2 pina. Omogućit će stalnu taktnu frekvenciju od 20 MHz mikrokontroleru.
uBlox-G7020 GPS modul, prima i prenosi podatke pomoću UART-a. PIC16F877A sadrži jedan USART pokretački program unutar čipa, podatke ćemo primati od GPS modula od strane USART-a, tako da će se uspostaviti unakrsna veza od Rx pina mikrokontrolera do GPS Tx pina i USART pina za primanje povezanih preko GPS Transmit pina.
UBlox-G7020 ima kôd u boji za igle. Pozitivni ili 5V pin je u crvenoj boji, negativni ili GND pin u crnoj boji, a Transmit pin u plavoj boji.
Sve sam to povezao u ploču.
Dohvaćanje podataka o lokaciji s GPS-a:
Pogledajmo kako povezati GPS pomoću USART-a i vidjeti rezultat na LCD-u veličine 16x2 znaka.
Modul će prenositi podatke u više nizova brzinom prijenosa 9600 Baud. Ako koristimo UART terminal sa brzinom prijenosa 9600 Baud, vidjet ćemo podatke koje je primio GPS.
GPS modul šalje podatke o položaju praćenja u stvarnom vremenu u NMEA formatu (pogledajte gornju snimku zaslona). NMEA format sastoji se od nekoliko rečenica, u kojima su u nastavku navedene četiri važne rečenice. Pojedinosti o rečenici NMEA i formatu podataka možete pronaći ovdje.
- $ GPGGA: Podaci o popravku sustava globalnog pozicioniranja
- $ GPGSV: GPS sateliti na vidiku
- $ GPGSA: GPS DOP i aktivni sateliti
- $ GPRMC: Preporučeni minimalni specifični GPS / Transit podaci
Ovdje saznajte više o GPS podacima i NMEA nizovima.
Ovo su podaci koje GPS prima kada je povezan brzinom od 9600 prijenosa.
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
Kada koristimo GPS modul za praćenje bilo kojeg mjesta, trebaju nam samo koordinate i to možemo pronaći u $ GPGGA nizu. U programima se uglavnom koristi samo $ GPGGA (Global Fix System Fix Data) niz, a ostali se nizovi zanemaruju.
GPGGA, 141848,00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Što je značenje te crte?
Značenje tog retka je: -
1. Niz uvijek započinje znakom "$"
2. GPGGA je kratica za Global Positioning System Fix Data
3. "," Zarez označava razdvajanje dviju vrijednosti
4. 141848,00: GMT vrijeme kao 14 (hr): 18 (min): 48 (sek): 00 (ms)
5. 2237.63306, N: Latitude 22 (stupanj) 37 (minute) 63306 (sec) sjever
6. 08820.86316, E: Zemljopisna dužina 088 (stupanj) 20 (minute) 86316 (sek) Istok
7. 1: Fiksna količina 0 = nevaljani podaci, 1 = važeći podaci, 2 = DGPS popravak
8. 03: Broj trenutno pregledanih satelita.
9. 1.0: HDOP
10. 2,56, M: Nadmorska visina (visina nadmorske visine u metrima)
11. 1.9, M: Visina geoida
12. * 74: kontrolna suma
Dakle, trebamo br. 5 i 6 da bismo prikupili informacije o mjestu modula ili o tome gdje se nalazi.
Koraci za povezivanje GPS-a s PIC mikrokontrolerom: -
- Postavite konfiguracije mikrokontrolera koje uključuju konfiguraciju oscilatora.
- Postavite željeni priključak za LCD, uključujući TRIS registar.
- Povežite GPS modul s mikrokontrolerom pomoću USART-a.
- Inicijalizirajte USART sustav u načinu kontinuiranog prijema, sa 9600 brzina prijenosa i LCD u 4-bitnom načinu rada.
- Uzmite dva niza znakova, ovisno o duljini zemljopisne širine i dužine.
- Primajte po jedan bit znakova i provjeravajte je li pokrenut od $ ili ne.
- Ako je $ Receive onda je to niz, moramo provjeriti GPGGA, ovih 5 slova i zarez.
- Ako je GPGGA, preskočit ćemo vrijeme i potražiti geografsku širinu i dužinu. Zemljopisnu širinu i dužinu pohranit ćemo u dvoznakovni niz sve dok N (sjever) i E (istok) ne budu primljeni.
- Ispisat ćemo niz na LCD-u.
- Očisti niz.

Objašnjenje koda:
Pogledajmo kod red po redak. Prvih nekoliko redaka odnosi se na postavljanje konfiguracijskih bitova koji su objašnjeni u prethodnom vodiču, pa ih zasad preskačem. Kompletni kod dan je na kraju ovog vodiča.
Ovih pet redaka koristi se za uključivanje datoteka zaglavlja u knjižnici, lcd.h, a eusart.h za LCD i USART. A xc.h je za zaglavnu datoteku mikrokontrolera.
#include
U void main () funkciji, system_init () ; funkcija se koristi za inicijalizaciju LCD-a i USART-a.
Prazno glavno (void) { TRISB = 0x00; // Postavljanje kao izlazni system_init ();
Lcd_init (); i EUSART_Intialize (); poziva se iz dvije knjižnice lcd.h i eusart.h
praznina system_init (void) { lcd_init (); // Ovo će inicirati lcd EUSART1_Initialize (); // Ovo će inicirati Eusart }
U dok petlja smo razbiti GPGGA niz da se dužina i širina koordinirati. Primamo jedan po jedan bit i uspoređujemo ga s pojedinačnim znakovima u GPGGA nizu.
Razbijamo kodove koje ćemo dobiti: -
incomer_data = EUSART1_Read (); // Provjeri niz '$ GPGGA,' / * ------------------------------ Korak po korak pronalaženje GPGGA linije- --------------------------- * / if (incomer_data == '$') {// Prva izjava GPS podataka započinje s $ znak incomer_data = EUSART1_Read (); // Ako prva vrijednost if postane istinita, sljedeća faza 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 == ',') {// prvo, primljeno incomer_data = EUSART1_Read (); // U ovoj je fazi završeno prijavljivanje završeno, nalazi se GPGGA.
Korištenjem ovog koda preskačemo UTC vrijeme.
while (incomer_data! = ',') {// preskakanje GMT vremena incomer_data = EUSART1_Read (); }
Ovaj kôd služi za spremanje podataka o geografskoj širini i dužini u niz znakova.
incomer_data = EUSART1_Read (); zemljopisna širina = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); zemljopisna širina = incomer_data; // Pohrana podataka Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); zemljopisna dužina = netačni podaci; // Pohranjivanje podataka o zemljopisnoj dužini } }
I na kraju, na LCD smo ispisali dužinu i širinu.
broj_brojeva = 0; lcd_com (0x80); // LCD linija jedan odabir while (array_count <12) {// Niz Latitude podataka je 11-znamenkasti lcd_data (latitude); // Ispis Latitude podataka array_count ++; } broj_brojeva = 0; lcd_com (0xC0); // Izbor dva retka LCD- a while (array_count <13) {// Niz podataka Longitude je 12-znamenkasti lcd_data (longitude); // ispis array_count podataka podataka o zemljopisnoj dužini ++; }
Na ovaj način možemo povezati GPS modul s PIC mikrokontrolerom kako bismo dobili geografsku širinu i dužinu trenutnog mjesta.
Kompletne datoteke koda i zaglavlja date su u nastavku.
