- Potrebne komponente:
- Shema vezja in razlaga: -
- Pridobivanje lokacijskih podatkov iz GPS-a:
- Koraki za vmesnik GPS z mikrokrmilnikom PIC: -
- Razlaga kode:
GPS je kratka oblika Global Positioning System. To je sistem, ki zagotavlja natančne nadmorske višine, zemljepisne širine, dolžino, UTC čas in veliko več informacij, ki so vzete iz 2, 3, 4 ali več satelitov. Za branje podatkov iz GPS potrebujemo nekaj mikrokrmilnika in GPS smo že povezali z Arduino in Raspberry Pi.
Izbrali smo GPS modul G7020, ki ga izdeluje U-blox. Zemljepisno dolžino in širino določenega položaja bomo prejeli s satelita in jih prikazali na 16-krat značnem LCD-ju. Tako bomo tukaj z mikročipom povezali GPS z mikrokrmilnikom PIC16F877A.
Potrebne komponente:
- Pic16F877A - paket PDIP40
- Odbor za kruh
- Pickit-3
- 5V adapter
- LCD JHD162A
- GPS modul uBLOX-G7020
- Žice za povezavo zunanjih naprav.
- 4.7k upori
- 10k lonec
- 20mHz kristal
- 2 kosa 33pF keramičnih kondenzatorjev
Shema vezja in razlaga: -
LCD s 16 x 2 znaki je povezan prek mikrokrmilnika PIC16F877A, pri katerem so RB0, RB1, RB2 priključeni na zatič LCD, ki je RS, R / W in E. RB4, RB5, RB6 in RB7 so povezani prek 4-polnega LCD-ja D4, D5, D6, D7. LCD je povezan v 4-bitnem načinu ali načinu grizenja. Preberite več o povezovanju LCD-ja z mikrokrmilnikom PIC.
Kristalni oscilator 20MHz z dvema keramičnima kondenzatorjema po 33pF, priključenima preko zatiča OSC1 in OSC2. Mikrokrmilniku bo zagotavljal stalno frekvenco frekvence 20 MHz.
GPS modul uBlox-G7020, sprejema in prenaša podatke s pomočjo UART. PIC16F877A vsebuje en gonilnik USART znotraj čipa, podatke bo od modula GPS prejemal USART, zato bo vzpostavljena navzkrižna povezava od pin-a mikrokrmilnika do PIN-a GPS-a Tx in USART Receive pin-a, povezanega prek GPS-jevega oddajnika.
UBlox-G7020 ima barvno kodo za zatiče. Pozitivni ali 5V zatič je v rdeči barvi, negativni ali GND zatič je v črni barvi, oddajni zatič pa v modri barvi.
Vse to sem povezal v tabli.
Pridobivanje lokacijskih podatkov iz GPS-a:
Poglejmo, kako vmesnik GPS uporabljamo s pomočjo USART in si oglejte rezultat na 16-krat značnem LCD-ju.
Modul bo podatke prenašal v več nizih s hitrostjo 9600 Baud. Če uporabimo terminal UART s hitrostjo 9600 Baud, bomo videli podatke, ki jih prejme GPS.
Modul GPS pošilja podatke o položaju za sledenje v realnem času v obliki NMEA (glejte zgornji posnetek zaslona). Oblika NMEA je sestavljena iz več stavkov, v katerih so spodaj navedeni štirje pomembni stavki. Podrobnejše informacije o stavku NMEA in njegovi obliki podatkov najdete tukaj.
- $ GPGGA: podatki o popravkih sistema za globalno določanje položaja
- $ GPGSV: na ogled sateliti GPS
- $ GPGSA: GPS DOP in aktivni sateliti
- $ GPRMC: Priporočeni minimalni specifični podatki GPS / tranzita
Več o podatkih GPS in nizih NMEA lahko preberete tukaj.
To so podatki, ki jih GPS prejme, ko je povezan s hitrostjo 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
Ko za sledenje katere koli lokacije uporabljamo modul GPS , potrebujemo le koordinate in to lahko najdemo v nizu $ GPGGA. V programih se večinoma uporablja samo niz $ GPGGA (Global Positioning System Fix Data), drugi nizi pa so prezrti.
$ GPGGA, 141848,00, 2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Kaj pomeni ta vrstica?
Pomen te vrstice je:
1. Niz se vedno začne z znakom "$"
2. GPGGA je kratica za Global Positioning System Fix Data
3. "," Vejica označuje ločitev med dvema vrednostma
4. 141848,00: GMT čas kot 14 (h): 18 (min): 48 (sek): 00 (ms)
5. 2237,63306, N: zemljepisna širina 22 (stopinja) 37 (minute) 63306 (sek) sever
6. 08820.86316, E: Zemljepisna dolžina 088 (stopinja) 20 (minute) 86316 (sek) vzhod
7. 1: Popravi količino 0 = neveljavni podatki, 1 = veljavni podatki, 2 = popravek DGPS
8. 03: Število trenutno gledanih satelitov.
9. 1.0: HDOP
10. 2,56, M: Nadmorska višina (višina nadmorske višine v metrih)
11. 1.9, M: Višina geoidov
12. * 74: kontrolna vsota
Torej potrebujemo številki 5 in 6, da zberemo informacije o lokaciji modula ali o tem, kje se nahaja.
Koraki za vmesnik GPS z mikrokrmilnikom PIC: -
- Nastavite konfiguracije mikrokrmilnika, ki vključujejo oscilator.
- Nastavite želena vrata za LCD, vključno z registrom TRIS.
- Modul GPS povežite z mikrokrmilnikom s pomočjo USART.
- Inicializirajte sistem USART v načinu neprekinjenega prejema s hitrostjo prenosa 9600 baudov in LCD v 4-bitnem načinu.
- Vzemite dve vrsti znakov, odvisno od dolžine zemljepisne širine in dolžine.
- Prejemajte po en znakovni bit naenkrat in preverite, ali se začne iz $ ali ne.
- Če je $ Receive to niz, moramo preveriti GPGGA, teh 5 črk in vejico.
- Če gre za GPGGA, bomo čas preskočili in poiskali zemljepisno širino in dolžino. Zemljepisno širino in dolžino bomo shranili v dvoznakovni matriki, dokler N (sever) in E (vzhod) ne bosta prejeta.
- Niz bomo natisnili na LCD.
- Počisti polje.
Razlaga kode:
Poglejmo kodo po vrsticah. Prvih nekaj vrstic je za nastavitev konfiguracijskih bitov, ki so bili razloženi v prejšnji vadnici, zato jih za zdaj preskačem. Celotna koda je podana na koncu te vadnice.
Teh pet vrstic se uporablja za vključitev datotek z glavo knjižnice, lcd.h in eusart.h je za LCD oziroma USART. In xc.h je za glavo datoteke mikrokrmilnika.
#include
V void main () funkcija, system_init () ; funkcija se uporablja za inicializacijo LCD in USART.
Praznina glavna (praznina) { TRISB = 0x00; // Nastavitev kot izhodni sistem_init ();
Lcd_init (); in EUSART_Intialize (); se pokliče iz dveh knjižnic lcd.h in eusart.h
void system_init (void) { lcd_init (); // To bo inicializiralo lcd EUSART1_Initialize (); // To bo inicializiralo Eusart }
V medtem ko zanke smo prekinili GPGGA niz dobili zemljepisno dolžino in širino usklajevanje. Prejemamo en bit naenkrat in ga primerjamo s posameznimi znaki v nizu GPGGA.
Razbijemo kode, ki jih bomo dobili: -
incomer_data = EUSART1_Read (); // Preverite niz '$ GPGGA,' / * ------------------------------ Korak za korakom poiščite črto GPGGA- --------------------------- * / if (incomer_data == '$') {// Prvi stavek podatkov GPS se začne z $ sign incomer_data = EUSART1_Read (); // Če prvi postane true, potem naslednja faza if (incomer_data == 'G') { incomer_data = EUSART1_Read (); če (incomer_data == 'P'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G'); { incomer_data = EUSART1_Read (); če (incomer_data == 'G') { incomer_data = EUSART1_Read (); če (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// prvič, prejeto incomer_data = EUSART1_Read (); // Na tej stopnji je končana prijava končana, najde se GPGGA.
Z uporabo te kode preskočimo čas UTC.
while (incomer_data! = ',') {// preskakovanje GMT časa incomer_data = EUSART1_Read (); }
Ta koda je namenjena shranjevanju podatkov o zemljepisni širini in dolžini v niz znakov.
incomer_data = EUSART1_Read (); zemljepisna širina = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); zemljepisna širina = incomer_data; // Shranjevanje podatkov Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); zemljepisna dolžina = incomer_data; // Shranjevanje podatkov o dolžini } }
In na koncu smo na LCD natisnili zemljepisno dolžino in širino.
array_count = 0; lcd_com (0x80); // Izbira prve vrstice LCD, medtem ko (array_count <12) {// Niz podatkov Latitude je 11-mestni lcd_data (latitude); // Natisnemo Latitude data array_count ++; } število_ matrike = 0; lcd_com (0xC0); // Izbira vrstice dve vrstici LCD (array_count <13) {// Matrika podatkov o dolžini je 12-mestni lcd_data (zemljepisna dolžina); // Natisnemo matriko podatkov array_count ++; }
Tako lahko povežemo GPS modul z mikrokrmilnikom PIC, da dobimo zemljepisno širino in dolžino trenutne lokacije.
Popolne datoteke kode in glave so podane spodaj.