NMEA DATA Stream

Başlatan WhiteTigerTR, 10 Eylül 2018, 18:38:02

WhiteTigerTR

Arkadaşlar merhaba;

Hi-Target QMini A7 üzerine 3rd party uygulama yazmaya çalışıyorum.
Cihaz Diffsettool isimli bir program aracılığı ile doğruladığı koordinat bilgilerini NMEA data olarak paylaşıyor diye öğrendim.
Teorikte seri port dinler gibi data alabilmem gerektiğini düşünüyorum çünkü difsettool un ayarlarında ip adresi, port bilgilerinin yanısıra seri port ve baudrate
gibi bilgiler bulunmakta

Fakat pratikte gün içinde ne yaptıysam dinleme gerçekleştiremedim.

Konu hakkında tecrübesi olan varsa yada okumam gereken makaleler gibi yönlendirme yapabilecek varsa çok sevinirim
desteğiniz ve paylaşımınız için şimdiden teşekkür eder iyi günler dilerim.

kartal_0689

GPS okuma için U-blox firmasının LEA-6s modülünü kullanmıştım. Şimdi Quectell firmasının ürettiği L86 GNSS modülünü deneyeceğim ama yazılımını bitirmedim.
LEA-6s UART okuma için örnek yazılım aşağıdadır.

NMEA protokolü için detaylı kod açıklamalarını bu linkte bulabilirsin. https://www.gpsinformation.org/dale/nmea.htm




var
SignalCounter : word;
   DataType : array [0..5] of char;
   NMEA     : array [0..71] of char;
   Temp1, Temp2, Temp3, Receive : byte;
   SignalFaultBit : bit;
   Uart2_Counter : longint;
   Uart2_CounterText : string[20];

Procedure Start_Register_Config();
begin

      Delay_ms(500);
     
      ADPCFG := 0xFFFF;
     
      TRISA  := 0xFFFF;
      TRISB  := 0xFFFF;
      TRISC  := 0xFFFF;
      TRISD  := 0xFFFF;
      TRISF  := 0xFFFF;
     
      Delay_ms(10);

             //  5432109876543210
      TRISA  := %1111111111111111;
      TRISB  := %1110000011111111;
      TRISC  := %1111111111111111;
      TRISD  := %1111111111111100;
      TRISF  := %1111111111011100;
     
      Delay_ms(50);
     
      PORTA := 0x0000;
      PORTB := 0x0000;
      PORTC := 0x0000;
      PORTD := 0x0000;
      PORTF := 0x0000;
     
                       //  5432109876543210
      IPC0             := %0111000000000000;
      IPC1             := %0000001100000000;
     
      T2CON            := 0x8020;
      T2IE_bit         := 1;
      T2IF_bit         := 0;
      PR2              := 23437;
     

      INT0IF_bit    := 0;
      INT1IE_bit    := 1;   // external interrupt enabled
      INT1IF_bit    := 0;   // flag cleared
      NSTDIS_bit    := 1;
     
     
     
      Delay_ms(50);
     
      Temp1                  := 0;
      Temp2                  := 0;
      Temp3                  := 0;
      DataType[0]            := ' ';
      DataType[1]            := 'G';
      DataType[2]            := 'P';
      DataType[3]            := ' ';
      DataType[4]            := ' ';
      DataType[5]            := ' ';
      SignalCOunter          := 0;
      SignalFaultBit         := 0;
     
      UART2_Init(9600);
      UART1_Init(9600);            // Initialize UART module at 9600

      URXISEL_1_U1STA_bit := 0;
      NSTDIS_bit          := 1;             // No nesting of interrupts
      U1RXIF_bit          := 0;             // Ensure interrupt not pending
      U1RXIE_bit          := 1;             // Enable USART Receiver interrupt
      Uart2_Counter       := 0;
      Seconds             := 0;
     

     


end;
//************************************************************************************************************

procedure UartInterrupt(); iv IVT_ADDR_U1RXINTERRUPT; ics ICS_AUTO;
begin

    SignalCounter := 0;
    Operation_Led := not Operation_Led;

    if (Temp1 =0) then
     begin
          Receive := UART1_Read();
          if (Receive = '$') then
            begin
                 Temp1 := 1;
                 Temp2 := 2;
            end;
     end;

    if (Temp2 = 2) then
      begin
          UART1_Read_Text(DataType, ',', 6);
          Temp2 := 3;
          Temp3 := 3;
          Temp1 := 0;

      end;

    if ((DataType[2] = 'G')and(DataType[3] = 'G')and(DataType[4] = 'A')) then //GPGGA
      begin

           if (Temp3 = 3) then
             begin

                  UART1_Read_Text(NMEA, '*', 100);
                  Temp3 := 4;
                  Temp2 := 2;
                  Temp1 := 0;

             end;



      end;


  U1RXIF_bit := 0;               // Set RCIF to 0
 
end;
//************************************************************************************************************
procedure Timer2Interrupt(); iv IVT_ADDR_T2INTERRUPT; // GPS okuma hatası için
begin
    T1IF_bit         := 0;  // 100ms
    //Enter your code here
    Inc(SignalCounter);

    if (SignalCOunter >= 10) then
      begin
          SignalCOunter   := 20;
          SignalFaultBit  := 1;
      end else
      begin
          SignalFaultBit  := 0;
      end;



end;

  While (TRUE) do
   begin
   
        OERR_bit := 0;             // Set OERR to 0
        FERR_bit := 0;             // Set FERR to 0

        Uart2_RD_Pin := 1;
        Delay_ms(10);
       
        Inc(Uart2_Counter);
        LongIntToStr(Uart2_Counter, Uart2_CounterText);
       
        UART2_Write_Text(' GPS Module');
        UART2_Write(#10);
        UART2_Write(#13);
        UART2_Write_Text(('Clock:')+NMEA[0]+NMEA[1]+':'+NMEA[2]+NMEA[3]+':'+NMEA[4]+NMEA[5]);
        UART2_Write(#10);
        UART2_Write(#13);
        UART2_Write_Text(('Latitude:')+NMEA[10]+NMEA[11]+NMEA[12]+NMEA[13]+NMEA[14]+NMEA[15]+NMEA[16]+NMEA[17]+NMEA[18]+NMEA[19]+NMEA[21]);
        UART2_Write(#10);
        UART2_Write(#13);
        UART2_Write_Text(('Longitude:')+NMEA[23]+NMEA[24]+NMEA[25]+NMEA[26]+NMEA[27]+NMEA[28]+NMEA[29]+NMEA[30]+NMEA[31]+NMEA[32]+NMEA[33]+NMEA[35]);
        UART2_Write(#10);
        UART2_Write(#13);
        UART2_Write_Text(('Altitude:')+NMEA[47]+NMEA[48]+NMEA[49]+NMEA[50]+NMEA[51]+NMEA[53]);
        UART2_Write(#10);
        UART2_Write(#13);
        UART2_Write_Text(('Satellite:')+NMEA[39]+NMEA[40]);
        UART2_Write(#10);
        UART2_Write(#13);
        UART2_Write_Text(('Comm.Counter:')+Uart2_CounterText);
        UART2_Write(#10);
        UART2_Write(#13);
        UART2_Write_Text('/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*');
        UART2_Write(#10);
        UART2_Write(#13);

        Uart2_RD_Pin := 0;

   end; // while end

TURKEY/ANK

WhiteTigerTR

Merhaba öncelikle yanıtınız için teşekkür ederim.

Gönderdiğiniz kodu inceleyeceğim

iyi günler, iyi çalışmalar dilerim.

Powered by EzPortal