- Būtini komponentai:
- Grandinės schema ir paaiškinimas: -
- Vietos duomenų gavimas iš GPS:
- GPS sąsajos su PIC mikrovaldikliu žingsniai: -
- Kodo paaiškinimas:
GPS yra trumpoji visuotinės padėties nustatymo sistemos forma. Tai sistema, teikianti tikslią aukštį, platumą, ilgumą, UTC laiką ir daug daugiau informacijos, paimta iš 2, 3, 4 ar daugiau palydovų. Norint nuskaityti duomenis iš GPS, mums reikia šiek tiek mikrovaldiklio, o mes jau susiejome GPS su „Arduino“ ir su „Raspberry Pi“.
Mes pasirinkome „ G-7020“ GPS modulį, kurį gamina „U-blox“. Iš palydovo gausime konkrečios padėties ilgumą ir platumą ir tą patį rodysime 16x2 simbolių skystųjų kristalų ekrane. Taigi čia mes susiesime GPS su PIC16F877A mikrovaldikliu mikroschema.
Būtini komponentai:
- „Pic16F877A“ - PDIP40 paketas
- Bandomoji Lenta
- „Pickit-3“
- 5V adapteris
- Skystųjų kristalų ekranas JHD162A
- „uBLOX-G7020“ GPS modulis
- Laidai periferiniams įrenginiams prijungti.
- 4.7k rezistoriai
- 10 tūkst. Puodo
- 20mHz kristalas
- 2 vnt keraminiai kondensatoriai 33pF
Grandinės schema ir paaiškinimas: -
16x2 simbolių skystųjų kristalų ekranas yra prijungtas prie PIC16F877A mikrovaldiklio, kuriame RB0, RB1, RB2 yra prijungti atitinkamai prie LCD kaiščio, kuris yra RS, R / W ir E. RB4, RB5, RB6 ir RB7 yra prijungti per LCD 4 kontaktų D4, D5, D6, D7. Skystųjų kristalų ekranas yra prijungtas 4 bitų arba nibble režimu. Sužinokite daugiau apie LCD sąsają su PIC mikrovaldikliu.
20MHz kristalinis osciliatorius su dviem keraminiais 33pF kondensatoriais, sujungtais per OSC1 ir OSC2 kaiščius. Tai mikrovaldikliui užtikrins pastovų 20 MHz taktinį dažnį.
uBlox-G7020 GPS modulis, gaukite ir perduokite duomenis naudodami UART. PIC16F877A sudaro vienas lusto viduje esantis „USART“ tvarkyklė, duomenis gausime iš GPS modulio, taigi „USART“ gaus duomenis iš GPS modulio, todėl bus sujungtas kryžminis ryšys nuo mikrovaldiklio „Rx“ kaiščio iki GPS „Tx“ ir „USART“ priėmimo kaiščio, sujungto per GPS perdavimo smeigtuką.
„UBlox-G7020“ turi kaiščių spalvos kodą. Teigiamas arba 5 V kaištis yra raudonos spalvos, neigiamas arba GND kaištis yra juodos spalvos, o perdavimo smeigtukas yra mėlynos spalvos.
Aš visa tai sujungiau duonos lentoje.
Vietos duomenų gavimas iš GPS:
Pažiūrėkime, kaip susieti GPS naudojant „USART“, ir pamatysime rezultatą 16x2 simbolių skystųjų kristalų ekrane.
Modulis perduos duomenis keliomis eilėmis 9600 perdavimo sparta. Jei naudosime UART terminalą su 9600 perdavimo sparta, pamatysime GPS gautus duomenis.
GPS modulis siunčia realaus laiko stebėjimo padėties duomenis NMEA formatu (žr. Ekrano kopiją aukščiau). NMEA formatas susideda iš kelių sakinių, kuriuose žemiau pateikiami keturi svarbūs sakiniai. Daugiau informacijos apie NMEA sakinį ir jo duomenų formatą galite rasti čia.
- $ GPGGA: visuotinės padėties nustatymo sistemos taisymo duomenys
- $ GPGSV: matomi GPS palydovai
- $ GPGSA: GPS DOP ir aktyvūs palydovai
- $ GPRMC: rekomenduojami minimalūs konkretūs GPS / tranzito duomenys
Sužinokite daugiau apie GPS duomenis ir NMEA eilutes čia.
Tai yra duomenys, kuriuos GPS gauna prisijungus 9600 baudų greičiu.
$ 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
Kai mes naudojame GPS modulį bet kuriai vietai stebėti, mums reikia tik koordinačių ir tai galime rasti $ GPGGA eilutėje. Tik $ GPGGA (Global Positioning System Fix Data) eilutės dažniausiai naudojamos programose, o kitos eilutės nepaisomos.
$ GPGGA, 141848.00, 2337.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Kokia tos linijos prasmė?
Tos linijos reikšmė yra: -
1. Stygos visada prasideda „$“ ženklu
2. GPGGA reiškia „Global Positioning System Fix Data“
3. „,“ Kablelis nurodo dviejų reikšmių atskyrimą
4. 141848.00 val.: GMT laikas kaip 14 (val.): 18 (min.): 48 (sek.): 00 (ms)
5. 2237.63306, N: 22 platuma (laipsnis) 37 (minutės) 63306 (sek) šiaurė
6. 08820.86316, E: 088 ilguma (laipsnis) 20 (minutės) 86316 (sek) rytai
7. 1: Fix Quantity 0 = neteisingi duomenys, 1 = galiojantys duomenys, 2 = DGPS taisymai
8. 03: Šiuo metu peržiūrėtų palydovų skaičius.
9. 1.0: HDOP
10. 2.56, M: aukštis (aukštis virš jūros lygio metrais)
11. 1.9, M: geoidų aukštis
12. * 74: kontrolinė suma
Taigi mums reikia Nr. 5 ir Nr. 6, kad surinktume informaciją apie modulio vietą arba, kur ji yra.
GPS sąsajos su PIC mikrovaldikliu žingsniai: -
- Nustatykite mikrovaldiklio konfigūracijas, į kurias įeina osciliatoriaus konfigūracija.
- Nustatykite norimą LCD prievadą, įskaitant TRIS registrą.
- Naudodami USART, prijunkite GPS modulį prie mikrovaldiklio.
- Inicializuokite sistemą USART nepertraukiamo priėmimo režimu, naudodami 9600 perdavimo spartą ir LCD su 4 bitų režimu.
- Paimkite du simbolių masyvus, atsižvelgiant į platumos ir ilgumos ilgį.
- Gaukite po vieną simbolio bitą vienu metu ir patikrinkite, ar jis prasideda nuo $, ar ne.
- Jei $ Gauti, tai yra eilutė, turime patikrinti GPGGA, šias 5 raides ir kablelį.
- Jei tai yra GPGGA, tada praleisime laiką ir ieškosime platumos ir ilgumos. Platumą ir ilgumą išsaugosime dviejų simbolių masyve, kol N (šiaurė) ir e (rytai) negaus.
- Masyvą atspausdinsime LCD.
- Išvalykite masyvą.
Kodo paaiškinimas:
Pažvelkime į kodą eilutėmis. Pirmos kelios eilutės skirtos konfigūracijos bitams nustatyti, kurie buvo paaiškinti ankstesnėje pamokoje, todėl kol kas juos praleidžiu. Visas kodas pateikiamas šios pamokos pabaigoje.
Šios penkios eilutės naudojamos bibliotekos antraštės failams įtraukti, lcd.h ir eusart.h yra atitinkamai LCD ir USART. Ir xc.h yra mikrovaldiklis antraštės faile.
# įtraukti
Be void main () funkciją, system_init () ; funkcija naudojama inicializuoti LCD ir USART.
Negalima pagrindinio (negaliojančio) { TRISB = 0x00; // Nustatymas kaip išvesties sistema_init ();
The lcd_init (); ir EUSART_Intialize (); yra iškviestas iš dviejų bibliotekų lcd.h ir eusart.h
void system_init (negaliojantis) { lcd_init (); // Tai inicijuos lcd EUSART1_Initialize (); // Tai inicijuos „Eusart“ }
Be o kilpa mes pertrauka GPGGA eilutę gauti Ilguma ir platuma koordinuoti. Gauname po vieną bitą ir palyginame jį su atskirais simboliais, esančiais GPGGA eilutėje.
Mes sulaužysime kodus, kuriuos gausime: -
incomer_data = EUSART1_Read (); // Patikrinkite eilutę '$ GPGGA,' / * ------------------------------ Žingsnis po žingsnio suraskite GPGGA eilutę- --------------------------- * / if (incomer_data == '$') {// Pirmasis GPS duomenų sakinys prasideda $ sign incomer_data = EUSART1_Read (); // Jei pirmasis bus teisingas, kitas etapas 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 (); jei (incomer_data == ',') {// pirma, gavo incomer_data = EUSART1_Read (); // Šiame etape baigta paskutinė patikra, randama GPGGA.
Naudodami šį kodą praleidžiame UTC laiką.
while (incomer_data! = ',') {// praleidžiant GMT laiką incomer_data = EUSART1_Read (); }
Šis kodas skirtas saugoti platumos ir ilgumos duomenis simbolių masyve.
incomer_data = EUSART1_Read (); platuma = incomer_data; while (incomer_data! = ',') { for (masyvo_skaičius = 1; incomer_data! = 'N'; masyvo_skaita ++) { incomer_data = EUSART1_Read (); platuma = incomer_data; // Išsaugoti platumos duomenis } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (masyvo_skaičius = 0; incomer_duomenys! = 'E'; masyvo_skaita ++) { incomer_data = EUSART1_Read (); ilguma = incomer_data; // Saugokite ilgumos duomenis } }
Galiausiai mes atspausdinome ilgumą ir platumą LCD ekrane.
masyvo_skaičius = 0; lcd_com (0x80); // LCD linija viena parinktis, o (masyvo_skaičius <12) {// Platumos duomenų masyvas yra 11 skaitmenų lcd_data (platuma); // Spausdinti platumos duomenų masyvo_skaičius ++; } masyvo_skaičius = 0; lcd_com (0xC0); // Lcd dviejų linijų pasirinkimas, kai (masyvo_skaičius <13) {// Ilgumos duomenų masyvas yra 12 skaitmenų lcd_data (ilguma); // Spausdinti ilgumos duomenų masyvo_skaičius ++; }
Taip galime susieti GPS modulį su PIC mikrovaldikliu, kad gautume dabartinės vietos platumą ir ilgumą.
Visi kodo ir antraštės failai pateikti žemiau.