- Componente necesare:
- Diagrama circuitului și explicația: -
- Obținerea datelor de localizare de pe GPS:
- Pași pentru interfața GPS cu microcontroler PIC: -
- Explicatie cod:
GPS-ul este forma scurtă a sistemului de poziționare globală. Este un sistem care oferă altitudine, latitudine, longitudine, oră UTC și multe alte informații, care sunt preluate de la 2, 3, 4 sau mai mulți sateliți. Pentru a citi datele de pe GPS, avem nevoie de un microcontroler și am interfațat deja GPS cu Arduino și cu Raspberry Pi.
Am selectat modulul GPS G7020 care este realizat de U-blox. Vom primi longitudinea și latitudinea unei anumite poziții de la satelit și vom afișa aceleași pe un ecran LCD de 16x2 caractere. Deci, aici vom interfața GPS-ul cu microcontrolerul PIC16F877A prin microcip.
Componente necesare:
- Pic16F877A - pachet PDIP40
- Pâine
- Pickit-3
- Adaptor de 5V
- LCD JHD162A
- Modul GPS uBLOX-G7020
- Cabluri pentru conectarea perifericelor.
- 4.7k rezistențe
- Oala de 10k
- 20mHz Crystal
- 2 buc condensatori ceramici 33pF
Diagrama circuitului și explicația: -
Ecranul LCD de 16x2 caractere este conectat la microcontrolerul PIC16F877A, în care RB0, RB1, RB2 este conectat respectiv la pinul LCD, care este RS, R / W și E. RB4, RB5, RB6 și RB7 sunt conectate pe 4 pini LCD D4, D5, D6, D7. Ecranul LCD este conectat în modul 4 biți sau în modul nibble. Aflați mai multe despre interfața LCD cu microcontrolerul PIC.
Un oscilator de cristal de 20MHz cu doi condensatori ceramici de 33pF conectați pe pinul OSC1 și OSC2. Acesta va oferi o frecvență de ceas constantă de 20 MHz microcontrolerului.
Modul GPS uBlox-G7020, recepționează și transmite date utilizând UART. PIC16F877A constă într-un driver USART în interiorul cipului, vom primi date de la modulul GPS de către USART, deci se va face o conexiune încrucișată de la pinul Rx al microcontrolerului la pinul Tx GPS și pinul de recepție USART conectat prin pinul de transmisie GPS.
UBlox-G7020 are cod de culoare pentru ace. Pinul pozitiv sau 5V este în culoare roșie, pinul negativ sau GND este în culoare neagră, iar pinul Transmit este în culoare albastră.
Am conectat toate acestea în panou.
Obținerea datelor de localizare de pe GPS:
Să vedem cum să interfațăm GPS folosind USART și să vedem rezultatul pe un ecran LCD de 16x2 caractere.
Modulul va transmite date în mai multe șiruri la 9600 Baud Rate. Dacă folosim un terminal UART cu o rată de 9600 Baud, vom vedea datele primite de GPS.
Modulul GPS trimite datele poziției de urmărire în timp real în format NMEA (vezi captura de ecran de mai sus). Formatul NMEA constă în mai multe propoziții, în care sunt prezentate mai jos patru propoziții importante. Mai multe detalii despre propoziția NMEA și formatul său de date pot fi găsite aici.
- $ GPGGA: Date corecte ale sistemului de poziționare globală
- $ GPGSV: Sateliți GPS în vizualizare
- $ GPGSA: GPS DOP și sateliți activi
- $ GPRMC: date GPS / tranzit specifice minime recomandate
Aflați mai multe despre datele GPS și șirurile NMEA aici.
Acestea sunt datele primite de GPS când sunteți conectat la 9600 baud rate.
$ 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
Când folosim modulul GPS pentru urmărirea oricărei locații, avem nevoie doar de coordonate și putem găsi acest lucru în șirul $ GPGGA. Doar șirul $ GPGGA (Global Positioning System Fix Data) este utilizat în principal în programe, iar alte șiruri sunt ignorate.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Care este sensul acestei linii?
Înțelesul acelei linii este: -
1. Șirul începe întotdeauna cu semnul „$”
2. GPGGA înseamnă Global Fixing System Fix Data
3. „,” virgulă indică separarea între două valori
4. 141848.00: ora GMT ca 14 (h): 18 (min): 48 (sec): 00 (ms)
5. 2237.63306, N: Latitudine 22 (grad) 37 (minute) 63306 (sec) Nord
6. 08820.86316, E: Longitudine 088 (grad) 20 (minute) 86316 (sec) Est
7. 1: Cantitate corecție 0 = date nevalide, 1 = date valide, 2 = corecție DGPS
8. 03: Numărul de sateliți vizualizați în prezent.
9. 1.0: HDOP
10. 2,56, M: Altitudine (Înălțimea deasupra nivelului mării în metri)
11. 1.9, M: Înălțimea geoidelor
12. * 74: suma de control
Deci, avem nevoie de nr. 5 și nr. 6 pentru a colecta informații despre locația modulului sau, unde se află acesta.
Pași pentru interfața GPS cu microcontroler PIC: -
- Setați configurațiile microcontrolerului care includ configurația oscilatorului.
- Setați portul dorit pentru LCD, inclusiv registrul TRIS.
- Conectați modulul GPS la microcontroler folosind USART.
- Inițializați sistemul USART în modul de recepție continuă, cu 9600 baud rate și LCD cu modul pe 4 biți.
- Luați două matrice de caractere în funcție de lungimea latitudinii și longitudinii.
- Primiți câte un bit de caractere odată și verificați dacă este pornit de la $ sau nu.
- Dacă $ Receive atunci este un șir, trebuie să verificăm GPGGA, aceste 5 litere și virgula.
- Dacă este GPGGA, atunci vom sări peste timp și vom căuta latitudinea și longitudinea, vom stoca latitudinea și longitudinea în două caractere până când N (nord) și E (est) nu vor fi primite.
- Vom imprima matricea în LCD.
- Ștergeți matricea.
Explicatie cod:
Să ne uităm la codul rând cu rând. Primele câteva linii sunt pentru configurarea biților de configurare, care au fost explicați în tutorialul anterior, așa că îi omit deocamdată. Codul complet este dat la sfârșitul acestui tutorial.
Aceste cinci linii sunt utilizate pentru includerea fișierelor antet bibliotecă, lcd.h și eusart.h este pentru LCD și respectiv USART. Și xc.h este pentru fișierul antet al microcontrolerului.
#include
În funcția main () nulă , system_init () ; funcția este utilizată pentru a inițializa LCD și USART.
Void main (nul) { TRISB = 0x00; // Setarea ca ieșire system_init ();
Lcd_init (); și EUSART_Intialize (); este apelat din cele două biblioteci lcd.h și eusart.h
void system_init (void) { lcd_init (); // Aceasta va inițializa lcd EUSART1_Initialize (); // Aceasta va inițializa Eusart }
În timp ce buclă rupem șirul GPGGA pentru a obține coordonatele de longitudine și latitudine. Primim câte un bit pe rând și îl comparăm cu caractere individuale prezente în șirul GPGGA.
Încălcăm codurile pe care le vom primi: -
incomer_data = EUSART1_Read (); // Verificați șirul „$ GPGGA,” / * ------------------------------ Găsiți pas cu pas linia GPGGA- --------------------------- * / if (incomer_data == '$') {// Prima declarație a datelor GPS începe cu un $ semn incomer_data = EUSART1_Read (); // Dacă primul dacă devine adevărat, atunci următoarea fază 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 == ',') {// primul, primit incomer_data = EUSART1_Read (); // În acest stadiu Final check in done, GPGGA este găsit.
Prin utilizarea acestui cod, omitem ora UTC.
while (incomer_data! = ',') {// omiterea GMT Time incomer_data = EUSART1_Read (); }
Acest cod servește la stocarea datelor Latitudine și Longitudine în matricea de caractere.
incomer_data = EUSART1_Read (); latitude = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); latitude = incomer_data; // Stocați datele Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitudine = incomer_data; // Stocați datele longitudinii } }
Și în cele din urmă am imprimat longitudinea și latitudinea pe ecranul LCD.
array_count = 0; lcd_com (0x80); // Linie LCD o selecție în timp ce (array_count <12) {// Matrice de date Latitude este 11 cifre lcd_data (latitudine); // Imprimați datele Latitude array_count ++; } array_count = 0; lcd_com (0xC0); // Selecția lcd a două linii în timp ce (array_count <13) {// Matrice de date longitudinale este 12 cifre lcd_data (longitudine); // Imprimați datele de longitudine array_count ++; }
Astfel putem interfața modulul GPS cu microcontrolerul PIC pentru a obține latitudinea și longitudinea locației curente.
Fișierele complete de cod și antet sunt prezentate mai jos.