- Komponenter som krävs:
- Kretsschema och förklaring: -
- Hämta platsdata från GPS:
- Steg för att gränssnitt GPS med PIC Microcontroller: -
- Kodförklaring:
GPS är kortformen för Global Positioning System. Det är ett system som ger exakt höjd, latitud, longitud, UTC-tid och mycket mer information, som hämtas från 2, 3, 4 eller mer satellit. För att läsa data från GPS behöver vi lite mikrokontroller och vi har redan gränssnitt GPS med Arduino och med Raspberry Pi.
Vi har valt G7020 GPS-modul som är tillverkad av U-blox. Vi kommer att få longitud och latitud för en viss position från satellit och kommer att visa detsamma på en 16x2 tecken-LCD. Så här kommer vi att gränssnitt GPS med PIC16F877A mikrokontroller med mikrochip.
Komponenter som krävs:
- Pic16F877A - PDIP40-paket
- Brödbräda
- Pickit-3
- 5V-adapter
- LCD JHD162A
- uBLOX-G7020 GPS-modul
- Ledningar för att ansluta kringutrustning.
- 4,7 k motstånd
- 10k kruka
- 20 mHz kristall
- 2 st 33pF keramiska kondensatorer
Kretsschema och förklaring: -
16x2 tecken LCD är ansluten över PIC16F877A mikrokontroller, där RB0, RB1, RB2 är ansluten till LCD-stiftet som är RS, R / W och E. RB4, RB5, RB6 och RB7 är anslutna över LCD: s 4-stift D4, D5, D6, D7. LCD-skärmen är ansluten i 4bit-läge eller nibble-läge. Läs mer om gränssnitt mellan LCD och PIC Microcontroller.
En kristalloscillator på 20 MHz med två keramiska kondensatorer på 33 pF anslutna över OSC1 och OSC2-stift. Det kommer att ge konstant 20 MHz klockfrekvens till mikrokontrollern.
uBlox-G7020 GPS-modul, ta emot och överföra data med UART. PIC16F877A består av en USART-drivrutin inuti chipet, vi kommer att ta emot data från GPS-modulen av USART, så en tvärförbindelse kommer att göras från mikrocontrollern Rx-stift till GPS: s Tx-stift och USART-mottagningsstift ansluten över GPS: s sändstift.
UBlox-G7020 har färgkod för stiften. Den positiva eller 5V-stiften är i röd färg, den negativa eller GND-stiften är i svart och sändstiftet är i blå färg.
Jag har anslutit allt detta i panelen.
Hämta platsdata från GPS:
Låt oss se hur man gränssnitt GPS med USART och se resultatet i en 16x2 tecken LCD.
Modulen överför data i flera strängar till 9600 Baud Rate. Om vi använder en UART-terminal med 9600 Baud-hastighet, ser vi de data som mottas av GPS.
GPS-modulen skickar realtidsspårningspositionsdata i NMEA-format (se skärmdumpen ovan). NMEA-formatet består av flera meningar, där fyra viktiga meningar ges nedan. Mer information om NMEA-meningen och dess dataformat finns här.
- $ GPGGA: Fixeringsdata för globalt positioneringssystem
- $ GPGSV: GPS-satelliter i sikte
- $ GPGSA: GPS DOP och aktiva satelliter
- $ GPRMC: Rekommenderad minimispecifik GPS / transitdata
Läs mer om GPS-data och NMEA-strängar här.
Detta är den data som mottas av GPS när den är ansluten till 9600 baudhastighet.
$ 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
När vi använder GPS-modulen för att spåra vilken plats som helst behöver vi bara koordinater och vi kan hitta detta i $ GPGGA-sträng. Endast $ GPGGA (Global Positioning System Fix Data) -sträng används mest i program och andra strängar ignoreras.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Vad är meningen med den linjen?
Betydelsen av den linjen är: -
1. Sträng börjar alltid med ett "$" -tecken
2. GPGGA står för Global Positioning System Fix Data
3. “,” Komma indikerar separationen mellan två värden
4. 141848.00: GMT tid som 14 (hr): 18 (min): 48 (sek): 00 (ms)
5. 2237.63306, N: Latitud 22 (grad) 37 (minuter) 63306 (sek) Nord
6. 08820.86316, E: Longitud 088 (grad) 20 (minuter) 86316 (sek) Öst
7. 1: Fix kvantitet 0 = ogiltiga data, 1 = giltiga data, 2 = DGPS fix
8. 03: Antal satelliter som för närvarande ses.
9. 1.0: HDOP
10. 2.56, M: Höjd (höjd över havet i meter)
11. 1.9, M: Geoids höjd
12. * 74: kontrollsumma
Så vi behöver nr 5 och nr 6 för att samla information om modulens plats eller var den ligger.
Steg för att gränssnitt GPS med PIC Microcontroller: -
- Ställ in mikrokontrollerns konfigurationer som inkluderar Oscillatorkonfiguration.
- Ställ in önskad port för LCD inklusive TRIS-register.
- Anslut GPS-modulen till mikrokontrollern med USART.
- Initiera systemet USART i kontinuerligt mottagningsläge, med 9600 baudhastighet och LCD med 4bit-läge.
- Ta två teckenarrayer beroende på längd på latitud och longitud.
- Ta emot en teckenbit åt gången och kontrollera om den startas från $ eller inte.
- Om $ Receive är det en sträng, vi måste kontrollera GPGGA, dessa 5 bokstäver och komma.
- Om det är GPGGA, hoppar vi över tiden och letar efter latitud och longitud, vi kommer att lagra latitud och longitud i två tecken tills N (norr) och E (öst) inte mottas.
- Vi kommer att skriva ut matrisen i LCD.
- Rensa matrisen.
Kodförklaring:
Låt oss titta på koden rad för rad. De första raderna är för att ställa in konfigurationsbitar som förklarades i föregående handledning så jag hoppar över dem för tillfället. Den fullständiga koden ges i slutet av denna handledning.
Dessa fem rader används för att inkludera bibliotekets rubrikfiler , lcd.h och eusart.h är för LCD respektive USART. Och xc.h är för mikrokontrollerhuvudfil.
#omfatta
I ogiltig huvudfunktion () är system_init () ; funktionen används för att initialisera LCD och USART.
Ogiltigt huvud (ogiltigt) { TRISB = 0x00; // Inställning som utgång system_init ();
Den lcd_init (); och EUSART_Intialize (); kallas från de två biblioteken lcd.h och eusart.h
ogiltigt system_init (ogiltigt) { lcd_init (); // Detta initialiserar lcd EUSART1_Initialize (); // Detta initierar Eusart }
I medan loop vi bryta GPGGA sträng för att få longitud och latitud samordna. Vi tar emot en bit åt gången och jämför den med enskilda tecken som finns i GPGGA-sträng.
Vi bryter koder som vi får: -
incomer_data = EUSART1_Read (); // Kontrollera strängen '$ GPGGA' / * ------------------------------ Steg för steg för att hitta GPGGA-linjen- --------------------------- * / if (incomer_data == '$') {// Första uttalandet av GPS-data börjar med en $ sign incomer_data = EUSART1_Read (); // Om den första om blir sant så är nästa fas om (incomer_data == 'G') { incomer_data = EUSART1_Read (); om (incomer_data == 'P'); { incomer_data = EUSART1_Read (); om (incomer_data == 'G'); { incomer_data = EUSART1_Read (); om (incomer_data == 'G') { incomer_data = EUSART1_Read (); om (incomer_data == 'A') { incomer_data = EUSART1_Read (); om (incomer_data == ',') {// först, mottagen incomer_data = EUSART1_Read (); // I detta skede Slutlig incheckning gjort, GPGGA hittas.
Genom att använda den här koden hoppar vi över UTC-tiden.
medan (incomer_data! = ',') {// hoppar över GMT-tid incomer_data = EUSART1_Read (); }
Den här koden är för lagring av latitud- och longituddata i teckenuppsättningen.
incomer_data = EUSART1_Read (); latitud = incomer_data; medan (incomer_data! = ',') { för (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); latitud = incomer_data; // Lagra Latitude-data } incomer_data = EUSART1_Read (); om (incomer_data == ',') { för (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitud = incomer_data; // Lagra longituddata } }
Och slutligen har vi skrivit ut longitud och latitud på LCD.
array_count = 0; lcd_com (0x80); // LCD-linje ett val medan (array_count <12) {// Array of Latitude data is 11 digit lcd_data (latitude); // Skriv ut Latitude data array_count ++; } array_count = 0; lcd_com (0xC0); // LCD-rad två val medan (array_count <13) {// Array of Longitude data is 12 digit lcd_data (longitude); // Skriv ut Longitude data array_count ++; }
Så här kan vi koppla ihop GPS-modulen med PIC Microcontroller för att få Latitude och longitud för aktuell plats.
Komplett kod och rubrikfiler ges nedan.