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

ATmega32 BASCOM Problem z odbiornikiem GPS

potek77 18 Maj 2011 14:16 1511 3
REKLAMA
  • #1 9519377
    potek77
    Poziom 11  
    Witam szanownych forumowiczów.
    Mam prośbę o sprawdzenie programu odczytującego dane z odbiornika GPS przez UARTa.
    Odbiornik GPS to FGPMMOPA4
    link do noty katalogowej
    http://download.maritex.com.pl/pdfs/wi/FGPMMOPA4.pdf
    TX odbiornika podłączone do RXD mikrokontrolera (poziomy napięć dopasowane), sprzętowo wszystko działa.

    Problem jest w programie:

    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 9600
    Config Portb = Output
    Portb = 255
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    Config Lcd = 16 * 2
    Cursor Off
    Cls

    Dim Gprmc As String * 6
    Gprmc = "$GPRMC"
    Dim Znak As Byte
    Dim Gps As String * 82
    Dim Pozycja_naglowka As Byte
    Dim Naglowek As String * 6
    Dim Utc As String * 6

    Do
    Gps = ""

    Do
    Znak = Inkey()
    Gps = Gps + Chr(znak)
    Loop Until Znak = 10

    Pozycja_naglowka = Instr(gps , Gprmc)
    Naglowek = Mid(gps , Pozycja_naglowka , 6)

    'Gps=$GPRMC,035242.000,A,2307.1220,N,12016.4420,E,0.06,0.00,140508,3.05,W,A*63

    If Naglowek = "$GPRMC" Then
    Utc = Mid(gps , 8 , 6) 'utc
    End If
    Locate 1 , 1
    Lcd Utc

    Loop

    Jeśli przeniosę End if z czwartej linii od końca do przedostatniej linii wtedy wszystko działa.
    Zależy mi jednak na tym, żeby wyświetlanie było na końcu a nie w warunku.
  • REKLAMA
  • REKLAMA
  • #3 9522151
    potek77
    Poziom 11  
    >"Ale co nie działa ? "
    Nie wyświetla mi wartości Utc.

    >"Być może zbyt często chcesz wyświetlać jak na Bascom."
    Jeśli na końcu programu zamiast

    Locate 1 , 1
    Lcd Utc

    napiszę:

    Locate 1 , 1
    Lcd "UTC:"; Utc

    to wyświetla tylko UTC:, więc chyba to nie problem szybkości wyświetlania bo wtedy nic by się nie wyświetlało.

    >"A co ze znakiem CR"
    Według noty katalogowej na końcu każdej ramki jest <CR> <LF> więc wydaje mi się, że żeby wykryć koniec ramki wystarczy wykryć znak <LF>

    Dziękuję za zainteresowanie.
    Jeśli ktoś ma jeszcze jakieś pomysły to proszę o radę.
  • #4 9522849
    krru
    Poziom 33  
    Nie znam BASCOMa, więc nie podam gotowego kodu, ale wydaje mi się, że powinieneś zaraz po Instr sprawdzić, czy odpowiedni ciąg został znaleziony. NMEA to zwykle strumień kilku różnych komunikatów, powtarzanych w kółko. Jeśli akurat trafisz na coś innego niż $GPRMC to Instr nic nie znajdzie.

    Ja bym jeszcze dopisać coś w stylu

    If znak = "$" then
    Gps = Chr(znak)
    else
    Gps = Gps + Chr(znak)
    end if

    zamiast tej linijki po Inkey
    (nie podaje w tagach, bo to taki pseudo kod)

    Wtedy zawsze $ będzie na początku i nie trzeba będzie przeszukiwać napisu, tylko wystarczy sprawdzić konkretny fragment.

    Niekonsekwencja tez jest w instrukcji Utc = Mid(gps , 8 , 6) - skoro wyszukujesz nagłówka, to tutaj też trzeba użyć zmiennej Pozycja_naglowka.
REKLAMA