Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Gps Yardım

Başlatan eeris43, 30 Ocak 2015, 15:00:24

eeris43

Merhaba arkadaşlar öncedende konu açmıştım ama bu sefer farklı konuda yardım istiyorum ben Gps devremi hazırladım.Birkaç sorum olucak bunları çözemedim.ben Gps sensoru olarak gy-neo6mv2 modulunu kullanıyorum .Devrenin kodlarını su sekilde tasarladım gelen veriyi direl lcd ekranda yazdırmaya .Şimdi sorunlarımı sıralayım.
1. Sorun:Devreye enerji verdiğimde bilgileri direk okuyamıyorum.Sürekli resetlmem gerekiyor yada gps enerjisini kesip veriyorum eer denk gelir yakalarsam verileri okuyup ekranda yazdırabiliyorum goruntusu aşağıdadır.

2. Sorunumda ben $GPRMC ile başlayan veriyi okucam bu veriyi ilk anlarda lcd görebiliyodum ama artık lcd ara sıra gozukuyor .



yazdığım programda aşağıdadır.Bir inceleme fırsatınız olursa sevinirim


#include <18F877A.h>

#FUSES NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(crystal=20000000)

#include <flexy_lcd.c>

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)

/*Değişkenler*/
char alinanveri;
char gpsveri[85];
int gpshazir=0;
int verisay;
int virgul[10];
int vs=0;
char enlem[11];
char boylam[11];
int k,i,m,z,l;
char baglanti;
int enlemfark,boylamfark;
CHAR enlemyon,boylamyon;
int durum=0;

int tip=0;
/*Değişkenler*/


/*RS232 KEMEMİZ*/
#INT_RDA
void  rs232kesme(void)
{
   disable_interrupts(int_rda);
   alinanveri = getchar();
   
  
   switch(gpsveri[0])
   {
      case '$' : {gpshazir=1; verisay=0; vs=0;} break;
      case ' ' : {gpshazir=0; } break;
   }
   
   gpsveri[verisay++]=alinanveri;
   
   
 
    
      if(gpsveri[3]=='R')
      {
         durum=1;
         if(gpsveri[verisay]==',')
         {
            virgul[vs++]=verisay; 
         }
      }
      
      else
      {
        durum=0;
      }
      clear_interrupt(INT_RDA);
   
//
}
/*RS232 KEMEMİZ*/

/*Bilgileri Ayiklayalım*/
void ayirma()
{
   if(durum ==1)
   {
   
   /*GPS Bilgi Alınıyormu ?*/
   baglanti=gpsveri[virgul[1]+1];
   
   /*Enlem Bilgisi Alalım*/
   enlemfark= (virgul[3]-virgul[2]);//Kaç Karakter olduğunu hesapladık.
   
   for(k=0;k<enlemfark;k++)
   {
   m=virgul[2]+k;
   enlem[k]=gpsveri[m+1];
   }
   
   enlemyon=gpsveri[virgul[3]+1];
   
   /*Enlem Bilgisi Alalım*/
   
   /*Boylam Bilgisi Alalım*/
   boylamfark= (virgul[5]-virgul[4]);//Kaç Karakter olduğunu hesapladık.
   
   for(k=0;k<boylamfark;k++)
   {
   m=virgul[4]+k;
   boylam[k]=gpsveri[m+1];
   }
   
   boylamyon=gpsveri[virgul[5]+1];
   
   /*Boylam Bilgisi Alalım*/   
   
   
   }
}
/*Bilgileri Ayiklayalım*/

/*RS232 KEMEMİZ*/
void main()
{
   lcd_init();
   
   printf(lcd_putc,"\f DUSCART GPS \n SISTEMI");
   delay_ms(500);
    printf(lcd_putc,"\f LUTFEN \n BEKLEYINIZ");
   delay_ms(500);
   while(1)
   {
      enable_interrupts(GLOBAL);
      clear_interrupt(INT_RDA);
      enable_interrupts(INT_RDA);
      
       if(tip==0)
     {
    
      for(l=1;l<3;l++)
      {
      for(k=0;k<32;k++)
      {
      m=k+1;
      if(l==2)
      {
      z=16+k;
      }
      else{z=k;}
      lcd_gotoxy(m,l);
      printf(lcd_putc,"%c",gpsveri[z]);
      }
      }
      
      } 
     
      
   if(tip==1)
   {
      if(gpshazir==1)
      {
      ayirma();

      //printf(lcd_putc,"\f%C",baglanti);
      //delay_ms(250);
      
      //Enlemi Yazdıralım
      lcd_gotoxy(1,1);
      printf(lcd_putc,"E:");
      for(i=0;i<9;i++)
      {
      m=i+3;
      lcd_gotoxy(m,1);
      printf(lcd_putc,"%c           "enlem[i]);
      enable_interrupts(INT_RDA);
      }
      lcd_gotoxy(13,1);
      printf(lcd_putc,"- %c           "enlemyon);
      
      //Boylamı Yazdıralım
      lcd_gotoxy(1,2);
      printf(lcd_putc,"B:");
      for(i=0;i<9;i++)
      {
      m=i+3;
      lcd_gotoxy(m,2);
      printf(lcd_putc,"%c           "boylam[i]);
      enable_interrupts(INT_RDA);
      }
      lcd_gotoxy(13,2);
      printf(lcd_putc,"- %c           "boylamyon);
      
      delay_ms(250);
      
      }
   
      else
      {
         printf(lcd_putc,"\fGPS HAZIR değil\n Lutfen Bekleyiniz");
         delay_ms(250);
      }
      
   }
      if(input(pin_a0)==1)
      {
      delay_ms(250);
         if(tip==0)
         {
         tip=1;
         }
         
         else if(tip==1)
         {
         tip=0;
         }
      
      }
      
      clear_interrupt(INT_RDA);
   }

}

bmutlu

1-cihaz ilk açıldığında uydularla bağlantı kurmaya çalışır ve bulunana kadar LCD ye bir bilgi yazmamalısın yada Açılış yazısı yazmalısın 1-2 dakika sürebilir. Ele de son çalıştığı noktadan başka bir konuma götürüldüğünde ise bu süre daha da uzun sürer.
2-Uygun veri geldiğinde ekrana yazmalısın tabi bu data önce bir diziye alınmalı ve uygun ise ondan sonra LCD ye aktarılmalı .

Böyle yazılımınızı yazarsanız problemlerden kurtulabilirsiniz .

Not:Programınızı incelemedim dikkat edilmesi gerekli yerleri yazım..

homer380

daha önce aynı modulle calışma yapmıştım kodlar proton da yazılmıştır. umarım işinize yarar.

https://www.picproje.org/index.php/topic,51687.msg392786.html#msg392786

fatal16

Sanırım uydulara bağlanmamış modül.

Elinizde seri port dönüştürücü varsa direk bilgisayar üzerinden test edin.

$GPRMC, Saat, A/V, Latitude , North/South, Longitude, East/West, Speed, Tarih

İkinci datanın durumuna göre;
A: Uyduya bağlanıdığını,
V: Uydu bağlantısı olmadığını gösterir.



MrDarK

Kullandığın cihaz pasif anten kullanıyor, yani masanın üzerinde çekmesini bekleyemezsin. fatal16'nında dediği gibi V bilgisi yerine A gelmeli. Devreni dışarıda çatı balkon vb yerlere koymaya çalış ve ortalama >1dk bekle
Picproje Eğitim Gönüllüleri ~ MrDarK