- Components necessaris:
- Diagrama del circuit i explicació: -
- Obtenir dades d'ubicació des del GPS:
- Passos per connectar el GPS amb el microcontrolador PIC: -
- Explicació del codi:
El GPS és la forma curta del sistema de posicionament global. És un sistema que proporciona altitud, latitud, longitud, hora UTC i molta més informació, que es pren de 2, 3, 4 o més satèl·lits. Per llegir les dades del GPS, necessitem algun microcontrolador i ja hem interfaçat el GPS amb Arduino i amb Raspberry Pi.
Hem seleccionat el mòdul GPS G7020 fabricat per U-blox. Rebrem la longitud i la latitud d’una posició determinada des del satèl·lit i mostrarem la mateixa en una pantalla LCD de 16 x 2 caràcters. Aquí, doncs, farem una interfície GPS amb microcontrolador PIC16F877A per microxip.
Components necessaris:
- Pic16F877A - paquet PDIP40
- Taula de pa
- Pickit-3
- Adaptador de 5 V.
- LCD JHD162A
- Mòdul GPS uBLOX-G7020
- Filferros per connectar perifèrics.
- 4.7k resistències
- Olla de 10k
- Cristall de 20 MHz
- 2 condensadors ceràmics de 33 pF
Diagrama del circuit i explicació: -

El LCD de 16x2 caràcters està connectat a través del microcontrolador PIC16F877A, en el qual RB0, RB1, RB2 es connecta respectivament al pin LCD que és RS, R / W, i E. RB4, RB5, RB6 i RB7 es connecten a través dels 4 pins D4, D5 de LCD, D6, D7. La pantalla LCD està connectada en mode de 4 bits o en mode de picat. Obteniu més informació sobre la interfície de la pantalla LCD amb el microcontrolador PIC.
Un oscil·lador de cristall de 20 MHz amb dos condensadors ceràmics de 33pF connectats a través dels pins OSC1 i OSC2. Proporcionarà una freqüència de rellotge de 20 MHz constant al microcontrolador.
Mòdul GPS uBlox-G7020, rep i transmet dades mitjançant UART. PIC16F877A consisteix en un controlador USART dins del xip, rebem dades del mòdul GPS per USART, de manera que es realitzarà una connexió creuada des del pin Rx del microcontrolador fins al pin Tx del GPS i el pin de recepció USART connectat a través del pin de transmissió del GPS.
El uBlox-G7020 té un codi de color per als pins. El pin positiu o de 5 V és de color vermell, el pin negatiu o GND de color negre i el pin de transmissió de color blau.
He connectat tot això a la taula de treball.
Obtenir dades d'ubicació des del GPS:
Vegem com interfície GPS mitjançant USART i veure el resultat en un LCD de 16x2 caràcters.
El mòdul transmetrà dades en diverses cadenes a una velocitat de 9600 baudios. Si fem servir un terminal UART amb una velocitat de 9600 Baud, veurem les dades rebudes pel GPS.
El mòdul GPS envia les dades de posició de seguiment en temps real en format NMEA (vegeu la captura de pantalla anterior). El format NMEA consta de diverses frases, a continuació es detallen quatre frases importants. Podeu trobar més detalls sobre la frase NMEA i el seu format de dades aquí.
- $ GPGGA: dades de correcció del sistema de posicionament global
- $ GPGSV: satèl·lits GPS a la vista
- $ GPGSA: GPS DOP i satèl·lits actius
- $ GPRMC: dades GPS / trànsit específiques mínimes recomanades
Obteniu més informació sobre les dades GPS i les cadenes NMEA aquí.
Aquestes són les dades que rep el GPS quan es connecta a una velocitat de 9600 bauds.
$ GPRMC, 141848,00, A, 2237,63306, N, 08820,86316, E, 0,555,, 100418,,, A * 73 $ GPVTG,, T,, M, 0,555, 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
Quan fem servir el mòdul GPS per rastrejar qualsevol ubicació, només necessitem coordenades i ho podem trobar a la cadena $ GPGGA. Només s’utilitza la cadena $ GPGGA (Global Positioning System Fix Data) en programes i s’ignoren altres cadenes.
$ GPGGA, 141848,00,2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Quin significat té aquesta línia?
El significat d’aquesta línia és: -
1. La cadena sempre comença amb un signe "$"
2. GPGGA significa Global Fixing System Fix Data
3. "," El coma indica la separació entre dos valors
4. 141848.00: hora GMT a les 14 (h): 18 (min): 48 (seg): 00 (ms)
5. 2237.63306, N: latitud 22 (grau) 37 (minuts) 63306 (seg) nord
6. 08820.86316, E: Longitud 088 (grau) 20 (minuts) 86316 (seg) Est
7. 1: Quantitat de correcció 0 = dades no vàlides, 1 = dades vàlides, 2 = correcció DGPS
8. 03: Nombre de satèl·lits visualitzats actualment.
9. 1.0: HDOP
10. 2,56, M: altitud (alçada sobre el nivell del mar en metres)
11. 1.9, M: Alçada dels geoides
12. * 74: suma de comprovació
Per tant, necessitem els números 5 i 6 per recollir informació sobre la ubicació del mòdul o on es troba.
Passos per connectar el GPS amb el microcontrolador PIC: -
- Definiu les configuracions del microcontrolador que incloguin la configuració de l’oscil·lador.
- Configureu el port desitjat per a LCD, inclòs el registre TRIS.
- Connecteu el mòdul GPS al microcontrolador mitjançant USART.
- Inicialitzeu el sistema USART en mode de recepció contínua, amb una velocitat de 9600 baud i LCD amb mode de 4 bits.
- Agafeu dues matrius de caràcters en funció de la longitud de latitud i longitud.
- Rebeu un bit de caràcter alhora i comproveu si s’inicia a partir de $ o no.
- Si $ Receive és una cadena, hem de comprovar GPGGA, aquestes 5 lletres i la coma.
- Si es tracta de GPGGA, saltarem l'hora i buscarem la latitud i la longitud, emmagatzemarem la latitud i la longitud en una matriu de dos caràcters fins que no es rebi N (nord) i E (est).
- Imprimirem la matriu en pantalla LCD.
- Esborreu la matriu.

