- Szükséges alkatrészek:
- Áramkör diagram és magyarázat: -
- Helyadatok beszerzése GPS-ről:
- A GPS és a PIC mikrovezérlő összekapcsolásának lépései: -
- Kód Magyarázat:
A GPS a globális helymeghatározó rendszer rövid formája. Ez egy olyan rendszer, amely pontos magasságot, szélességet, hosszúságot, UTC időt és még sok más információt szolgáltat, amelyeket 2, 3, 4 vagy több műholdról vesznek fel. Az adatok GPS-beolvasásához szükségünk van egy mikrokontrollerre, és már csatlakoztattuk a GPS-t az Arduino-hoz és a Raspberry Pi-hez.
Kiválasztottuk az U-blox által gyártott G7020 GPS modult. Megkapjuk az adott helyzet hosszúságát és szélességét műholdról, és ugyanezt megjelenítjük egy 16x2 karakteres LCD-n. Tehát itt összekapcsoljuk a GPS-t a PIC16F877A mikrovezérlővel mikrochipen keresztül.
Szükséges alkatrészek:
- Pic16F877A - PDIP40 csomag
- Kenyérlap
- Pickit-3
- 5 V-os adapter
- LCD JHD162A
- uBLOX-G7020 GPS modul
- Vezetékek a perifériák csatlakoztatásához.
- 4.7k ellenállások
- 10 ezer fazék
- 20mHz kristály
- 2 db 33pF kerámia kondenzátor
Áramkör diagram és magyarázat: -
16x2 karakteres LCD van csatlakoztatva a PIC16F877A mikrovezérlőhöz, amelyben az RB0, RB1, RB2 az RS, R / W és E. LCD tűhöz van csatlakoztatva. RB4, RB5, RB6 és RB7 az LCD 4 tűs D4, D5, D6, D7. Az LCD 4 bites vagy rágcsálási módban van csatlakoztatva. További információ az LCD és a PIC mikrovezérlő összekapcsolásáról.
20 MHz-es kristályoszcillátor két 33pF kerámia kondenzátorral, amelyek az OSC1 és az OSC2 tűkön vannak összekötve. Állandó 20 MHz-es órajel-frekvenciát fog biztosítani a mikrovezérlő számára.
uBlox-G7020 GPS modul, adatok fogadása és továbbítása az UART segítségével. A PIC16F877A egy USART illesztőprogramot tartalmaz a chip belsejében, az adatokat a GPS modultól az USART kapja meg, így keresztkapcsolat jön létre a mikrokontroller Rx tűjétől a GPS Tx tűjéig és a GPS Transmit tűjéhez csatlakozó USART fogadó tűhöz.
Az uBlox-G7020 színkóddal rendelkezik a csapokhoz. A Pozitív vagy az 5 V-es tű piros színű, a Negatív vagy a GND-tű fekete színű, az adó-tű pedig kék színű.
Összekötöttem mindezt a kenyérlapon.
Helyadatok beszerzése GPS-ről:
Lássuk, hogyan lehet összekapcsolni a GPS-t az USART segítségével, és nézzük meg az eredményt egy 16x2 karakteres LCD-n.
A modul több sztringben továbbítja az adatokat 9600 átviteli sebességgel. Ha 9600 átviteli sebességű UART terminált használunk, látni fogjuk a GPS által kapott adatokat.
A GPS modul a valós idejű helymeghatározási adatokat NMEA formátumban küldi (lásd a fenti képernyőképet). Az NMEA formátum több mondatból áll, amelyekben az alábbiakban négy fontos mondatot adunk meg. Az NMEA mondatról és annak adatformátumáról további részletek találhatók itt.
- $ GPGGA: Globális helymeghatározó rendszer javítási adatai
- $ GPGSV: GPS műholdak láthatók
- $ GPGSA: GPS DOP és aktív műholdak
- $ GPRMC: Ajánlott minimális specifikus GPS / Tranzit adat
Tudjon meg többet a GPS-adatokról és az NMEA-karakterláncokról itt.
Ez az az adat, amelyet a GPS fogad, ha 9600 baud sebességgel csatlakozik.
$ 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
Ha GPS modult használunk bármely hely nyomon követésére, akkor csak koordinátákra van szükségünk, és ezt a $ GPGGA karakterláncban találhatjuk meg. Csak a $ GPGGA (globális helymeghatározó rendszer javító adatai) karakterláncokat használják többnyire a programokban, és az egyéb karakterláncokat figyelmen kívül hagyják.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Mit jelent ez a vonal?
A vonal jelentése: -
1. A karakterlánc mindig „$” jellel kezdődik
2. A GPGGA a Globális Helymeghatározó Rendszer Fix Adatait jelenti
3. A „,” vessző két érték elválasztását jelzi
4. 141848.00: GMT idő, mint 14 (óra): 18 (perc): 48 (másodperc): 00 (ms)
5. 2237,63306, N: 22 szélességi fok (fok) 37 (perc) 63306 (mp) északi
6. 08820.86316, E: 088 hosszúság (fok) 20 (perc) 86316 (mp) kelet
7. 1: Fix mennyiség 0 = érvénytelen adat, 1 = érvényes adat, 2 = DGPS javítás
8. 03: A jelenleg megtekintett műholdak száma.
9. 1.0: HDOP
10. 2.56, M: Tengerszint feletti magasság (tengerszint feletti magasság méterben)
11. 1.9, M: Geoidok magassága
12. * 74: ellenőrző összeg
Szükségünk van tehát az 5. és a 6. helyre, hogy információkat gyűjtsünk a modul helyéről vagy annak helyéről.
A GPS és a PIC mikrovezérlő összekapcsolásának lépései: -
- Állítsa be a mikrokontroller konfigurációit, amelyek tartalmazzák az oszcillátor konfigurációját.
- Állítsa be a kívánt portot az LCD-hez, beleértve a TRIS regisztert.
- Csatlakoztassa a GPS modult a mikrovezérlőhöz az USART segítségével.
- Inicializálja a USART rendszert folyamatos vételi módban, 9600 baud sebességgel és LCD-vel 4bit módban.
- Vegyen két karaktertömböt a szélességi és hosszúsági hosszúságtól függően.
- Egyszerre kapjon egy karakterbitet, és ellenőrizze, hogy az $ -tól kezdődik-e vagy sem.
- Ha a $ Receive akkor string, akkor ellenőriznünk kell a GPGGA-t, ezt az 5 betűt és a vesszőt.
- Ha GPGGA, akkor kihagyjuk az időt, és megkeressük a szélességi és hosszúsági fokot. A szélességet és hosszúságot két karakteres tömbben tároljuk, amíg N (észak) és E (kelet) nem érkezik meg.
- A tömböt LCD-ben nyomtatjuk.
- Törölje a tömböt.
Kód Magyarázat:
Nézzük soronként a kódot. Az első néhány sor a konfigurációs bitek beállítására szolgál, amelyeket az előző bemutató ismertetett, ezért egyelőre kihagyom őket. A teljes kód az oktatóanyag végén található.
Ezt az öt sort használják a könyvtár fejlécfájljainak beillesztésére , az lcd.h és az eusart.h az LCD-re, az USART pedig. Az xc.h pedig a mikrovezérlő fejlécfájlja.
#include
A void main () függvényben a system_init () ; funkció az LCD és az USART inicializálására szolgál.
Void main (void) { TRISB = 0x00; // Beállítás kimeneti rendszernek_init ();
Az lcd_init (); és az EUSART_Intialize (); a két könyvtárból hívják: lcd.h és eusart.h
void system_init (void) { lcd_init (); // Ez inicializálja az lcd EUSART1_Initialize (); // Ez inicializálja az Eusart }
A while ciklusban megszakítjuk a GPGGA karakterláncot, hogy megkapjuk a hosszúsági és szélességi koordinátákat. Egyszerre egy bitet kapunk, és összehasonlítjuk a GPGGA karakterláncban szereplő egyes karakterekkel.
Megtörjük a kapott kódokat: -
incomer_data = EUSART1_Read (); // Ellenőrizze a '$ GPGGA,' karakterláncot / * ------------------------------ Lépésről lépésre megtalálja a GPGGA sort- --------------------------- * / if (incomer_data == '$') {// A GPS-adatok első állítása egy $ sign incomer_data = EUSART1_Read (); // Ha az első igaz lesz, akkor a következő szakasz if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_adatok == 'P'); { incomer_adatok = EUSART1_Read (); if (incomer_adatok == 'G'); { incomer_adatok = EUSART1_Read (); if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// először, megkapta incomer_data = EUSART1_Read (); // Ebben a szakaszban a végső bejelentkezés kész, a GPGGA megtalálható.
A kód használatával kihagyjuk az UTC időt.
while (incomer_adatok! = ',') {// a GMT idő kihagyása incomer_data = EUSART1_Read (); }
Ez a kód a szélességi és hosszúsági adatok tárolására szolgál a karaktertömbben.
incomer_data = EUSART1_Read (); szélesség = incomer_adatok; while (incomer_adatok! = ',') { for (tömb_szám = 1; incomer_adatok! = 'N'; tömb_szám ++) { incomer_adatok = EUSART1_Read (); szélesség = incomer_adatok; // A szélességi adatok tárolása } incomer_data = EUSART1_Read (); if (incomer_adatok == ',') { for (tömb_szám = 0; incomer_adatok! = 'E'; tömb_szám ++) { incomer_adatok = EUSART1_Read (); hosszúság = incomer_adatok; // Tárolja a hosszúsági adatokat } }
És végül kinyomtattuk az LCD-re a hosszúsági és szélességi fokokat.
tömb_szám = 0; lcd_com (0x80); // LCD sor egy kiválasztása, míg (tömb_szám <12) {// A szélességi adatok tömbje 11 jegyű lcd_data (szélesség); // Nyomtassa ki a Latitude data array_count ++; } tömb_szám = 0; lcd_com (0xC0); // Lcd két sor kijelölése while (tömb_szám <13) {// A hosszúsági adatok tömbje 12 jegyű lcd_data (hosszúság); // Nyomtassa ki a Longitude data array_count ++; }
Így tudjuk összekapcsolni a GPS modult a PIC mikrovezérlővel, hogy megkapjuk az aktuális helyzet szélességi és hosszúsági fokát.
A teljes kód- és fejlécfájlok az alábbiakban találhatók.