logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[mega128][bascom] odbiór danych z GPS

thorin00 22 Maj 2008 22:42 3410 4
REKLAMA
  • #1 5170112
    thorin00
    Poziom 14  
    witam

    chciałbym odebrać dane z odbiornika GPS i sytuacja wygląda tak :
    w pierwszej kolejności odbiera dane GPGGA następnie GPGSA, 3xGPGSV i na końcu GPRMC interesują mnie dane GPRMC i tu pojawia sie problem ponieważ pojemność bufora odbiorczego może mieć maksymalną wielkość 254 i przepełnia się zanim odbierze interesujące mnie dane. siedze nad tym już kilka dni i nic nie wymyśliłem, może ktoś ma jakiś pomysł na przepełniający sie bufor?

    pozdrawiam
    tomek
  • REKLAMA
  • #2 5171389
    M. S.
    Poziom 34  
    Zacznij rejestrować konkretną ilość znaków po pojawieniu się litery "R". Występuje ona tylko raz i leży blisko interesujących cię danych.


    Gpstxt = ""
    Przerwanie = 0
    Do
     Gps = Inkey(#1)
     Incr Przerwanie
    Loop Until Gps = 82 Or Przerwanie = 1024
        If Gps = 82 Then
    
          Input #1 , Gpstxt
          Gpstxt = Left(gpstxt , 43)
             Dobry_odczyttxt = Mid(gpstxt , 15 , 1)             ' Sprawdz
                If Dobry_odczyttxt = "A" Then
                   Czastxth = Mid(gpstxt , 4 , 2)
                   Czastxtm = Mid(gpstxt , 6 , 2)
                   Szerokosctxtst = Mid(gpstxt , 17 , 2)
                   Szerokosctxtmin = Mid(gpstxt , 19 , 2)
                   Szerokosctxtsek = Mid(gpstxt , 22 , 4)
                   Szerokoscsek = Val(szerokosctxtsek)
                   Szerokoscsek = 0.006 * Szerokoscsek
                   Szerokosctxtsek = Fusing(szerokoscsek , "#.##")
                   Dlugosctxtst = Mid(gpstxt , 30 , 2)
                   Dlugosctxtmin = Mid(gpstxt , 32 , 2)
                   Dlugosctxtsek = Mid(gpstxt , 35 , 4)
                   Dlugoscsek = Val(dlugosctxtsek)
                   Dlugoscsek = 0.006 * Dlugoscsek
                   Dlugosctxtsek = Fusing(dlugoscsek , "#.##")
                   Knotstxt = Mid(gpstxt , 42 , 2)
                   If Knotstxt = "0." Then
                   		Kmh = 0
                   	Else
                   		Kmh = Val(knotstxt)
                   		Kmh = Kmh * 1.852
                   End If
                   
                End If
    
                   Knotstxt = Fusing(kmh , "#.#" )
    
                   Sms = "T=" + Czastxth + ":" + Czastxtm + " N" + Szerokosctxtst + "'" + Szerokosctxtmin + "'" + Szerokosctxtsek + " E" + Dlugosctxtst + "'" + Dlugosctxtmin + "'" + Dlugosctxtsek + " V=" + Knotstxt + "km/h"
    
                   Locate 1 , 1 : Lcd "N=" ; Szerokosctxtst ; "'" ; Szerokosctxtmin ; "'" ; Szerokosctxtsek ; "  " ; Czastxth ; ":" ; Czastxtm ; "  "
                   Locate 2 , 1 : Lcd "E=" ; Dlugosctxtst ; "'" ; Dlugosctxtmin ; "'" ; Dlugosctxtsek ; " V=" ; Knotstxt ; "  "



    If Gps = 82 Then wykrywa "R" w transmisji - "R" = 82
  • REKLAMA
  • #3 5172027
    Freddy
    Poziom 43  
    thorin00 napisał:
    witam

    chciałbym odebrać dane z odbiornika GPS i sytuacja wygląda tak :
    w pierwszej kolejności odbiera dane GPGGA następnie GPGSA, 3xGPGSV i na końcu GPRMC interesują mnie dane GPRMC i tu pojawia sie problem ponieważ pojemność bufora odbiorczego może mieć maksymalną wielkość 254 i przepełnia się zanim odbierze interesujące mnie dane. siedze nad tym już kilka dni i nic nie wymyśliłem, może ktoś ma jakiś pomysł na przepełniający sie bufor?

    pozdrawiam
    tomek

    Może pomogą Ci załączone przykłady.
    http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=443&item_type=project
    http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=1062&item_type=project
    http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=769&item_type=project
  • REKLAMA
  • #4 5206016
    marwid79
    Poziom 2  
    Witaj
    Skonfiguruj Odbiornik GPS tak aby wysyłał na zewnątrz tylko interesującą Cię sentencję (w twoim przypadku: GPRMC). Rozwiąże to problem za małego bufora.
    Możesz też rozpoznawać w programie procka sentencję GPRMC i tylko ją zapisywać.

    pozdrawiam
    Marcin
  • #5 5208208
    Egzi
    Poziom 13  
    Ja napisalem sobie taki kod ktory pobiera dane RMC i wyswietla na LCD calosc dziala na zasadzie przerwan

    	uint8_t gps_data[80], i;
    ISR(USART_RXC_vect)
    {
    
    if (UDR=='$') i=-1;
    gps_data[i++]=UDR;
    
    
    if(UDR=='*') if(gps_data[3]=='R' && gps_data[4]=='M' && gps_data[5]=='C') 
    				{
    				LCD_CLR;
    				write_text((char*)gps_data);
    				i=-1;
    				};
    
    };


    Według mojej logiki w dwoch miejscach powinno byc i=0 zamiast i=-1 ale z nieznanych mi przyczyn kod dziala prawidlowo wlasnie tak jak jest, inaczej uzupelnianie tabeli zaczyna od drugiej litery. Przy okazji ktos moze mi powie dlaczego tak sie dzieje?
REKLAMA