Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

GPS Kod Örneği

Başlatan OG, 15 Ocak 2007, 02:17:08

armys2000

Sayın Kasif
Bir konuya açıklık getirmek istiyorum, Uydu görmekle Ölçüm yapmak farklı şeylerdir. Gps alıcınız uydu görüyordur lakin  ölçüm için gerekli uydu sayısana erişemiyordur.  Sağlıklı bir ölçü için minumum uydu sayısı 3 olmalıdır 3d dediğimiz ölçüm minumum 3 uydu ile gerçekleştirirlir. bir diğer modda 2d dediğimiz ölçümdür ki bununla hassasiyet oranı çok düşüktür. gördüğü uydulardan ( 3 uydudan düşük miktarda) konum hesaplaması yapmaktır. Bir başka konu ise uyduların pozisyonları siz otobüste iken camın kenarında havaya doğru tuttuğunuzda  tek bir istikametteki uyduları görecektir dolayısıyla sağlıklı bir üçgen oluşmayacaktır ve hata oranı yuksek olacaktır eğer cihazın ayarını da 3D için ayarlamışsanız size herhangi bir ölçüm sonucu vermeyecektir. Bir başka konuda gps alıcınızın kaç kanal uyduyu desteklediği ve anten açısının ne olduğu( bu bilgiler manual de mevcut olması gerek ) , kullandığı anten pasif antense bu da ölçümünüzü etkiler en güzeli aktif anten kullanmaktır embedded gps alıcıları genelde tek frekans ta çalışan hassasiyet oranı düşük pasif antenli sistemlerdir. bunlar kabaca konum belirlemede kullanılır. 2 tane uydu yakaladığında konum bilgisi verecek şekilde bir yapıya sahiptir.  bir başka konu ise ölçüm süresi ölçüm süreniz ne kadar uzun olursa konum bilginiz o kadar sağlıklı olur. GPS ilk başta konum bilgisini vermeye başladığın da çook uçuk noktalarla karşılaşabilirsiniz ilerleyen zamanda gps gerçek konum bilgisini vermeye başlayacaktır. işlem adımı Time,1D,2D,3D şeklinde gerçekleşir.

Yaptığımız ölçüler hernekadar 3D olsada hata düzeltmeleri yapılmamış ölçümlerdir. Bunu gidermek için DGPS (Diffrential Global Position System)  daha doğrusu ölçüm anında ki hata düzeltmeleri ile ilgili bir olay
bazı gps alıcıları DGPS destegi vermektedir ( L1 ve L2 frekans destekli) birinden konum bilgisini alırken diğer frekanstan da düzeltme verilerini alır  işlem yapıldıktan sonra konum bilgisi verir.  yada kaliteli bir istasyon ( DGPS istasyonu)  bu düzeltme verilerini alır ve kullanıcılara  yayin yapar ( bölge bölgedir geniş bir alanı kapsamaz ) siz ölçülerinizi yaparsınız diğer taraftan da düzeltme verilerini alırsınız bir takım  işlemden geçirdikten sonra  10 mm  hassasiyetinde konum bilgileriniz olur . Bunlar daha çok haritacılık alanında kullanılır.
GPS alıcınız ilk defa kullanılacaksa açık alanda ve uzun süre ölçümü gerektirir.  (almanac verisi için )  daha detaylı bilgi için www.uBlox.com adresine bakmanızı tavsiye ederim.

kasif

Aslında söylemeye utanılacak bir durum ama hata bende imiş.

enlem boylam verileri 3 değişik şekilde işlenir.

XX.XXXXX YYY.YYYYY    ondalıklı konum olarak
XX.MM,MM YYY.MM,MM     konum ve dakika cinsinden
XX.MM.SS YYY.MM.SS      konum, dakika ve saniye cinsinden

GPS verileri konum ve dakika cinsinden alınırken, google earth verileri, konum, dakika, saniye cinsinden yazıyordu. Ben aktarmada hata yapıyormuşum.

iki GPS i aynı yerde çalıştırınca aynı sonuçları verdi, hatta cep bilgisayarının seri kablosunu GPS modülüne takarak bile denemeler yaptım. GPS si olan bir cihaza seri porttan GPS takmak ayrı mevzuu.

