gy-neo6mv2 gps modül proton basic örneği

Başlatan dnaci, 29 Ağustos 2019, 09:59:29

dnaci

Merhabalar, neo6mv2 gps modül ile bir çalışma yaptım. Arduino örneği çok ama basic örneği yoktu, artık var :-) Koda göre zaman bilgisi ve 2 koordinat bilgisi 4x20 lcd ekran üzerinde görülür, dilerseniz kodu 2x16 lcd ekrana göre düzenleyebilirsiniz. 

' AÇIKLAMA: NEO6MV2 GPS MODÜLÜ İLE KULLANILABİLECEK PROTON BASİC (3.2.5.5) DEMO 'KODUDUR.
' TEST PLATFORMU: Pickat pic geliştirme kartı www.pickat.org
' GPS MODÜL: neo6mv2 (GY-NEO6MV2)(GPS6MV2)(modül seri iletişim kullanır, ilk 'çalıştırmada 10 dakika açık alanda sadece voltaj (max 5 volt) veriniz. Daha 'sonra cam kenarı bir yerde sinyal alabilirsiniz)
Device = 18F2550  'Kullanılan işlemci
'Device = 16f876a  'Kullanılan işlemci olarak seçilebilir, sda-scl pinleri 14-'15'te...
XTAL 20          'Kullanılan kristal değeri (mhz)
OPTIMISER_LEVEL=2 'Kod optimize açık
ALL_DIGITAL = true
'CMCON = 7
Declare FLOAT_ROUNDING = On
'Declare FLOAT_DISPLAY_TYPE = 1 'OR FAST
'4x20 LCD TANIMLAMALARI
Declare LCD_DTPIN PORTB.4  
Declare LCD_RSPIN PORTB.2
Declare LCD_ENPIN PORTB.3
Declare LCD_INTERFACE 4
Declare LCD_LINES 4
Declare LCD_TYPE 0
Declare LCD_COMMANDUS = 2000
Declare LCD_DATAUS =50 ' YADA 255

' Gps modül sürekli bilgi gönderiyor, bu bilgiyi almak yeterli, modül rx ucunu 'bağlamanıza gerek yok.
Declare HSERIAL_BAUD  = 9600      ' SERİ İLETİŞİM HIZI 9600 BAUD, GPS MODÜL '9600 BAUD
Declare HSERIAL_RCSTA = %10010000  ' SERİ PORT AÇILIYOR VE SÜREKLİ VERİ ALIŞINA 'AYARLANIYOR
Declare HSERIAL_TXSTA = %00100100  ' SERİ PORT VERİCİ MODÜLÜ AÇILIYOR - pickat 'pin:TX1 (portc.7)
Declare HSERIAL_SPBRG  = 129  '20mhz kristal için verilen değer, Pickat 'üzerinde 20 mhz kristal bulunuyor.
'Declare HSERIAL_SPBRG = 64  '10mhz kristal için verilen değer...
'Declare HSERIAL_SPBRG = 12  '8mhz kristal için verilen değer...

Dim verial As DWord ' GELEN GENEL DATA
Dim GPSSAAT[7] As Byte ' GENEL DATADAN AYRIŞRITILAN ZAMAN BİLGİSİ DEĞİŞKENİ
Dim MESAJ[9]  As Byte ' GENEL DATADAN AYRIŞRITILAN KUZEY DOĞU KOORDİNAT 'BİLGİLERİ DEĞİŞKENİ
Dim SAY As Byte ' SAYAÇ DEĞİŞKENİ 
Dim SAAT As Byte ' SAAT DEĞİŞKENİ 
TRISA = %00000001
TRISB = %00000011
TRISC = %10000000
PORTA=0
PORTB=0
PORTC=0
verial = 0
Cls

gps_al1:  'GPS saat verisi

HSerIn [verial,skip 5,Str GPSSAAT\12]  'GELEN BİLGİ 5. KARAKTER DEĞERİ VE SONRASI ZAMAN SAAT VERİR 

'GELEN DEĞERLERDEN 48 ÇIKARILARAK LCD KARAKTER GÖSTERİMİNE HAZIRLANIYOR:
For SAY=0 To 6
  GPSSAAT[SAY]=GPSSAAT[SAY]-48
Next

'GREENWICH 3 SAAT ZAMAN FARKI DÜZELTME KODU:
GPSSAAT[0] = GPSSAAT[0] * 10
GPSSAAT[1] = GPSSAAT[1] * 1
SAAT = GPSSAAT[0] + GPSSAAT[1]
SAAT = SAAT + 3

If SAAT =24 Then SAAT = 0
If SAAT =25 Then SAAT = 1 
If SAAT =26 Then SAAT = 2

