- Erforderliche Komponenten:
- Schaltplan und Erklärung: -
- Abrufen von Standortdaten vom GPS:
- Schritte zur Schnittstelle von GPS mit PIC-Mikrocontroller: -
- Code Erläuterung:
GPS ist die Kurzform des Global Positioning System. Es ist ein System, das genaue Höhen-, Breiten-, Längen-, UTC-Zeit und viele weitere Informationen liefert, die von 2, 3, 4 oder mehr Satelliten stammen. Um Daten von GPS zu lesen, benötigen wir einen Mikrocontroller und haben GPS bereits mit Arduino und Raspberry Pi verbunden.
Wir haben das GPS-Modul G7020 ausgewählt, das von U-blox hergestellt wird. Wir erhalten Längen- und Breitengrade einer bestimmten Position vom Satelliten und zeigen diese auf einem 16x2-Zeichen-LCD an. Hier werden wir GPS per Mikrochip mit dem Mikrocontroller PIC16F877A verbinden.
Erforderliche Komponenten:
- Pic16F877A - PDIP40-Paket
- Brotbrett
- Pickit-3
- 5V Adapter
- LCD JHD162A
- uBLOX-G7020 GPS-Modul
- Kabel zum Anschließen von Peripheriegeräten.
- 4,7k Widerstände
- 10k Topf
- 20 MHz Kristall
- 2 Stk. 33pF Keramikkondensatoren
Schaltplan und Erklärung: -
LCD mit 16 x 2 Zeichen ist über den Mikrocontroller PIC16F877A angeschlossen, wobei RB0, RB1, RB2 jeweils mit dem LCD-Pin RS, R / W und E verbunden sind. RB4, RB5, RB6 und RB7 sind über den 4-Pin D4, D5 des LCD verbunden D6, D7. Das LCD ist im 4-Bit-Modus oder im Nibble-Modus angeschlossen. Erfahren Sie mehr über die Verbindung von LCD mit PIC Microcontroller.
Ein Quarzoszillator von 20 MHz mit zwei Keramikkondensatoren von 33 pF, die über den OSC1- und OSC2-Pin angeschlossen sind. Der Mikrocontroller erhält eine konstante Taktfrequenz von 20 MHz.
uBlox-G7020 GPS-Modul, Empfangen und Senden von Daten mit UART. PIC16F877A besteht aus einem USART-Treiber innerhalb des Chips. Wir empfangen Daten vom GPS-Modul per USART, sodass eine Querverbindung vom Rx-Pin des Mikrocontrollers zum Tx-Pin des GPS und zum USART-Empfangspin hergestellt wird, die über den Sende-Pin des GPS verbunden sind.
Die uBlox-G7020 verfügt über einen Farbcode für die Stifte. Der Positiv- oder 5-V-Pin ist rot, der Negativ- oder GND-Pin ist schwarz und der Sendestift ist blau.
Ich habe das alles im Steckbrett verbunden.
Abrufen von Standortdaten vom GPS:
Lassen Sie uns sehen, wie Sie GPS mit USART verbinden und das Ergebnis in einem 16x2-Zeichen-LCD sehen.
Das Modul überträgt Daten in mehreren Zeichenfolgen mit einer Baudrate von 9600. Wenn wir ein UART-Terminal mit einer Baudrate von 9600 verwenden, werden die vom GPS empfangenen Daten angezeigt.
Das GPS-Modul sendet die Echtzeit-Tracking-Positionsdaten im NMEA-Format (siehe Abbildung oben). Das NMEA-Format besteht aus mehreren Sätzen, in denen im Folgenden vier wichtige Sätze aufgeführt sind. Weitere Details zum NMEA-Satz und seinem Datenformat finden Sie hier.
- $ GPGGA: Fixierungsdaten für das globale Positionierungssystem
- $ GPGSV: GPS-Satelliten im Blick
- $ GPGSA: GPS DOP und aktive Satelliten
- $ GPRMC: Empfohlene minimale spezifische GPS / Transit-Daten
Erfahren Sie hier mehr über GPS-Daten und NMEA-Strings.
Dies sind die Daten, die vom GPS empfangen werden, wenn eine Verbindung mit einer Baudrate von 9600 hergestellt wird.
$ 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
Wenn wir ein GPS-Modul zum Verfolgen eines beliebigen Standorts verwenden, benötigen wir nur Koordinaten, die wir in einer $ GPGGA-Zeichenfolge finden. In Programmen wird meistens nur die Zeichenfolge $ GPGGA (Global Positioning System Fix Data) verwendet, und andere Zeichenfolgen werden ignoriert.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Was bedeutet diese Zeile?
Die Bedeutung dieser Zeile ist: -
1. String beginnt immer mit einem "$" - Zeichen
2. GPGGA steht für Global Positioning System Fix Data
3. "," Komma gibt die Trennung zwischen zwei Werten an
4. 141848.00: GMT-Zeit als 14 (h): 18 (min): 48 (s): 00 (ms)
5. 2237.63306, N: Breitengrad 22 (Grad) 37 (Minuten) 63306 (Sek.) Nord
6. 08820.86316, E: Längengrad 088 (Grad) 20 (Minuten) 86316 (Sek.) Ost
7. 1: Fix Menge 0 = ungültige Daten, 1 = gültige Daten, 2 = DGPS Fix
8. 03: Anzahl der aktuell angezeigten Satelliten.
9. 1.0: HDOP
10. 2.56, M: Höhe (Höhe über dem Meeresspiegel in Metern)
11. 1.9, M: Geoidenhöhe
12. * 74: Prüfsumme
Wir brauchen also Nr. 5 und Nr. 6, um Informationen über den Modulstandort oder den Standort zu erhalten.
Schritte zur Schnittstelle von GPS mit PIC-Mikrocontroller: -
- Stellen Sie die Konfigurationen des Mikrocontrollers ein, die die Oszillatorkonfiguration enthalten.
- Stellen Sie den gewünschten Anschluss für LCD einschließlich TRIS-Register ein.
- Schließen Sie das GPS-Modul mit USART an den Mikrocontroller an.
- Initialisieren Sie das System USART im kontinuierlichen Empfangsmodus mit einer Baudrate von 9600 und einem LCD mit 4-Bit-Modus.
- Nehmen Sie je nach Längen- und Breitengrad zwei Zeichenfelder.
- Empfangen Sie jeweils ein Zeichenbit und prüfen Sie, ob es von $ aus gestartet wurde oder nicht.
- Wenn $ Receive dann eine Zeichenfolge ist, müssen wir GPGGA, diese 5 Buchstaben und das Komma überprüfen.
- Wenn es sich um GPGGA handelt, überspringen wir die Zeit und suchen nach Breite und Länge. Wir speichern Breite und Länge in einem Array mit zwei Zeichen, bis N (Nord) und E (Ost) nicht empfangen werden.
- Wir werden das Array in LCD drucken.
- Löschen Sie das Array.
Code Erläuterung:
Schauen wir uns den Code Zeile für Zeile an. Die ersten Zeilen dienen zum Einrichten von Konfigurationsbits, die im vorherigen Lernprogramm erläutert wurden. Ich überspringe sie daher vorerst. Der vollständige Code ist am Ende dieses Tutorials angegeben.
Diese fünf Zeilen werden zum Einschließen von Bibliotheksheaderdateien verwendet. Lcd.h und eusart.h stehen für LCD bzw. USART. Und xc.h ist für die Mikrocontroller-Header-Datei.
#einschließen
In der Funktion void main () ist system_init () ; Mit dieser Funktion werden LCD und USART initialisiert.
Void main (void) { TRISB = 0x00; // Einstellung als Ausgabe system_init ();
Das lcd_init (); und EUSART_Intialize (); wird aus den beiden Bibliotheken lcd.h und eusart.h aufgerufen
void system_init (void) { lcd_init (); // Dadurch wird der LCD initialisiert. EUSART1_Initialize (); // Dies initialisiert den Eusart }
In der while- Schleife brechen wir den GPGGA-String, um die Längen- und Breitengradkoordinaten zu erhalten. Wir empfangen jeweils ein Bit und vergleichen es mit einzelnen Zeichen, die in der GPGGA-Zeichenfolge vorhanden sind.
Wir brechen die Codes, die wir bekommen werden: -
incomer_data = EUSART1_Read (); // Überprüfen Sie die Zeichenfolge '$ GPGGA' / * ------------------------------ Schritt für Schritt finden Sie die GPGGA-Zeile- --------------------------- * / if (incomer_data == '$') {// Die erste Anweisung der GPS-Daten beginnt mit a $ sign incomer_data = EUSART1_Read (); // Wenn das erste wenn wahr wird, dann die nächste Phase 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 == ',') {// zuerst empfangen incomer_data = EUSART1_Read (); // Zu diesem Zeitpunkt ist der GPGGA gefunden.
Mit diesem Code überspringen wir die UTC-Zeit.
while (incomer_data! = ',') {// GMT-Zeit überspringen incomer_data = EUSART1_Read (); }}
Dieser Code dient zum Speichern der Breiten- und Längengraddaten im Zeichenarray.
incomer_data = EUSART1_Read (); Breitengrad = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); Breitengrad = incomer_data; // Latitude-Daten speichern } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitude = incomer_data; // Speichern Sie die Längengraddaten } }
Und schließlich haben wir Längen- und Breitengrade auf dem LCD gedruckt.
array_count = 0; lcd_com (0x80); // Auswahl der LCD-Zeile 1 während (array_count <12) {// Array der Breitengraddaten ist 11-stellig lcd_data (Breitengrad); // Latitude-Daten drucken array_count ++; } array_count = 0; lcd_com (0xC0); // Lcd Zeile zwei Auswahl während (array_count <13) {// Array von Längengraddaten ist 12-stellig lcd_data (Längengrad); // Längsdaten drucken array_count ++; }}
Auf diese Weise können wir das GPS-Modul mit dem PIC-Mikrocontroller verbinden, um den Breiten- und Längengrad des aktuellen Standorts zu ermitteln.
Vollständige Code- und Header-Dateien sind unten angegeben.