Explicació del codi:
Vegem el codi línia per línia. Les primeres línies serveixen per configurar bits de configuració que s’explicaven al tutorial anterior, de manera que ara els saltaré. El codi complet es proporciona al final d’aquest tutorial.
Aquestes cinc línies s’utilitzen per incloure fitxers de capçalera de biblioteca, lcd.h i eusart.h són per a LCD i USART respectivament. I xc.h és per al fitxer de capçalera del microcontrolador.
#incloure
En la funció void main () , system_init () ; La funció s'utilitza per inicialitzar LCD i USART.
Buit principal (buit) { TRISB = 0x00; // Configuració com a sortida system_init ();
El lcd_init (); i EUSART_Intialize (); es diu de les dues biblioteques lcd.h i eusart.h
void system_init (void) { lcd_init (); // Això inicialitzarà el lcd EUSART1_Initialize (); // Això inicialitzarà l'Eusart }
En temps de bucle trenquem la cadena GPGGA per obtenir la longitud i latitud de coordenades. Rebem un bit a la vegada i el comparem amb caràcters individuals presents a la cadena GPGGA.
Trencem els codis que obtindrem: -
incomer_data = EUSART1_Read (); // Marqueu la cadena '$ GPGGA,' / * ------------------------------ Trobant pas a pas la línia GPGGA- --------------------------- * / if (incomer_data == '$') {// La primera declaració de les dades del GPS comença per un $ sign incomer_data = EUSART1_Read (); // Si el primer if esdevé cert, la següent fase 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 == ',') {// primer, rebut incomer_data = EUSART1_Read (); // En aquesta etapa, es fa la comprovació final, es troba GPGGA.
En utilitzar aquest codi, ometem l’hora UTC.
while (incomer_data! = ',') {// saltant GMT Time incomer_data = EUSART1_Read (); }
Aquest codi serveix per emmagatzemar les dades de latitud i longitud a la matriu de caràcters.
incomer_data = EUSART1_Read (); latitud = incom_dades; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); latitud = incom_dades; // Emmagatzemeu les dades de Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitud = dades_incomer; // Emmagatzema les dades de longitud } }
I finalment hem imprès la longitud i la latitud en pantalla LCD.
array_count = 0; lcd_com (0x80); // Selecció d'una línia LCD mentre que (array_count <12) {// Les dades de la matriu de Latitude són lcd_data (latitud) d' 11 dígits ; // Imprimiu les dades de Latitude array_count ++; } array_count = 0; lcd_com (0xC0); // Selecció de la línia Lcd dues mentre que (array_count <13) {// Les dades de la matriu de longitud són lcd_data de 12 dígits (longitud); // Imprimiu les dades de longitud array_count ++; }
És així com podem interaccionar el mòdul GPS amb el microcontrolador PIC per obtenir la latitud i la longitud de la ubicació actual.
A continuació es mostren els fitxers de codi i de capçalera complets.