Şimdi hata yaklaşık 3 metre kadar, o da olacak diye biliyorum.

Şimdi şöyle birşey arıyorum, GPS koordinatlarını kaydedip bunları google earth a yükleyerek doğrulama yapacağım bir program.

Teşekkürler.

controller

telit gm862 gps+gprs ile iki katlı evin birinci katında odanın içinde ortalama 7 uyduya bağlanarak gps verisi alabiliyorum. hatta bir ara 9 uyduya bile bağlanmıştı.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

elektrolikit

Herkese selamlar,
Bugüne kadar bir çok projeyi tutkuyla takip edip sonuçlandırdım ancak olay denizelektroniğin sattığı gps modülüne gelince tıkandım kaldım.Modülün üzerinde hem RS232(pc) hem ttl(pic) çıkış var yani ister pc'ye ister pic'e takılabiliyor olmasına rağmen bir türlü iletişime geçemedim aletle.Daha önce yapan arkadaşlar acaba GPS verisini nasıl aldıkları konusunda yardımcı olabilirler mi? (ben 16f877+GLCD kullanıyorum, sistemim sabit ve hatasız çalışıyo ancak rs-232 bilgisi alamıyorum, max232 denedim o hiç çalışmadı :( )

ozancnc

bu mesaji siliniz...

kasif

Ben 10YTL fazla verip seri port soketi olan kiti almıştım, aslında bütün bağlantılar dümdüz bağlı, yani 10 YTL lik parçanın bir esprisi yok.

Verileri almak için, HP cep bilgisayarın seri data kablosunu kullandım, birkaç değişik yazılım vardı PPC de. Bizdeki cihaz hata yapıyor ama navigasyon yazılımları, aracın yoldan çıkmayacağını düşünerek gerekli düzeltmeyi yapıyor.

Gittiğim rotayı çizen bir program bulmuştum, yoldaki L şeklinde keskin bir dönüşü yaylı bir dönüş olarak gösterdi her seferinde.

Çalışmalara bir süre ara vermiştim, yeterince dinlendiğimi düşününce, elimdeki GPS modülü, yolları kaydeden bir karakutuya çevirip aracın biryerlerine atacağım, ama iş uzun, sd kart ve fat16 yı çözmek lazım.

elektrolikit

Modül üzerinde direk TTL çıkış bulunduğu için Pic'e direk bağlanabilirmiş gibi gelmişti ama sanırım TTL voltaj seviyeleri ile ilgili bi uyuşmazlık var!Herneyse, ben max232 ile problemi çözdüm gibi ancak bu seferde GLCD'im yandı :(
 Yılmadım tabi ki.Tam olarak amacım GPS verisi ile birlikte iki tane de pusula barındıran bi cihaz yapmak.Bir tanesi kuzeyi gönderecek diğeri ise girilen bir referans koordinatını.Mesela marketteyiz diyelim, bir butona basıyoruz, alet korinatları kaydediyor, sonra evimizde cihazı çalıştırdığımızda bir pusula marketi diğeri kuzeyi gösteriyor.
  CCS'de yazdığım kodları ilgilenen arkadaşlarla paylaşmaktan mutlu olurum...(Bir bitse!)

Kolay gelsin....

kasif

Moralini bozmak istemem ama GPS ünitelerinde pusula bulunmamakta, sadece ne tarafa doğru gittiğini görebilirsin, ama durduğu yerde çalıştırıp kuzey güneyi öğrenemezsin. Bazı GPS cihazlarında ayrıca digital pusula olur, onun yardımı ile yol bulunabilir.

elektrolikit

Selamlar,

 Modülü iyice inceledim ve gerekli denemeleri yaptım, modülün gönderdiği cümleler arasında açı olarak yön de bulunmakta yani kuzey olunca 0 derece gösteriyor saat yönünde döndükçe dereceyi arttırıyor bu şekilde pusula bilgisine ulaşılabiliyor daha da bi dolu bilgi sunuyor zaten, o anki hız, yükseklik, kaç uydu veri gönderiyor, sinyal kuvveti, uyduların dereceleri vs, vs, vs yalnız haberlşme konusunda cidden zorlanıyorum, hardware olarak çözdüm olayı ancak bu seferde yazdığım program tutarsız çalışıyor, veriyi sadece bir kez alıyor bir daha da güncellemiyor.Daha önce deniz elektroniğin sattığı bu modülü mikro işlemciye bağlayan arkadaşlar var mı acaba?RTOS ve timer olmak üzere herşeyi deniyorum hala güncellemiyor...

ozancnc

bu mesaji siliniz...

elektrolikit

Öncelikle hergün başka bir prblemle başınızı ağrıttığım için özür dilerim, ilgileriniz ve tavsiyeleriniz için de teşekkür ederim
  ancak bir sorum daha olacak, yaptığım cihaz artık direk gps ünitesi ile haberleşebiliyor ve GPS verisini alabiliyor(ilgilenen arkadaşlara not:CCS'de gps için kod yazıyorsanız eğer #use rs232 satırına "errors" komutunu eklemeyi unutmayın bu şekilde uartın kilitlenmesi engellenmiş oluyor) ancak bu sefer de bir düzgün NMEA cümlesi alıyorum bir kirli yani standart NMEA cümlesine karışmış anlamsız harflerle kirlenmiş bir cümle alıyorum, herşeyi kontrol ettim voltaj uyumu, regulesi, veya max232 ile ilgili bir hata yok zaten olsaydı sanırım kirli bir cümle dahi alamazdım.uydular bulunurken verilen virgüllü cümleden de bahsetmiyorum.Mesela olması gereken şey şu olsun:
  $GPGGA ,102032,,,,N,,,M,,,36
gibi...Gelen şey şööle oluyor:
  $GPGGA ,bbbbb,,*j,,N,bbb,,M,NL,,56
Bazen de bir süre düzgün geliyor, sonra bozluyor.Mesela dün uydulara kiltlenip bir kaç deneme yaptım düzgün geldiği zaman herşey harika çalışıyor ama bir kez bozuldumu bir türlü çözemiyorum kirli cümle problemini...

bir önerisi olan var mı acaba?

ftsahin

Deniz Elektroniğin GPS modülünden  aldım ve PC ile haberleştirdim ama PIC ile haberleştiremedim. Daha önce burada verilen Picbasic kodunu kullandım. Şema olarak linkteki şemayı kullandım ama sonuç alamadım.

http://www.antrak.org.tr/gazete/052007/ta2vg.html

PIC ile bahettiğim GPS modülünü çalıştıran arkadaşlar buraya devre ve kod koyabilir mi? Cihaz hassas yanlış bişeyler yapıp yakmak istemiyorum.

armys2000

i     VAR   BYTE
j     VAR   BYTE
VirSay   VAR BYTE



SIF CON "0"
VI   CON ","
AA   CON "A" ' GEÇERLİ ÖLÇÜ
NN   CON  "N"  GPS TEN VERİ SAĞLIKLI ALINDI
EE   CON  "E"   GPS TEN VERİ ALINMA HATASI


'*******************************************************************************
'*******************************************************************************
'*****                 uBLOX GPS VERİLERİNİN ALINMASI               ************
'*****   Konum Bilgisi, Hız Bilgisi Sapma Bilgisi Ve Zaman Bilgisi  ************
'*******************************************************************************
'******************************************************************** 05.05.2007
GpsVeriOku : For addr=0 TO 64 
				RegGeneral[addr] = SIF
			 Next addr
			 
			 For addr=0 TO 9 
				gpsKuzey[addr] = SIF
			 Next addr
			 
			 For addr=0 TO 10 
				gpsDogu[addr] = SIF
			 Next addr
			 
			 For addr=0 TO 6 
				gpsHiz[addr] = SIF
			 Next addr
			 
			 For addr=0 TO 5 
				gpsSapma[addr] = SIF
			 Next addr
			 
			 gpsGun[0]     = SIF
			 gpsGun[1]     = SIF
			 gpsAy[0]      = SIF
			 gpsAy[1]      = SIF
			 gpsYil[0]     = SIF
			 gpsYil[1]     = SIF
			 gpsSaat[0]    = SIF
			 gpsSaat[1]    = SIF
			 gpsDakika[0]  = SIF
			 gpsDakika[1]  = SIF
			 gpsSaniye[0]  = SIF
			 gpsSaniye[1]  = SIF
			 
			 ErrGPS     = EE 
			 
			 SerIn2 GPS_RXD,GPS_BAUD,3000,GpsErr1,[wait("$GPRMC,")]
		 
			 i = 0
			 
    Loop1 :	 SerIn2 GPS_RXD,GPS_BAUD,[gpsData]		 
			 
			 IF (gpsData = "*") OR (i >=200) Then
			  	
			    GoTo gpsDataOk 
			  
			 Else
			 
			 	RegGeneral[i]=gpsData
			 	i = i + 1
			    GoTo Loop1
			    
			 EndIF
			 	 
			 
	gpsDataOk : IF RegGeneral[1] = "V" Then
					gpsStatu = VV
					GoTo gpsAntYok
				EndIF
					
				IF (RegGeneral[10] = "V") Then 
					gpsStatu = TT
					GoTo gpsOlcYok
				EndIF
				
				IF RegGeneral[10] = "A" Then
					gpsStatu = AA
					GoTo gpsOlcVar
				EndIF
				
				IF (RegGeneral[1] = SIF) OR (RegGeneral[6] = SIF)  Then
					gpsStatu = DOK
					GoTo GpsErr1
				EndIF
				
	gpsAntYok :	GoTo GpsErr1

	gpsOlcYok :	gpsSaat[0]   = RegGeneral[0] 
				gpsSaat[1]   = RegGeneral[1]
							
				gpsDakika[0]   = RegGeneral[2] 
				gpsDakika[1]   = RegGeneral[3]
				
	       		gpsSaniye[0]   = RegGeneral[4] 
				gpsSaniye[1]   = RegGeneral[5] 
				
				gpsGun[0]   = RegGeneral[18] 
				gpsGun[1]   = RegGeneral[19] 
				
				gpsAy[0]  = RegGeneral[20]
				gpsAy[1]   = RegGeneral[21] 
					
				gpsYil[0]   = RegGeneral[22] 
				gpsYil[1]   = RegGeneral[23] 
				
				GoTo GpsErr1

gpsOlcVar     : gpsSaat[0]   = RegGeneral[0] 
				gpsSaat[1]   = RegGeneral[1]
							
				gpsDakika[0]   = RegGeneral[2] 
				gpsDakika[1]   = RegGeneral[3]
				
	       		gpsSaniye[0]   = RegGeneral[4] 
				gpsSaniye[1]   = RegGeneral[5] 
				
				VirSay = 0
				i = 0
				j = 0	
		
	Kuzey1 : 	IF 	(RegGeneral[i] = VI) OR ( i >= 200) Then
			            
			        VirSay = VirSay + 1    
			              
			         	IF  VirSay = 2 Then
							
	Kuzey2 :					IF 	(RegGeneral[(i+1)] = VI) OR ( i >= 200) Then
									GoTo gpsKuzeyOk
								Else
									gpsKuzey[j] = RegGeneral[(i+1)]
						        	i =  i + 1
						        	j = j + 1
						        	GoTo Kuzey2
						    	EndIF
						
						EndIF
					
				EndIF

				i =  i + 1			
					
	GoTo Kuzey1	
					
			
	gpsKuzeyOk : VirSay = 0
				 i = 0
				 j = 0	
					
	Dogu1      :  IF 	(RegGeneral[i] = VI) OR ( i >= 200) Then
			            
			        VirSay = VirSay + 1    
			              
			         	IF  VirSay = 4 Then
							
	Dogu2      :    		IF 	(RegGeneral[(i+1)] = VI) OR ( i >= 200) Then
								GoTo gpsDoguOk
							Else
								gpsDogu[j] = RegGeneral[(i+1)]
						        i =  i + 1
						        j = j + 1
						        GoTo Dogu2
						    EndIF
						
						EndIF
					
				EndIF

				i =  i + 1			
					
	GoTo Dogu1	  				

	gpsDoguOk : VirSay = 0
				i = 0
				j = 0
				
						
	Hiz1       :  IF 	(RegGeneral[i] = VI) OR ( i >= 200) Then
			            
			        VirSay = VirSay + 1    
			              
			         	IF  VirSay = 6 Then
							
	Hiz2      :    		IF 	(RegGeneral[(i+1)] = VI) OR ( i >= 200) Then
								GoTo gpsHizOk
							Else
								gpsHiz[j] = RegGeneral[(i+1)]
						        i =  i + 1
						        j = j + 1
						        GoTo Hiz2
						    EndIF
						
						EndIF
					
				EndIF

				i =  i + 1			
					
	GoTo Hiz1	  				
	
	gpsHizOk   : VirSay = 0
				 i = 0
				 j = 0
				 
							 
	Sapma1	   :  IF 	(RegGeneral[i] = VI) OR ( i >= 200) Then
			            
			        VirSay = VirSay + 1    
			              
			         	IF  VirSay = 7 Then
							
	Sapma2      :    		IF 	(RegGeneral[(i+1)] = VI) OR ( i >= 200) Then
								GoTo gpsSapmaOk
							Else
								gpsSapma[j] = RegGeneral[(i+1)]
						        i =  i + 1
						        j = j + 1
						        GoTo Sapma2
						    EndIF
						
						EndIF
					
				EndIF

				i =  i + 1			
					
	GoTo Sapma1	  				

	gpsSapmaOk : VirSay = 0
				 i = 0
				 j = 0
	
	Tarih1     : IF 	(RegGeneral[i] = VI) OR ( i >= 200) Then
			            
			        VirSay = VirSay + 1    
			              
			         	IF  VirSay = 8 Then
							
	Tarih2      :    		IF 	(RegGeneral[(i+1)] = VI) OR ( i >= 200) Then
								GoTo gpsTarihOk
							Else
								gpsTarih[j] = RegGeneral[(i+1)]
						        i =  i + 1
						        j = j + 1
						        GoTo Tarih2
						    EndIF
						
						EndIF
					
				EndIF

				i =  i + 1			
					
	GoTo Tarih1	 
	
gpsTarihOk    : gpsGun[0]   = gpsTarih[0] 
				gpsGun[1]   = gpsTarih[1] 
				
				gpsAy[0]  = gpsTarih[2]
				gpsAy[1]   = gpsTarih[3] 
					
				gpsYil[0]   = gpsTarih[4] 
				gpsYil[1]   = gpsTarih[5] 
                    
                 
					
gpsVeriOk:	  
			
GpsVeriAlOk :  ErrGPS = NN
			
			Write 29,ErrGPS 
			Write 30,gpsStatu 
			Write 31,gpsSaat[0]  :Write 32,gpsSaat[1]
			Write 33,gpsDakika[0]:Write 34,gpsDakika[1]
			Write 35,gpsSaniye[0]:Write 36,gpsSaniye[1]
			Write 37,gpsGun[0]   :Write 38,gpsGun[1]
			Write 39,gpsAy[0]    :Write 40,gpsAy[1]
			Write 41,gpsYil[0]   :Write 42,gpsYil[1]
			
			
			  
			Write 43,gpsKuzey[0]:Write 44,gpsKuzey[1]:Write 45,gpsKuzey[2]:Write 46,gpsKuzey[3]:Write 47,gpsKuzey[4]
			Write 48,gpsKuzey[5]:Write 49,gpsKuzey[6]:Write 50,gpsKuzey[7]:Write 51,gpsKuzey[8]:Write 52,gpsKuzey[9]
			Write 53,gpsDogu[0] :Write 54,gpsDogu[1] :Write 55,gpsDogu[2] :Write 56,gpsDogu[3] :Write 57,gpsDogu[4]
			Write 58,gpsDogu[5] :Write 59,gpsDogu[6] :Write 60,gpsDogu[7] :Write 61,gpsDogu[8] :Write 62,gpsDogu[9] :Write 63,gpsDogu[10]
			Write 64,gpsHiz[0]  :Write 65,gpsHiz[1]  :Write 66,gpsHiz[2]  :Write 67,gpsHiz[3]  :Write 68,gpsHiz[4]  :Write 69,gpsHiz[5]  :Write 70,gpsHiz[6]
			Write 71,gpsSapma[0]:Write 72,gpsSapma[1]:Write 73,gpsSapma[2]:Write 74,gpsSapma[3]:Write 75,gpsSapma[4]:Write 76,gpsSapma[5]
			
            For addr = 77 TO 102
                Write addr,SIF
            Next addr
            
            SerOut2 PIO_TXD,MAX_BAUD,["GPS TIME : ",STR gpsSaat\2,":",STR gpsDakika\2,":",STR gpsSaniye\2,"  ", STR gpsGun\2 ,".",STR gpsAy\2,".","20",STR gpsYil\2,13,10]
			SerOut2 PIO_TXD,MAX_BAUD,["KUZEY ",STR gpsKuzey\10,13,10]
			'SerOut2 PIO_TXD,MAX_BAUD,["DOGU ",STR gpsDogu\11,13,10]
			'SerOut2 PIO_TXD,MAX_BAUD,["HIZ ",STR gpsHiz\7,13,10]
			'SerOut2 PIO_TXD,MAX_BAUD,["SAPMA ",STR gpsSapma\6,13,10,13,10]
                        
   			Return			
			
GpsErr1     :   ErrGPS = EE
				Write 29,ErrGPS 
			    Write 30,gpsStatu 
				Write 31,gpsSaat[0]:Write 32,gpsSaat[1]
		    	Write 33,gpsDakika[0]:Write 34,gpsDakika[1]
			    Write 35,gpsSaniye[0]:Write 36,gpsSaniye[1]
			    Write 37,gpsGun[0]:Write 38,gpsGun[1]
			    Write 39,gpsAy[0]:Write 40,gpsAy[1]
			    Write 41,gpsYil[0]:Write 42,gpsYil[1]
			
				
				For addr = 43 TO 102
                    Write addr,SIF
                Next addr
                
                SerOut2 PIO_TXD,MAX_BAUD,["GPS TIME : ",STR gpsSaat\2,":",STR gpsDakika\2,":",STR gpsSaniye\2,"  ", STR gpsGun\2 ,".",STR gpsAy\2,".","20",STR gpsYil\2,13,10] ' SerOut2 PIO_TXD,MAX_BAUD,["GPS DEC TIME : ",DEC2 gpsSaat,":",DEC2 gpsDakika,":",DEC2 gpsSaniye,"  ", DEC2 gpsGun ,".",DEC2 gpsAy,".","20",DEC2 gpsYil,13,10]
                SerOut2 PIO_TXD,MAX_BAUD,["KUZEY ",STR gpsKuzey\10,13,10]
				'SerOut2 PIO_TXD,MAX_BAUD,["DOGU ",STR gpsDogu\11,13,10]
				'SerOut2 PIO_TXD,MAX_BAUD,["HIZ ",STR gpsHiz\7,13,10]
				'SerOut2 PIO_TXD,MAX_BAUD,["SAPMA ",STR gpsSapma\6,13,10,13,10]
                
                         
                Return			 'GoTo GpsVeriOku
  
'*******************************************************************************
'******************************************************************** 05.05.2007



Arkadaşlar bir konuda bişey söylemek istiyorum. GPS ten gelen verileri sabit bir boyuta sahip olduğunu düşünmeyin. Çünkü nmea  çıktısı ölçüm durumuna göre değişik boyutta olabiliyor.  Yani ölçümün ilk safhasında  
(GPS ine göre değişir ) kimisi sabit uzunluk ta veriyi gönderiyor kimisi boş gönderiyor yani virgül virgül şeklinde.

Örnek :

'$GPGGA,,,,,,,,,,,,,,*56

Burda Gps herhangi bir ölçüm yapmamaktadır. ( genelde ilk elektriğin verildiği andır. herhangi bir uydu görüp saat bilgisi alana kadar bu böyle devam eder.

'$GPGGA,155704.00,,,,,0,01,,,M,,M,,*4B

bu gga verisi gps ölçüme geçmemiş sadece zaman bilgisini aldığı andaki mesajıdır. ( Yani bir kaç ( 3 ten az ) uydu görmeye başlamış bu uydulardan zaman bilgisini almış ve nmea olarak veriş anıdır.)

'$GPGGA,104509.00,3955.63167,N,03253.03437,E,1,05,02.3,00950.76,M,034.972,M,,*5C

Burda ise GPS ölçüm için geçerli uyduya ulaşmış ve ölçüm verilerini porta yazmaya başlamıştır.
Gördüğüm kadarıyla nette ki kodların çoğunda  gps ölçü yapmış  Ön ekten ( $GPGGA,) sonraki alanları bir diziye atar şeklinde . Yani porttan gelen veri sabit bir boyutta tutulmuş.  $GPGGA yı bekle 3 karakter es geç sonra geleni kuzey dizisine yukle sonra 1 karakter geç sonra geleni doğu dizisine yukle şeklinde.  Bu herzaman geçerli değil ancak GPS sinizin sağlıklı ölçü yaptığı durumlarda geçerlidir. ölçü yapamadığı durumlarda yukarıda verdiğim adımlarda olduğu gibi olmaktadır. Boyut değişmektedir. Bu nedenle uygun veri uygun değişkeninize yerleşememektedir. NMEA verisini her anında uygun biçimde almak için gelen veriyi pars  etmekten başkla çareniz yok  Örnek GGA çıktısında sondaki ( her ölçüm anında da ) "*" karakteri ve bundan sonraki gelen hex deger checksum dır. yani gelen verinin boyutunu göstermektedir.
Yukarıda verdiğim PBP kodunda da olduğu gibi veriyi "*" a kadar okuyup bunu değerlendirmeye tabi tutmak gerekir. Böylelikle GPS sinizin ölçü yapıp yapmadığını vs sini herşeyini sağlıklı bir biçimde bilebilirsiniz.

Ölçüm öncesi ve sonrası , ölçüme geçtikten sonra kapalı alandaki durumu, daha sonra tekrar ölçüme geçme anındaki veri şeklleri GPSine göre farklılıklar teşkil etsede genelde standart bir format uygulanıyor. Kesin olan birşey varki, o da virgül ile veri alanlarını ayırma işlemi bu hepsinde de standarttır. ( NMEA0183 protokolünden dolayı )


Birde denizelektroniğin sattığı gps modülünün datasheeti elinde olan varsa yayınlarsa sevinirim. Merak ettim bu modülü.

Genelde modül (oem) tipteki gps alıcıları 3.6 volt ile çalışır. kit haldekiler de değişebilir. 3.6 voltluk bir gps alıcısının tx ve rx uçları  max 3.6 volt ile iletişim kurarlar. Teoride 5v ile beslediğiniz bir Pic' e direkt olarak bağlayamazınız. Lakin pratik te durum biraz farklı  pic'in çalışma voltajını ( 4 Mhz.) 4.2 volt veya 4.0 volt seviyesine çekerseniz  ve pic'in tx ucunu bir gerilim bölücü direnç ile GPS e uygularsanız. ( Bazı gps ler 5v port girdisini destekleyebiliyor )  tx te bir sorun olmaz. GPS in TX ucunu doğrudan pic'e (Rx) girebilirsiniz. Böylelikle rs232 dönüştürücü kullanma zahmetinden kurtulursunuz. bu konu ile ilgili detaylı bilgi www.microchip.com sitesinde mevcut. Tek sorun pic'in çalışma voltajını aşağıya çektiğimiz için yüksek frekanslarda osc kullanamayacağız. İlgili  Pic'in   osc/voltaj grafiğine bakabilirsiniz.  Şuana kadar ki bütün uygulamalarımda rs232 dönüştürücü kullanmadan pic ile gps haberleşmesi yaptım herhangi bir sorunla karşılaşmadım. üstelik çalışma voltajım 4.2v ve 20 MHz. kristal kullanmama rağmen.

Umarım bu açıklama arkadaşlara yardımcı olmuştur.

pcb

gps i çslıştırabilen varmı arkadaşlar ?

elektrolikit

selamlar ben modulu pice ve GLCD'ye baglamayı basardım en sonunda kodumda saglam calısıyor...Denız elektronigin modulu oldukca basarılı calısıyor herkese onerırım.ben kodu ccs ıle yazdım ısteyene yardımcı olabılırım