- Gerekli Bileşenler:
- Devre Şeması ve Açıklaması: -
- GPS'den Konum Verilerini Alma:
- PIC Mikrodenetleyici ile GPS Arayüzü İçin Adımlar: -
- Kod Açıklaması:
GPS, Küresel Konumlandırma Sisteminin kısa biçimidir. 2, 3, 4 veya daha fazla uydudan alınan Rakım, Enlem, Boylam, UTC saati ve daha birçok bilgiyi doğru olarak veren bir sistemdir. GPS'ten veri okumak için bir Mikrodenetleyiciye ihtiyacımız var ve GPS'i Arduino ve Raspberry Pi ile zaten arayüzledik.
Biz seçmiş G7020 GPS modülü U blox tarafından yapılır. Uydudan belirli bir konumun Boylam ve enlemini alacağız ve aynısını 16x2 Karakter LCD'de görüntüleyeceğiz. Yani burada GPS ile PIC16F877A mikrodenetleyici arasında mikroçip ile arayüz oluşturacağız.
Gerekli Bileşenler:
- Pic16F877A - PDIP40 paketi
- Ekmek Tahtası
- Pickit-3
- 5V adaptör
- LCD JHD162A
- uBLOX-G7020 GPS modülü
- Çevre birimlerini bağlamak için teller.
- 4.7k Dirençler
- 10k pot
- 20mHz Kristal
- 2 adet 33pF seramik kondansatör
Devre Şeması ve Açıklaması: -
16x2 karakter LCD, PIC16F877A mikrodenetleyiciye bağlanır; burada RB0, RB1, RB2 sırasıyla RS, R / W ve E olan LCD pinine bağlıdır.RB4, RB5, RB6 ve RB7, LCD'nin 4 pin D4, D5, D6, D7. LCD, 4 bit modunda veya yarım bayt modunda bağlanmıştır. LCD ile PIC Mikroişlemci arasında arayüz oluşturma hakkında daha fazla bilgi edinin.
OSC1 ve OSC2 pinlerine bağlı 33pF'lik iki seramik kapasitörlü 20MHz'lik bir kristal Osilatör. Mikrodenetleyiciye sabit 20 MHz saat frekansı sağlayacaktır.
uBlox-G7020 GPS modülü, UART kullanarak veri alır ve iletir. PIC16F877A, çipin içinde bir USART sürücüsünden oluşur, USART tarafından GPS modülünden veri alacağız, böylece mikro denetleyici Rx pininden GPS'in Tx pinine ve GPS'in Transmit pinine bağlı USART Receive pinine çapraz bağlantı yapılacaktır.
UBlox-G7020, pinler için renk koduna sahiptir. Pozitif veya 5V pin Kırmızı renktedir, Negatif veya GND pin Siyah renktedir ve İletim pimi Mavi renktedir.
Bütün bunları breadboard'a bağladım.
GPS'den Konum Verilerini Alma:
USART kullanarak GPS arayüzünün nasıl yapıldığını görelim ve sonucu 16x2 karakter LCD'de görelim.
Modül, verileri 9600 Baud Hızında birden çok dizide iletecektir. 9600 Baud hızına sahip bir UART terminali kullanırsak, GPS tarafından alınan verileri göreceğiz.
GPS modülü Gerçek zamanlı izleme konumu verilerini NMEA formatında gönderir (yukarıdaki ekran görüntüsüne bakın). NMEA formatı, aşağıda dört önemli cümlenin verildiği birkaç cümleden oluşur. NMEA cümlesi ve veri formatı hakkında daha fazla ayrıntı burada bulunabilir.
- $ GPGGA: Küresel Konumlandırma Sistemi Verileri Düzeltme
- $ GPGSV: Görünümdeki GPS uyduları
- $ GPGSA: GPS DOP ve aktif uydular
- $ GPRMC: Önerilen minimum belirli GPS / Transit verileri
GPS verileri ve NMEA dizeleri hakkında buradan daha fazla bilgi edinin.
Bu, 9600 baud hızında bağlandığında GPS tarafından alınan verilerdir.
$ 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
Herhangi bir konumu izlemek için GPS modülünü kullandığımızda , yalnızca koordinatlara ihtiyacımız var ve bunu $ GPGGA dizesinde bulabiliriz. Yalnızca $ GPGGA (Global Positioning System Fix Data) String çoğunlukla programlarda kullanılır ve diğer dizeler göz ardı edilir.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74
Bu satırın anlamı nedir?
Bu satırın anlamı: -
1. Dize her zaman "$" işaretiyle başlar
2. GPGGA, Global Positioning System Fix Data anlamına gelir
3. "," Virgül, iki değer arasındaki ayrımı gösterir
4. 141848.00: GMT saati olarak 14 (saat): 18 (dakika): 48 (sn): 00 (ms)
5. 2237.63306, N: Enlem 22 (derece) 37 (dakika) 63306 (sn) Kuzey
6. 08820.86316, E: Boylam 088 (derece) 20 (dakika) 86316 (sn) Doğu
7. 1: Miktarı Düzelt 0 = geçersiz veri, 1 = geçerli veri, 2 = DGPS düzeltmesi
8. 03: Halihazırda görüntülenen uyduların sayısı.
9. 1.0: HDOP
10. 2.56, M: Rakım (Metre cinsinden deniz seviyesinden yükseklik)
11. 1.9, M: Geoids yüksekliği
12. * 74: sağlama toplamı
Bu nedenle, modül konumu veya bulunduğu yer hakkında bilgi toplamak için No. 5 ve No. 6'ya ihtiyacımız var.
PIC Mikrodenetleyici ile GPS Arayüzü İçin Adımlar: -
- Osilatör konfigürasyonunu içeren mikrodenetleyicinin konfigürasyonlarını ayarlayın.
- TRIS kaydı dahil LCD için İstenen bağlantı noktasını ayarlayın.
- GPS modülünü USART kullanarak mikro denetleyiciye bağlayın.
- USART sistemini sürekli alım modunda, 9600 baud hızında ve LCD'de 4 bit modda başlatın.
- Enlem Uzunluğu ve Boylam'a bağlı olarak iki karakter dizisi alın.
- Her seferinde bir karakter biti alın ve $ 'dan başlatılıp başlatılmadığını kontrol edin.
- $ Receive ise bir string ise, GPGGA'yı, bu 5 harfi ve virgülü kontrol etmemiz gerekir.
- GPGGA ise, zamanı atlayıp Enlem ve Boylamı arayacağız, Enlem ve Boylamı N (Kuzey) ve E (Doğu) alınmayana kadar iki karakter dizisinde saklayacağız.
- Diziyi LCD olarak yazdıracağız.
- Diziyi temizleyin.
Kod Açıklaması:
Kod satırına satır satır bakalım. İlk birkaç satır, önceki öğreticide açıklanan yapılandırma bitlerini ayarlamak içindir, bu nedenle şimdilik bunları atlıyorum. Kodun tamamı bu eğitimin sonunda verilmiştir.
Bu beş satır kütüphane başlık dosyaları da dahil olmak üzere kullanılan lcd.h ve eusart.h sırasıyla LCD ve USART içindir. Ve xc.h , mikrodenetleyici başlık dosyası içindir.
#Dahil etmek
Gelen void ana () işlevi, system_init () ; işlevi, LCD ve USART'ı başlatmak için kullanılır.
Void main (void) { TRISB = 0x00; // Çıktı system_init () olarak ayarlama ;
Lcd_init (); ve EUSART_Intialize (); İki kütüphane çağrılır lcd.h ve eusart.h
void system_init ( void) { lcd_init (); // Bu, lcd EUSART1_Initialize () 'yi başlatacaktır; // Bu, Eusart'ı başlatacak }
In iken biz Boylam ve Enlem koordinat almak için GPGGA dizesini kırmak döngü. Her seferinde bir bit alıyoruz ve bunu GPGGA dizesinde bulunan ayrı karakterlerle karşılaştırıyoruz.
Alacağımız kodları kırıyoruz: -
incomer_data = EUSART1_Read (); // '$ GPGGA' dizesini kontrol edin, / * ------------------------------ GPGGA hattını adım adım bulun- --------------------------- * / if (incomer_data == '$') {// GPS verilerinin ilk ifadesi bir $ sign incomer_data = EUSART1_Read (); // İlk doğruysa sonraki aşama if (incomer_data == 'G') { incomer_data = EUSART1_Read (); eğer (incomer_data == 'P'); { incomer_data = EUSART1_Read (); eğer (incomer_data == 'G'); { incomer_data = EUSART1_Read (); eğer (incomer_data == 'G') { incomer_data = EUSART1_Read (); eğer (incomer_data == 'A') { incomer_data = EUSART1_Read (); eğer (incomer_data == ',') {// ilk, alındı incomer_data = EUSART1_Read (); // Bu aşamada son kontrol yapıldı, GPGGA bulunur.
Bu kodu kullanarak UTC saatini atlıyoruz.
while (incomer_data! = ',') {// GMT Saati atlanıyor incomer_data = EUSART1_Read (); }
Bu kod, Enlem ve Boylam verilerini karakter dizisinde depolamak içindir.
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; // Latitude verilerini saklayın } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitude = incomer_data; // Boylam verilerini saklayın } }
Ve son olarak LCD'ye boylam ve enlem yazdırdık.
array_count = 0; lcd_com (0x80); // LCD satırı bir seçim while (array_count <12) {// Latitude veri dizisi 11 digit lcd_data (latitude); // Latitude verilerini yazdır array_count ++; } array_count = 0; lcd_com (0xC0); // Lcd ikinci satır seçimi while (array_count <13) {// Boylam veri dizisi 12 haneli lcd_data (boylam); // Boylam verisini yazdır array_count ++; }
Mevcut konumun Enlem ve boylamını almak için GPS modülünü PIC Mikroişlemci ile bu şekilde arayüzleyebiliriz.
Tam kod ve başlık dosyaları aşağıda verilmiştir.