'BİLGİ LCDYE YAZILIYOR:
Print At 1,1,"SAAT :", " ", #SAAT,":",#GPSSAAT[2],#GPSSAAT[3],":",#GPSSAAT[4],#GPSSAAT[5]  ',#GPSSAAT[6],#GPSSAAT[7],#GPSSAAT[8],#GPSSAAT[9],#GPSSAAT[10]
DelayMS 1700  'bu değerin 1500-1900 ms arasında olması lazım

gps_al2: 'GPS 1. koordinat bilgisi

HSerIn [verial,skip 17,Str MESAJ\9]  'GELEN BİLGİ 17. KARAKTER DEĞERİ VE 'SONRASI ZAMAN SAAT VERİR 

'GELEN DEĞERLERDEN 48 ÇIKARILARAK LCD KARAKTER GÖSTERİMİNE HAZIRLANIYOR:
For SAY=0 To 8
  MESAJ[SAY]=MESAJ[SAY]-48
Next

'BİLGİ LCDYE YAZILIYOR:
Print At 2,1,"KUZEY:"," ", #MESAJ[0],#MESAJ[1],".",#MESAJ[2],#MESAJ[3],".",#MESAJ[5],#MESAJ[6]  
DelayMS 1700  'bu değerin 1500-1900 ms arasında olması lazım

gps_al3: 'GPS 1. koordinat bilgisi

HSerIn [verial,skip 31,Str MESAJ\9]  'GELEN BİLGİ 31. KARAKTER DEĞERİ VE 'SONRASI ZAMAN SAAT VERİR 

'GELEN DEĞERLERDEN 48 ÇIKARILARAK LCD KARAKTER GÖSTERİMİNE HAZIRLANIYOR:
For SAY=0 To 7
  MESAJ[SAY]=MESAJ[SAY]-48
Next

'BİLGİ LCDYE YAZILIYOR:
Print At 3,1,"DOGU :"," ", #MESAJ[0],#MESAJ[1],".",#MESAJ[2],#MESAJ[3],".",#MESAJ[5],#MESAJ[6]  
DelayMS 1700  'bu değerin 1500-1900 ms arasında olması lazım
Cls

GoTo gps_al1
End


Gps modülden alınan ham veri, usb-serial modül ile gps sensörü bağlantısı kurulduğunda terminal programda görülen değerlerdir:

$GPRMC,112702.00,A,3946.64705,N,03033.56412,E,0.032,,280819,,,A*73
$GPVTG,,T,,M,0.032,N,0.059,K,A*2E
$GPGGA,112702.00,3946.64705,N,03033.56412,E,1,08,1.17,793.7,M,37.9,M,,*5C
$GPGSA,A,3,27,10,08,32,14,18,20,21,,,,,2.36,1.17,2.05*05
$GPGSV,4,1,14,01,13,293,18,04,48,181,21,08,57,292,15,10,52,045,36*7D
$GPGSV,4,2,14,11,20,305,19,14,38,157,10,16,06,204,,18,35,302,18*7A
$GPGSV,4,3,14,20,26,057,35,21,14,103,27,22,13,245,,24,01,051,*7A
$GPGSV,4,4,14,27,64,193,40,32,53,129,39*73
$GPGLL,3946.64705,N,03033.56412,E,112702.00,A,A*61

Daha önce forumda paylaşılan gps örneği ekran görüntüsünü de ekliyorum.



Pickat uygulaması:


Dtmf

If komutu ile uyduya fix lendi verisini alip sonrada ekranda uyduya baglandi fiyip verileri almaya baslarsan daha iyi olur diye dusunuyorum tabi birde kordinat icin uydu sayisi😊 bende daha once bir ornek yapmistim gayet guzel calisiyor.yanlis hayirlamiyorsam uydu baglantisinda A Verisi geliyordu baglanti yokken V verisi

dnaci

#2
@Dtmf haklısınız bu şekilde bir ön kontrol yapılabilir. Benim çalışmamda çok kritik bir durum yok ve zaten açık alanda 8 uyduya bağlanabiliyorum. Hatta kapalı mekanda cam yakınında bile sorunsuz çalışıyor. Gelen ham veriyi bu yüzden ekledim, geliştirmek isteyenler üzerinde uğraşabilir. A ve V konusunu doğru hatırlıyorsunuz a var ise veri var v ise veri yok.

Not: Ham veride bağlanılan 8 uydu sayısı ve deniz seviyesinden yükseklik 793 metre belirtilmiş, geliştirmek isteyenler ham verileri analiz etmeli:

$GPGGA,112702.00,3946.64705,N,03033.56412,E,1,08,1.17,793.7,M,37.9,M,,*5C

Powered by EzPortal