- Vaaditut komponentit:
- Piirikaavio ja selitys: -
- Sijaintitietojen hakeminen GPS: ltä
- Vaiheet GPS: n liittämiseen PIC-mikrokontrolleriin: -
- Koodin selitys:
GPS on lyhyt muoto globaalista paikannusjärjestelmästä. Se on järjestelmä, joka tarjoaa tarkan korkeuden, leveys-, pituus-, UTC-ajan ja monia muita tietoja, jotka on otettu 2, 3, 4 tai useammasta satelliitista. Tietojen lukemiseksi GPS: stä tarvitsemme jonkin verran mikrokontrolleria ja olemme jo liittäneet GPS: n Arduinoon ja Raspberry Pi: hen.
Olemme valinneet G7020 GPS-moduulin, jonka valmistaa U-blox. Vastaanotamme tietyn sijainnin pituus- ja leveysasteen satelliitilta ja näytämme ne 16x2-merkkisellä LCD-näytöllä. Joten tässä liitämme GPS: n PIC16F877A-mikrokontrolleriin mikrosirulla.
Vaaditut komponentit:
- Pic16F877A - PDIP40-paketti
- Leipälauta
- Pickit-3
- 5 V: n sovitin
- LCD JHD162A
- uBLOX-G7020 GPS-moduuli
- Johdot oheislaitteiden liittämistä varten.
- 4.7k vastukset
- 10k potti
- 20mHz kristalli
- 2 kpl 33pF keraamisia kondensaattoreita
Piirikaavio ja selitys: -
16x2 merkin LCD on kytketty PIC16F877A-mikrokontrolleriin, jossa RB0, RB1, RB2 on kytketty vastaavasti LCD-nastaan, joka on RS, R / W ja E.RB4, RB5, RB6 ja RB7 on kytketty LCD: n 4-nastaisiin D4, D5, D6, D7. Nestekidenäyttö on kytketty 4-bittisessä tai naposteltavassa tilassa. Lisätietoja nestekidenäytön liittämisestä PIC-mikrokontrolleriin.
20 MHz: n kideoskillaattori kahdella keraamisella 33pF-kondensaattorilla, jotka on kytketty OSC1- ja OSC2-nastojen yli. Se tarjoaa vakiona 20 MHz: n kellotaajuuden mikrokontrollerille.
uBlox-G7020 GPS-moduuli, vastaanottaa ja lähettää tietoja UART: n avulla. PIC16F877A koostuu yhdestä sirun sisällä olevasta USART-ohjaimesta. Vastaanotamme tietoja GPS-moduulista, joten USART muodostaa ristikytkennän mikro-ohjaimen Rx-nastasta GPS: n Tx-nastaan ja USART-vastaanottotappiin, joka on kytketty GPS: n lähetystapiin.
UBlox-G7020: ssä on nastojen värikoodi. Positiivinen tai 5 V: n nasta on punaisella, negatiivinen tai GND-nasta on mustaa ja lähetystappi on sinistä.
Olen liittänyt kaiken tämän leipälautaan.
Sijaintitietojen hakeminen GPS: ltä
Katsotaanpa, miten GPS voidaan liittää USART: n avulla, ja katsotaan tulos 16x2-merkkisellä LCD-näytöllä.
Moduuli lähettää tietoja useissa kielissä 9600 tiedonsiirtonopeudella. Jos käytämme UART-päätettä, jonka siirtonopeus on 9600, näemme GPS: n vastaanottamat tiedot.
GPS-moduuli lähettää reaaliaikaisen paikannustiedot NMEA-muodossa (katso yllä oleva kuvakaappaus). NMEA-formaatti koostuu useista lauseista, joissa alla on neljä tärkeää virkettä. Lisätietoja NMEA-lauseesta ja sen datamuodosta löytyy täältä.
- $ GPGGA: Globaalin paikannusjärjestelmän korjaustiedot
- $ GPGSV: GPS-satelliitit näkyvissä
- $ GPGSA: GPS DOP ja aktiiviset satelliitit
- $ GPRMC: Suositeltu GPS / Transit-datan vähimmäistiedot
Lisätietoja GPS-tiedoista ja NMEA-merkkijonoista on täällä.
Tämä on GPS: n vastaanottama data, kun se on kytketty 9600 baudinopeudella.
$ 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
Kun käytämme GPS-moduulia minkä tahansa sijainnin seuraamiseen, tarvitsemme vain koordinaatit ja löydämme sen $ GPGGA-merkkijonosta. Ainoastaan $ GPGGA (Global Positioning System Fix Data) -merkkijonoa käytetään ohjelmissa ja muita merkkijonoja ei oteta huomioon.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2,56,1.9, M, -54,2, M,, * 74
Mitä tämä viiva tarkoittaa?
Tämän rivin merkitys on: -
1. Merkkijono alkaa aina “$” -merkillä
2. GPGGA on lyhenne sanoista Global Positioning System Fix Data
3. "," Pilkku osoittaa kahden arvon välisen eron
4. 141848.00: GMT-aika 14 (hr): 18 (min): 48 (s): 00 (ms)
5. 2237.63306, N: Leveysaste 22 (aste) 37 (minuuttia) 63306 (sek) Pohjoinen
6. 08820.86316, E: Pituusaste 088 (aste) 20 (minuuttia) 86316 (s) itään
7. 1: Korjausmäärä 0 = virheellinen data, 1 = kelvollinen data, 2 = DGPS-korjaus
8. 03: Katsottujen satelliittien lukumäärä.
9. 1.0: HDOP
10. 2.56, M: Korkeus (korkeus merenpinnan yläpuolella metreinä)
11. 1.9, M: Geoidien korkeus
12. * 74: Tarkistussumma
Joten tarvitsemme nro 5 ja nro 6 keräämään tietoja moduulin sijainnista tai sijainnista.
Vaiheet GPS: n liittämiseen PIC-mikrokontrolleriin: -
- Aseta mikro-ohjaimen kokoonpanot, jotka sisältävät oskillaattorin kokoonpanon.
- Aseta haluttu portti LCD-näytölle ja TRIS-rekisteri.
- Liitä GPS-moduuli mikro-ohjaimeen USART-toiminnolla.
- Alusta järjestelmän USART jatkuvassa vastaanottotilassa 9600 baudinopeudella ja 4-bittisellä LCD-näytöllä.
- Ota kaksi merkistöä leveys- ja pituuspiirin mukaan.
- Vastaanota yksi merkkibitti kerrallaan ja tarkista, aloitetaanko se dollarista.
- Jos $ Vastaanota, se on merkkijono, meidän on tarkistettava GPGGA, nämä 5 kirjainta ja pilkku.
- Jos se on GPGGA, ohitamme ajan ja etsimme leveys- ja pituusasteita. Tallennamme leveys- ja pituusasteet kahteen merkkimatriisiin, kunnes N (pohjoinen) ja E (itä) eivät ole vastaanotettu.
- Tulostamme ryhmän LCD-näytöllä.
- Tyhjennä taulukko.
Koodin selitys:
Katsotaanpa koodia rivi kerrallaan. Muutama ensimmäinen rivi on tarkoitettu määritysbittien määrittämiseen, jotka selitettiin edellisessä opetusohjelmassa, joten ohitan ne toistaiseksi. Koko koodi on tämän opetusohjelman lopussa.
Näitä viittä riviä käytetään kirjaston otsikkotiedostojen sisällyttämiseen, lcd.h ja eusart.h ovat vastaavasti LCD: lle ja USART. Ja xc.h on tarkoitettu mikro-ohjaimen otsikkotiedostolle.
#sisältää
In void main () toiminnon, system_init () ; toimintoa käytetään alustamaan LCD ja USART.
Void main (tyhjä) { TRISB = 0x00; // Asetus lähtöjärjestelmänä_init ();
Lcd_init (); ja EUSART_Intialize (); kutsutaan kahdesta kirjastosta lcd.h ja eusart.h
void system_init (void) { lcd_init (); // Tämä alustaa lcd: n EUSART1_Initialize (); // Tämä alustaa Eusartin }
Vuonna kun silmukka rikomme GPGGA merkkijono saada pituus- ja leveysasteen koordinoida. Saamme yhden bitin kerrallaan ja verrataan sitä GPGGA-merkkijonossa oleviin yksittäisiin merkkeihin.
Rikkomme saamamme koodit: -
incomer_data = EUSART1_Read (); // Tarkista merkkijono '$ GPGGA,' / * ------------------------------ GPGGA-rivin etsiminen vaihe vaiheelta- --------------------------- * / if (incomer_data == '$') {// GPS-tietojen ensimmäinen lauseke alkaa $ sign incomer_data = EUSART1_Read (); // Jos ensimmäinen tulee totta, seuraava vaihe 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 (); jos (incomer_data == ',') {// ensin, vastaanotettu incomer_data = EUSART1_Read (); // Tässä vaiheessa lopputarkistus suoritettu, GPGGA löytyy.
Käyttämällä tätä koodia ohitamme UTC-ajan.
while (incomer_data! = ',') {// ohitetaan GMT-aika incomer_data = EUSART1_Read (); }
Tämä koodi on tarkoitettu leveys- ja pituusasteiden tallentamiseen merkistöihin.
incomer_data = EUSART1_Read (); leveysaste = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); leveysaste = incomer_data; // Tallenna Latitude data } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); pituusaste = incomer_data; // Tallenna pituusaste-tiedot } }
Ja lopuksi olemme tulostaneet pituus- ja leveyspiirit LCD-näytölle.
matriisin_määrä = 0; lcd_com (0x80); // LCD-rivi yksi valinta, kun (array_count <12) {// Latitude-tietojen taulukko on 11-numeroinen lcd_data (leveysaste); // Tulosta Latitude data array_count ++; } array_count = 0; lcd_com (0xC0); // Lcd-rivin kaksi valinta, kun (array_count <13) {// Pituuspiiritiedon taulukko on 12-numeroinen lcd_data (pituusaste); // Tulosta pituusaste- tietotaulukko_luku ++; }
Näin voimme liittää GPS-moduulin PIC-mikrokontrolleriin saadaksemme nykyisen sijainnin leveys- ja pituusasteet.
Täydelliset koodi- ja otsikkotiedostot ovat alla.