Bascom avr + GPS ontvanger

Beste CO'ers,

Momenteel ben ik bezig met een gps project.
Helaas heb ik een probleem, dat is als volgt:

Ik krijg niet achterhaald hoe ik de GPS ontvanger kan uitlezen met een Atmega88. kan iemand mij op weg helpen?

Ik gebruik de micromini gps ontvanger van sparkfun.com
deze heeft een viertal pootjes plus,min,rx,tx.
Hierbij heb ik de plus min gewoon correct aangesloten en de tx op pind.0(rx) van de uC. dit is niet al te moeilijk.

Vervolgens wil ik in bascom de $GPGGA zin uitlezen en dit weergeven op een lcd scherm. Echter kom ik er niet achter hoe ik de GPS informatie moet verwerken in de uC met bascom.

Heeft iemand een voorbeeld hiervan? of kan iemand mij op weg helpen?

Mvg,
ICtje

Kijk hier eens.
Of anders gebruik de search button van het Bacom forum.
En anders heeft google ook zo'n 75000 resultaten voor je.

Ik heb ooit eens voor een ATmega128 een stuk software geschreven.
Deze las GPRMC en GPCGA uit en displayt alle data op een 128x240 scherm.

Het is alleen erg slecht geargumenteerd. Tot helemaal niet :S


'------------------------------------------------------------------------------
'name                     : NMEA_PARSER
'copyright                : B.j. Pasteuning
'purpose                  : Parsing GPS NMEA sentences, GPRMC,GPGGA,GPGSA
'micro                    : ATMega16/128
'------------------------------------------------------------------------------

'BIG LCD
$regfile = "m128def.dat"
$crystal = 16000000

$hwstack = 100
$swstack = 100
$framesize = 100

Config Com1 = 4800 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Disable Serial

$lib "glcd.lib"

'BIG LCD
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 6 , Mode = 6
Config Portc.5 = Output                                     'Mode pin
Portc.5 = 0
Cls


On Urxc Rs232_isr
Enable Urxc

Enable Interrupts

Dim Firmware As String * 5 : Firmware = "1.50"

Dim Buffer As Byte
Dim Buffer_str As String * 10
Dim Sentence_header As String * 8
Dim Length As Byte

Dim Gprmc_utc_string As String * 11
Dim Gprmc_utchr_string As String * 2 : Dim Gprmc_utchr As Byte
Dim Gprmc_utcmin_string As String * 2 : Dim Gprmc_utcmin As Byte
Dim Gprmc_utcsec_string As String * 2 : Dim Gprmc_utcsec As Byte

Dim Gprmc_status_string As String * 2

Dim Gprmc_lat_string As String * 10
Dim Gprmc_lathr_string As String * 2 : Dim Gprmc_lathr As Byte
Dim Gprmc_latmin_string As String * 2 : Dim Gprmc_latmin As Byte
Dim Gprmc_latsec_string As String * 2 : Dim Gprmc_latsec As Byte
Dim Gprmc_latssec_string As String * 2 : Dim Gprmc_latssec As Byte

Dim Gprmc_ns_string As String * 2

Dim Gprmc_lon_string As String * 11
Dim Gprmc_lonhr_string As String * 3 : Dim Gprmc_lonhr As Byte
Dim Gprmc_lonmin_string As String * 2 : Dim Gprmc_lonmin As Byte
Dim Gprmc_lonsec_string As String * 2 : Dim Gprmc_lonsec As Byte
Dim Gprmc_lonssec_string As String * 2 : Dim Gprmc_lonssec As Byte

Dim Gprmc_ew_string As String * 2

Dim Gprmc_speed_string As String * 5 : Dim Gprmc_speed As Word
Dim Gprmc_course_string As String * 7 : Dim Gprmc_course As Word

Dim Gprmc_date_string As String * 7
Dim Gprmc_dateday_string As String * 2 : Dim Gprmc_dateday As Byte
Dim Gprmc_datemonth_string As String * 2 : Dim Gprmc_datemonth As Byte
Dim Gprmc_dateyear_string As String * 2 : Dim Gprmc_dateyear As Word

Dim Gpgga_utc_string As String * 11
Dim Gpgga_lat_string As String * 10
Dim Gpgga_ns_string As String * 2
Dim Gpgga_lon_string As String * 11
Dim Gpgga_ew_string As String * 2
Dim Gpgga_posfix_string As String * 2 : Dim Gpgga_posfix As Byte
Dim Gpgga_sats_string As String * 3
Dim Gpgga_hdop_string As String * 4
Dim Gpgga_mslalt_string As String * 4
Dim Gpgga_units1_string As String * 2

Dim Gpgsa_mode1_string As String * 2
Dim Gpgsa_mode2_string As String * 2 : Dim Gpgsa_mode2 As Byte

Dim Gpgsa_sat1_string As String * 3
Dim Gpgsa_sat2_string As String * 3
Dim Gpgsa_sat3_string As String * 3
Dim Gpgsa_sat4_string As String * 3
Dim Gpgsa_sat5_string As String * 3
Dim Gpgsa_sat6_string As String * 3
Dim Gpgsa_sat7_string As String * 3
Dim Gpgsa_sat8_string As String * 3
Dim Gpgsa_sat9_string As String * 3
Dim Gpgsa_sat10_string As String * 3
Dim Gpgsa_sat11_string As String * 3
Dim Gpgsa_sat12_string As String * 3

Dim Gpgsv_totalmessages_string As String * 2 : Dim Total_messages As Byte
Dim Gpgsv_currentmessage_string As String * 2 : Dim Current_message As Byte
Dim Gpgsv_sats_string As String * 3

Dim Gpgsv_ch1satid_string As String * 3
Dim Gpgsv_ch1satel_string As String * 3
Dim Gpgsv_ch1sataz_string As String * 4
Dim Gpgsv_ch1satdb_string As String * 3

Dim Gpgsv_ch2satid_string As String * 3
Dim Gpgsv_ch2satel_string As String * 3
Dim Gpgsv_ch2sataz_string As String * 4
Dim Gpgsv_ch2satdb_string As String * 3

Dim Gpgsv_ch3satid_string As String * 3
Dim Gpgsv_ch3satel_string As String * 3
Dim Gpgsv_ch3sataz_string As String * 4
Dim Gpgsv_ch3satdb_string As String * 3

Dim Gpgsv_ch4satid_string As String * 3
Dim Gpgsv_ch4satel_string As String * 3
Dim Gpgsv_ch4sataz_string As String * 4
Dim Gpgsv_ch4satdb_string As String * 3

Dim Gpgsv_ch5satid_string As String * 3
Dim Gpgsv_ch5satel_string As String * 3
Dim Gpgsv_ch5sataz_string As String * 4
Dim Gpgsv_ch5satdb_string As String * 3

Dim Gpgsv_ch6satid_string As String * 3
Dim Gpgsv_ch6satel_string As String * 3
Dim Gpgsv_ch6sataz_string As String * 4
Dim Gpgsv_ch6satdb_string As String * 3

Dim Gpgsv_ch7satid_string As String * 3
Dim Gpgsv_ch7satel_string As String * 3
Dim Gpgsv_ch7sataz_string As String * 4
Dim Gpgsv_ch7satdb_string As String * 3

Dim Gpgsv_ch8satid_string As String * 3
Dim Gpgsv_ch8satel_string As String * 3
Dim Gpgsv_ch8sataz_string As String * 4
Dim Gpgsv_ch8satdb_string As String * 3

Dim Gpgsv_ch9satid_string As String * 3
Dim Gpgsv_ch9satel_string As String * 3
Dim Gpgsv_ch9sataz_string As String * 4
Dim Gpgsv_ch9satdb_string As String * 3

Dim Gpgsv_ch10satid_string As String * 3
Dim Gpgsv_ch10satel_string As String * 3
Dim Gpgsv_ch10sataz_string As String * 4
Dim Gpgsv_ch10satdb_string As String * 3

Dim Gpgsv_ch11satid_string As String * 3
Dim Gpgsv_ch11satel_string As String * 3
Dim Gpgsv_ch11sataz_string As String * 4
Dim Gpgsv_ch11satdb_string As String * 3

Dim Gpgsv_ch12satid_string As String * 3
Dim Gpgsv_ch12satel_string As String * 3
Dim Gpgsv_ch12sataz_string As String * 4
Dim Gpgsv_ch12satdb_string As String * 3

Dim Td1 As String * 10
Dim Tl1 As String * 10
Dim Gd1 As String * 10
Dim Gl1 As String * 10

Dim Td As Single
Dim Tl As Single

Dim Gd As Single
Dim Gl As Single

Dim Yy As Single
Dim Xx As Single

Dim A2x As String * 30
Dim Z2n As String * 25
Dim Dx As Integer
Dim Dy As Integer
Dim Xxx As Integer
Dim Yyy As Integer
Dim Dxx As Integer
Dim Dyy As Integer
Dim Str1 As String * 1
Dim Str2 As String * 1
Dim Str3 As String * 1
Dim Str4 As String * 1
Dim Str5 As String * 1
Dim Str6 As String * 1
Dim Str7 As String * 1
Dim Str8 As String * 1
Dim Xxxx As Single
Dim Yyyy As Single
Dim Locator As String * 6

Declare Sub Nmea_parse()
Declare Sub Display_general_data()
Declare Sub Display_sat_data()
Declare Sub Maidenhead_calc()
Declare Sub Substract_data()
Declare Sub Display_direction()

Declare Sub Lcdtext(byval S As String , Byval Xoffset As Byte , Byval Yoffset As Byte , Byval Fontset As Byte , Byval Inverse As Byte , Byval Rotation As Byte)
'SYNTAX  Lcdtest String , Xoffset , Yoffset , Fontset , Inverse , Rotation
'
'* Xoffset and Yoffset is in pixels, so you can place text on every spot on the display
'* You determin yourself in the subroutine witch font belongs to the fontset




'Nmea Parsing led
Config Portd.4 = Output
Portd.4 = 0

'Backlight MVC
Config Portc.1 = Output
Portc.1 = 1


Cursor Off

Cursor Noblink


Cls

'Draw welcome message
Showpic 104 , 1 , Globe

Locate 1 , 1 : Lcd "GPS"
Locate 2 , 1 : Lcd "Decoder"
Locate 3 , 1 : Lcd Firmware
Locate 7 , 1 : Lcd "Bjorn"
Locate 8 , 1 : Lcd "Pasteuning"

Waitms 2500

Enable Serial

Goto Satellite_display


'-------------------------------------------------------------------------------
General_display:


   Cls

   Lcdtext "AVR NMEA Decoder - General information " , 1 , 1 , 1 , 1 , 0

   Locate 10 , 1 : Lcd "Used Sats:"
   Locate 10 , 16 : Lcd "Fix:"
   Locate 3 , 1 : Lcd "Latitude :"
   Lcdtext "{127}" , 90 , 16 , 1 , 0 , 0
   Locate 4 , 1 : Lcd "Longitude:"
   Lcdtext "{127}" , 96 , 24 , 1 , 0 , 0
   Locate 5 , 1 : Lcd "Locator  :"
   Locate 6 , 1 : Lcd "UTC Time :"
   Locate 7 , 1 : Lcd "Date     :"
   Locate 8 , 1 : Lcd "Bearing  :"
   Lcdtext "{127}" , 84 , 56 , 1 , 0 , 0
   Locate 8 , 17 : Lcd "[   ]"
   Locate 9 , 1 : Lcd "Speed    :"

   Locate 11 , 1 : Lcd "CH01:"
   Locate 12 , 1 : Lcd "CH02:"
   Locate 13 , 1 : Lcd "CH03:"
   Locate 14 , 1 : Lcd "CH04:"
   Locate 15 , 1 : Lcd "CH05:"
   Locate 16 , 1 : Lcd "CH06:"

   Locate 11 , 11 : Lcd "CH07:"
   Locate 12 , 11 : Lcd "CH08:"
   Locate 13 , 11 : Lcd "CH09:"
   Locate 14 , 11 : Lcd "CH10:"
   Locate 15 , 11 : Lcd "CH11:"
   Locate 16 , 11 : Lcd "CH12:"

Do

   Call Maidenhead_calc()

   Call Substract_data()

   Call Display_general_data()

Loop
'-------------------------------------------------------------------------------


'-------------------------------------------------------------------------------
Satellite_display:


   Cls

   Lcdtext "AVR NMEA Decoder - Satellite info.     " , 1 , 1 , 1 , 1 , 0
   Locate 3 , 1 : Lcd "Chan. ID  EL.  AZ. SNR"
   Locate 5 , 1 : Lcd "CH01:"
   Locate 6 , 1 : Lcd "CH02:"
   Locate 7 , 1 : Lcd "CH03:"
   Locate 8 , 1 : Lcd "CH04:"
   Locate 9 , 1 : Lcd "CH05:"
   Locate 10 , 1 : Lcd "CH06:"
   Locate 11 , 1 : Lcd "CH07:"
   Locate 12 , 1 : Lcd "CH08:"
   Locate 13 , 1 : Lcd "CH09:"
   Locate 14 , 1 : Lcd "CH10:"
   Locate 15 , 1 : Lcd "CH11:"
   Locate 16 , 1 : Lcd "CH12:"

Do

   Call Maidenhead_calc()

   Call Substract_data()

   Call Display_sat_data()

Loop
'-------------------------------------------------------------------------------













'-------------------------------------------------------------------------------
Sub Display_sat_data()

Locate 2 , 1 : Lcd Val(gpgsv_sats_string)

If Val(gpgsv_sats_string) = 11 Then
   Gpgsv_ch12satid_string = "00"
   Gpgsv_ch12satel_string = "00"
   Gpgsv_ch12sataz_string = "000"
   Gpgsv_ch12satdb_string = "00"
   If Val(gpgsv_sats_string) = 10 Then
      Gpgsv_ch11satid_string = "00"
      Gpgsv_ch11satel_string = "00"
      Gpgsv_ch11sataz_string = "000"
      Gpgsv_ch11satdb_string = "00"
      If Val(gpgsv_sats_string) = 9 Then
         Gpgsv_ch10satid_string = "00"
         Gpgsv_ch10satel_string = "00"
         Gpgsv_ch10sataz_string = "000"
         Gpgsv_ch10satdb_string = "00"
         If Val(gpgsv_sats_string) = 8 Then
            Gpgsv_ch9satid_string = "00"
            Gpgsv_ch9satel_string = "00"
            Gpgsv_ch9sataz_string = "000"
            Gpgsv_ch9satdb_string = "00"
            If Val(gpgsv_sats_string) = 7 Then
               Gpgsv_ch8satid_string = "00"
               Gpgsv_ch8satel_string = "00"
               Gpgsv_ch8sataz_string = "000"
               Gpgsv_ch8satdb_string = "00"
               If Val(gpgsv_sats_string) = 6 Then
                  Gpgsv_ch7satid_string = "00"
                  Gpgsv_ch7satel_string = "00"
                  Gpgsv_ch7sataz_string = "000"
                  Gpgsv_ch7satdb_string = "00"
                  If Val(gpgsv_sats_string) = 5 Then
                     Gpgsv_ch6satid_string = "00"
                     Gpgsv_ch6satel_string = "00"
                     Gpgsv_ch6sataz_string = "000"
                     Gpgsv_ch6satdb_string = "00"
                     If Val(gpgsv_sats_string) = 4 Then
                        Gpgsv_ch5satid_string = "00"
                        Gpgsv_ch5satel_string = "00"
                        Gpgsv_ch5sataz_string = "000"
                        Gpgsv_ch5satdb_string = "00"
                        If Val(gpgsv_sats_string) = 3 Then
                           Gpgsv_ch4satid_string = "00"
                           Gpgsv_ch4satel_string = "00"
                           Gpgsv_ch4sataz_string = "000"
                           Gpgsv_ch4satdb_string = "00"
                           If Val(gpgsv_sats_string) = 2 Then
                              Gpgsv_ch3satid_string = "00"
                              Gpgsv_ch3satel_string = "00"
                              Gpgsv_ch3sataz_string = "000"
                              Gpgsv_ch3satdb_string = "00"
                              If Val(gpgsv_sats_string) = 1 Then
                                 Gpgsv_ch2satid_string = "00"
                                 Gpgsv_ch2satel_string = "00"
                                 Gpgsv_ch2sataz_string = "000"
                                 Gpgsv_ch2satdb_string = "00"
                                 If Val(gpgsv_sats_string) = 0 Then
                                    Gpgsv_ch1satid_string = "00"
                                    Gpgsv_ch1satel_string = "00"
                                    Gpgsv_ch1sataz_string = "000"
                                    Gpgsv_ch1satdb_string = "00"
                                 End If
                              End If
                           End If
                        End If
                     End If
                  End If
               End If
            End If
         End If
      End If
   End If
End If

Locate 5 , 7 : Lcd Gpgsv_ch1satid_string ; ", " ; Gpgsv_ch1satel_string ; ", " ; Gpgsv_ch1sataz_string ; ", " ; Gpgsv_ch1satdb_string
Locate 6 , 7 : Lcd Gpgsv_ch2satid_string ; ", " ; Gpgsv_ch2satel_string ; ", " ; Gpgsv_ch2sataz_string ; ", " ; Gpgsv_ch2satdb_string
Locate 7 , 7 : Lcd Gpgsv_ch3satid_string ; ", " ; Gpgsv_ch3satel_string ; ", " ; Gpgsv_ch3sataz_string ; ", " ; Gpgsv_ch3satdb_string
Locate 8 , 7 : Lcd Gpgsv_ch4satid_string ; ", " ; Gpgsv_ch4satel_string ; ", " ; Gpgsv_ch4sataz_string ; ", " ; Gpgsv_ch4satdb_string
Locate 9 , 7 : Lcd Gpgsv_ch5satid_string ; ", " ; Gpgsv_ch5satel_string ; ", " ; Gpgsv_ch5sataz_string ; ", " ; Gpgsv_ch5satdb_string
Locate 10 , 7 : Lcd Gpgsv_ch6satid_string ; ", " ; Gpgsv_ch6satel_string ; ", " ; Gpgsv_ch6sataz_string ; ", " ; Gpgsv_ch6satdb_string
Locate 11 , 7 : Lcd Gpgsv_ch7satid_string ; ", " ; Gpgsv_ch7satel_string ; ", " ; Gpgsv_ch7sataz_string ; ", " ; Gpgsv_ch7satdb_string
Locate 12 , 7 : Lcd Gpgsv_ch8satid_string ; ", " ; Gpgsv_ch8satel_string ; ", " ; Gpgsv_ch8sataz_string ; ", " ; Gpgsv_ch8satdb_string
Locate 13 , 7 : Lcd Gpgsv_ch9satid_string ; ", " ; Gpgsv_ch9satel_string ; ", " ; Gpgsv_ch9sataz_string ; ", " ; Gpgsv_ch9satdb_string
Locate 14 , 7 : Lcd Gpgsv_ch10satid_string ; ", " ; Gpgsv_ch10satel_string ; ", " ; Gpgsv_ch10sataz_string ; ", " ; Gpgsv_ch10satdb_string
Locate 15 , 7 : Lcd Gpgsv_ch11satid_string ; ", " ; Gpgsv_ch11satel_string ; ", " ; Gpgsv_ch11sataz_string ; ", " ; Gpgsv_ch11satdb_string
Locate 16 , 7 : Lcd Gpgsv_ch12satid_string ; ", " ; Gpgsv_ch12satel_string ; ", " ; Gpgsv_ch12sataz_string ; ", " ; Gpgsv_ch12satdb_string

End Sub
'-------------------------------------------------------------------------------



'-------------------------------------------------------------------------------
Sub Display_general_data()

   Locate 10 , 12 : Lcd Gpgga_sats_string



   If Gpgsa_mode2 = 0 Then
      Locate 10 , 21 : Lcd "No"
      Elseif Gpgsa_mode2 = 1 Then
         Locate 10 , 21 : Lcd "2D"
         Elseif Gpgsa_mode2 = 3 Then
            Locate 10 , 21 : Lcd "3D"
   End If

   Locate 3 , 12 : Lcd Gprmc_ns_string ; " " ; Gprmc_lathr_string ; " " ; Gprmc_latmin_string ; "." ; Gprmc_latsec_string ; "'" ; Gprmc_latssec_string
   Locate 4 , 12 : Lcd Gprmc_ew_string ; " " ; Gprmc_lonhr_string ; " " ; Gprmc_lonmin_string ; "." ; Gprmc_lonsec_string ; "'" ; Gprmc_lonssec_string
   Locate 5 , 12 : Lcd Str1 ; Str2 ; Str3 ; Str4 ; Str5 ; Str6
   Locate 6 , 12 : Lcd Gprmc_utchr_string ; ":" ; Gprmc_utcmin_string ; ":" ; Gprmc_utcsec_string
   Locate 7 , 12 : Lcd Gprmc_dateday_string ; "/" ; Gprmc_datemonth_string ; "/" ; Gprmc_dateyear

   If Gprmc_course < 10 Then
      Locate 8 , 12 : Lcd "00" ; Gprmc_course
      Elseif Gprmc_course < 100 Then
         Locate 8 , 12 : Lcd "0" ; Gprmc_course
      Else
         Locate 8 , 12 : Lcd Gprmc_course
   End If

   Call Display_direction()

   If Gprmc_speed < 10 Then
      Locate 9 , 12 : Lcd "00" ; Gprmc_speed ; " Km/h"
      Elseif Gprmc_speed < 100 Then
         Locate 9 , 12 : Lcd "0" ; Gprmc_speed ; " Km/h"
      Else
         Locate 9 , 12 : Lcd Gprmc_speed ; " Km/h"
   End If

   Locate 11 , 7 : Lcd Gpgsa_sat1_string
   Locate 12 , 7 : Lcd Gpgsa_sat2_string
   Locate 13 , 7 : Lcd Gpgsa_sat3_string
   Locate 14 , 7 : Lcd Gpgsa_sat4_string
   Locate 15 , 7 : Lcd Gpgsa_sat5_string
   Locate 16 , 7 : Lcd Gpgsa_sat6_string
   Locate 11 , 17 : Lcd Gpgsa_sat7_string
   Locate 12 , 17 : Lcd Gpgsa_sat8_string
   Locate 13 , 17 : Lcd Gpgsa_sat9_string
   Locate 14 , 17 : Lcd Gpgsa_sat10_string
   Locate 15 , 17 : Lcd Gpgsa_sat11_string
   Locate 16 , 17 : Lcd Gpgsa_sat12_string


   Lcdtext Locator , 147 , 114 , 2 , 0 , 0

End Sub
'-------------------------------------------------------------------------------

'------------------------------------------------------------------------------
Sub Display_direction

      If Gprmc_course => 0 And Gprmc_course < 12 Or Gprmc_course => 349 And Gprmc_course <= 360 Then
         Locate 8 , 18 : Lcd " N "
      Elseif Gprmc_course => 12 And Gprmc_course < 34 Then
         Locate 8 , 18 : Lcd "NNE"
      Elseif Gprmc_course => 34 And Gprmc_course < 56 Then
         Locate 8 , 18 : Lcd " NE"
      Elseif Gprmc_course => 56 And Gprmc_course < 79 Then
         Locate 8 , 18 : Lcd "ENE"
      Elseif Gprmc_course => 79 And Gprmc_course < 101 Then
         Locate 8 , 18 : Lcd " E "
      Elseif Gprmc_course => 101 And Gprmc_course < 124 Then
         Locate 8 , 18 : Lcd "ESE"
      Elseif Gprmc_course => 124 And Gprmc_course < 146 Then
         Locate 8 , 18 : Lcd " SE"
      Elseif Gprmc_course => 146 And Gprmc_course < 169 Then
         Locate 8 , 18 : Lcd "SSE"
      Elseif Gprmc_course => 169 And Gprmc_course < 191 Then
         Locate 8 , 18 : Lcd " S "
      Elseif Gprmc_course => 191 And Gprmc_course < 214 Then
         Locate 8 , 18 : Lcd "SSW"
      Elseif Gprmc_course => 214 And Gprmc_course < 236 Then
         Locate 8 , 18 : Lcd " SW"
      Elseif Gprmc_course => 236 And Gprmc_course < 259 Then
         Locate 8 , 18 : Lcd "WSW"
      Elseif Gprmc_course => 259 And Gprmc_course < 281 Then
         Locate 8 , 18 : Lcd " W "
      Elseif Gprmc_course => 281 And Gprmc_course < 304 Then
         Locate 8 , 18 : Lcd "WNW"
      Elseif Gprmc_course => 304 And Gprmc_course < 326 Then
         Locate 8 , 18 : Lcd " NW"
      Elseif Gprmc_course => 326 And Gprmc_course < 349 Then
         Locate 8 , 18 : Lcd "NNW"
      End If

End Sub


'-------------------------------------------------------------------------------
Sub Substract_data()

   Gprmc_lat_string = Left(gprmc_lat_string , 9)
   Gprmc_lon_string = Left(gprmc_lon_string , 10)

   Gprmc_lathr_string = Left(gprmc_lat_string , 2)
   Gprmc_latmin_string = Mid(gprmc_lat_string , 3 , 2)
   Gprmc_latsec_string = Mid(gprmc_lat_string , 6 , 2)
   Gprmc_latssec_string = Mid(gprmc_lat_string , 8 , 2)

   Gprmc_lonhr_string = Left(gprmc_lon_string , 3)
   Gprmc_lonmin_string = Mid(gprmc_lon_string , 4 , 2)
   Gprmc_lonsec_string = Mid(gprmc_lon_string , 7 , 2)
   Gprmc_lonssec_string = Mid(gprmc_lon_string , 9 , 2)

   Gprmc_dateday_string = Left(gprmc_date_string , 2)
   Gprmc_datemonth_string = Mid(gprmc_date_string , 3 , 2)
   Gprmc_dateyear_string = Mid(gprmc_date_string , 5 , 2)
   Gprmc_dateyear = Val(gprmc_dateyear_string) + 2000

   Gprmc_utchr_string = Left(gprmc_utc_string , 2)
   Gprmc_utcmin_string = Mid(gprmc_utc_string , 3 , 2)
   Gprmc_utcsec_string = Mid(gprmc_utc_string , 5 , 2)

   Gprmc_speed = Val(gprmc_speed_string)
   Gprmc_speed = Gprmc_speed * 1.852

   Gprmc_course = Val(gprmc_course_string)

   Gpgga_posfix = Val(gpgga_posfix_string)

   Gpgsa_mode2 = Val(gpgsa_mode2_string)

   If Gpgsa_sat1_string = "" Then Gpgsa_sat1_string = "--"
   If Gpgsa_sat2_string = "" Then Gpgsa_sat2_string = "--"
   If Gpgsa_sat3_string = "" Then Gpgsa_sat3_string = "--"
   If Gpgsa_sat4_string = "" Then Gpgsa_sat4_string = "--"
   If Gpgsa_sat5_string = "" Then Gpgsa_sat5_string = "--"
   If Gpgsa_sat6_string = "" Then Gpgsa_sat6_string = "--"
   If Gpgsa_sat7_string = "" Then Gpgsa_sat7_string = "--"
   If Gpgsa_sat8_string = "" Then Gpgsa_sat8_string = "--"
   If Gpgsa_sat9_string = "" Then Gpgsa_sat9_string = "--"
   If Gpgsa_sat10_string = "" Then Gpgsa_sat10_string = "--"
   If Gpgsa_sat11_string = "" Then Gpgsa_sat11_string = "--"
   If Gpgsa_sat12_string = "" Then Gpgsa_sat12_string = "--"


End Sub
'-------------------------------------------------------------------------------





'-------------------------------------------------------------------------------
Sub Maidenhead_calc()

   Td1 = Mid(gprmc_lat_string , 1 , 2)
   Tl1 = Mid(gprmc_lat_string , 3 , 5)
   Gd1 = Mid(gprmc_lon_string , 1 , 3)
   Gl1 = Mid(gprmc_lon_string , 4 , 5)

   Td = Val(td1)
   Tl = Val(tl1)
   Gd = Val(gd1)
   Gl = Val(gl1)

   Tl = Tl / 60
   Yy = Td + Tl

   Gl = Gl / 60
   Xx = Gd + Gl

   If Gprmc_ns_string = "S" Then Td = -td
   If Gprmc_ew_string = "W" Then Gd = -gd

   'Maidenheadberechnung

   A2x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   Z2n = "01234567890123456789"

   If Xx < -179.99 Or Xx > 179.99 Then End
   If Yy < -89.99 Or Yy > 89.99 Then End

   Xx = Xx + 180
   Yy = Yy + 90

   Xxx = Xx
   Yyy = Yy

   Dx = Xxx / 20
   Dy = Yyy / 10

   Dxx = Dx + 1
   Dyy = Dy + 1

   Str1 = Mid(a2x , Dxx , 1)
   Str2 = Mid(a2x , Dyy , 1)

   Xxx = Dx * 20
   Yyy = Dy * 10

   Xx = Xx - Xxx
   Yy = Yy - Yyy

   Xxxx = Xx * 100
   Yyyy = Yy * 100

   Dx = Xxxx / 200
   Dy = Yyyy / 100

   Dxx = Dx + 1
   Dyy = Dy + 1

   Str3 = Mid(z2n , Dxx , 1)
   Str4 = Mid(z2n , Dyy , 1)

   Dxx = Dx * 2
   Dyy = Dy * 1

   Xx = Xx - Dxx
   Yy = Yy - Dyy

   Xxxx = Xx * 1000
   Yyyy = Yy * 1000

   Xxx = Xxxx
   Yyy = Yyyy

   Xxxx = Xxx / 83.333333
   Yyyy = Yyy / 41.666666

   Dx = Xxxx
   Dy = Yyyy

   Dxx = Dx + 1
   Dyy = Dy + 1

   Str5 = Mid(a2x , Dxx , 1)
   Str6 = Mid(a2x , Dyy , 1)

   Xxxx = Dx * 0.08333333
   Yyyy = Dy * 0.04166666

   Xx = Xx - Xxxx
   Yy = Yy - Yyyy

   Xxxx = Xx * 10000
   Yyyy = Yy * 10000

   Dx = Xxxx / 83.33333
   Dy = Yyyy / 41.66666

   Dxx = Dx + 1
   Dyy = Dy + 1

   Str7 = Mid(z2n , Dxx , 1)
   Str8 = Mid(z2n , Dyy , 1)

   Locator = Str1 + Str2 + Str3 + Str4 + Str5 + Str6


End Sub
'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
Sub Lcdtext(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Inverse As Byte , Rotation As Byte)
Local Tempstring As String * 1 , Temp As Byte               'Dim local the variables
Local A As Byte , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As Byte
Local Row As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As Byte
Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
Local Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As Byte
If Inverse > 1 Then Inverse = 0                             'Inverse can't be greater then 1
If Rotation > 3 Then Rotation = 0                           'There are only 4 rotation's
Stringsize = Len(s) - 1                                     'Size of the text string -1 because we must start with 0
For Carcount = 0 To Stringsize                              'Loop for the numbers of caracters that must be displayed


 If Fontset = 2 Then Restore Font16x16
 If Fontset = 1 Then Restore Font6x8

 Temp = Carcount + 1                                        'Cut the text string in seperate caracters
Tempstring = Mid(s , Temp , 1)
Read Row : Read Byteseach : Read Blocksize : Read Dummy     'Read the first 4 bytes from the font file
Temp = Asc(tempstring) - 32                                 'Font files start with caracter 32
For Lus = 1 To Temp                                         'Do dummie read to point to the correct line in the fontfile
   For Count = 1 To Blocksize
    Read Pixels
   Next Count
Next Lus
Colums = Blocksize / Row                                    'Calculate the numbers of colums
Row = Row * 8                                               'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
Row = Row - 1                                               'Want to start with row=0 instead of 1
Colums = Colums - 1                                         'Same for the colums
Select Case Rotation
    Case 0                                                  '0 degrees rotation
            For Rowcount = 0 To Row Step 8                  'Loop for numbers of rows
                  A = Rowcount + Yoffset
                  For Columcount = 0 To Colums              'Loop for numbers of Colums
                      Read Pixels : If Inverse = 1 Then Toggle Pixels       'Read the byte from the file and if inverse = true then invert de byte
                      Xpos = Columcount                     'Do some calculation to get the caracter on the correct Xposition
                      Temp = Carcount * Byteseach
                      Xpos = Xpos + Temp
                      Xpos = Xpos + Xoffset
                          For Pixelcount = 0 To 7           'Loop for 8 pixels to be set or not
                             Ypos = A + Pixelcount          'Each pixel on his own spot
                             Pixel = Pixels.0               'Set the pixel (or not)
                             Pset Xpos , Ypos , Pixel       'Finaly we can set the pixel
                             Shift Pixels , Right           'Shift the byte 1 bit to the right so the next pixel comes availible
                          Next Pixel
                  Next Columcount
            Next Rowcount
    Case 1                                                  '90 degrees rotation
            For Rowcount = Row To 0 Step -8                 'Loop is now counting down
                  A = Rowcount + Xoffset
                  A = A - 15                                'Correction to set Xpos on Xoffset with rotation
                  For Columcount = 0 To Colums
                      Read Pixels : If Inverse = 1 Then Toggle Pixels
                      Xpos = Columcount
                      Temp = Carcount * Byteseach
                      Xpos = Xpos + Temp
                      Xpos = Xpos + Yoffset                 'We want that Xoffset is still Xoffset, so we need here the change from x to y
                             For Pixelcount = 7 To 0 Step -1
                                Ypos = A + Pixelcount
                                Pixel = Pixels.0
                                Pset Ypos , Xpos , Pixel
                                Shift Pixels , Right
                             Next Pixel
                  Next Columcount
            Next Rowcount
    Case 2                                                  '180 degrees rotation
            For Rowcount = Row To 0 Step -8
                  A = Rowcount + Yoffset
                  A = A - 7                                 'Correction to set Xpos on Xoffset with rotation
                  For Columcount = Colums To 0 Step -1
                      Read Pixels : If Inverse = 1 Then Toggle Pixels
                      Xpos = Columcount
                      Temp = Carcount * Byteseach
                      Xpos = Xpos - Temp
                      Xpos = Xpos - 8                       'Correction to set Xpos on Xoffset with rotation
                      Xpos = Xpos + Xoffset
                          For Pixelcount = 7 To 0 Step -1
                             Ypos = A + Pixelcount
                             Pixel = Pixels.0
                             Pset Xpos , Ypos , Pixel
                             Shift Pixels , Right
                          Next Pixel
                  Next Columcount
            Next Rowcount
    Case 3                                                  '270 degrees rotation
            For Rowcount = 0 To Row Step 8
                  A = Rowcount + Xoffset
                    For Columcount = Colums To 0 Step -1
                      Read Pixels : If Inverse = 1 Then Toggle Pixels
                      Xpos = Columcount
                      Temp = Carcount * Byteseach
                      Xpos = Xpos - Temp
                      Xpos = Xpos - 8                       'Correction to set Xpos on Xoffset with rotation
                      Xpos = Xpos + Yoffset
                             For Pixelcount = 0 To 7
                                Ypos = A + Pixelcount
                                Pixel = Pixels.0
                                Pset Ypos , Xpos , Pixel
                                Shift Pixels , Right
                             Next Pixel
                  Next Columcount
            Next Rowcount
End Select
Next Carcount
End Sub                                                     'End of this amazing subroutine
'-------------------------------------------------------------------------------




$include "Font16x16.font"                                   'If you don't need the files in your program, don't include them,
$include "Font6x8.font"








Rs232_isr:


Buffer = Ischarwaiting()

   If Buffer = 1 Then                                       'we got something
      Buffer = Waitkey()                                    'get it


      If Buffer = "$" Then

         Buffer_str = ""

         Do
            Buffer = Waitkey()
            Buffer_str = Buffer_str + Chr(buffer)
         Loop Until Buffer = ","

         Sentence_header = Buffer_str

         If Sentence_header = "GPGSA," Then

         Portd.4 = 1

' $GPGSA,A,3,07,02,26,27,09,04,15,,,,,1.8,1.0,1.5*33
'    |   | |  |  |  |  |  |  |  |   |  |   |   |   |______________________ Checksum
'    |   | |  |  |  |  |  |  |  |   |  |   |   |__________________________ Vertical Dilution of Precision          : For example 1.5
'    |   | |  |  |  |  |  |  |  |   |  |   |______________________________ Horizontal Dilution of Precision        : For example 1.0
'    |   | |  |  |  |  |  |  |  |   |  |__________________________________ Position Dilution of Precision          : For example 1.8
'    |   | |  |  |  |  |  |  |  |   |_____________________________________ Sat Channels 8....12
'    |   | |  |  |  |  |  |  |  |_________________________________________ Sat Channel 7                           : For example Sat 15 used on channel 7
'    |   | |  |  |  |  |  |  |____________________________________________ Sat Channel 6                           : For example Sat 04 used on channel 6
'    |   | |  |  |  |  |  |_______________________________________________ Sat Channel 5                           : For example Sat 09 used on channel 5
'    |   | |  |  |  |  |__________________________________________________ Sat Channel 4                           : For example Sat 27 used on channel 4
'    |   | |  |  |  |_____________________________________________________ Sat Channel 3                           : For example Sat 26 used on channel 3
'    |   | |  |  |________________________________________________________ Sat Channel 2                           : For example Sat 02 used on channel 2
'    |   | |  |___________________________________________________________ Sat Channel 1                           : For example Sat 07 used on channel 1
'    |   | |______________________________________________________________ Mode 2                                  : For example 1= No Fix, 2= 2D Fix, 3= 3D Fix
'    |   |________________________________________________________________ Mode 1                                  : For example M=Manual, A=2D Automatic
'    |____________________________________________________________________ Message header ($GP)                    : For example ($GP)GSA = GNSS DOP and Active Satellites

            Call Nmea_parse()

            Gpgsa_mode1_string = Buffer_str
            Length = Len(gpgsa_mode1_string) - 1
            Gpgsa_mode1_string = Left(gpgsa_mode1_string , Length)

            Call Nmea_parse()

            Gpgsa_mode2_string = Buffer_str
            Length = Len(gpgsa_mode2_string) - 1
            Gpgsa_mode2_string = Left(gpgsa_mode2_string , Length)

            Call Nmea_parse()

            Gpgsa_sat1_string = Buffer_str
            Length = Len(gpgsa_sat1_string) - 1
            Gpgsa_sat1_string = Left(gpgsa_sat1_string , Length)

            Call Nmea_parse()

            Gpgsa_sat2_string = Buffer_str
            Length = Len(gpgsa_sat2_string) - 1
            Gpgsa_sat2_string = Left(gpgsa_sat2_string , Length)

            Call Nmea_parse()

            Gpgsa_sat3_string = Buffer_str
            Length = Len(gpgsa_sat3_string) - 1
            Gpgsa_sat3_string = Left(gpgsa_sat3_string , Length)

            Call Nmea_parse()

            Gpgsa_sat4_string = Buffer_str
            Length = Len(gpgsa_sat4_string) - 1
            Gpgsa_sat4_string = Left(gpgsa_sat4_string , Length)

            Call Nmea_parse()

            Gpgsa_sat5_string = Buffer_str
            Length = Len(gpgsa_sat5_string) - 1
            Gpgsa_sat5_string = Left(gpgsa_sat5_string , Length)

            Call Nmea_parse()

            Gpgsa_sat6_string = Buffer_str
            Length = Len(gpgsa_sat6_string) - 1
            Gpgsa_sat6_string = Left(gpgsa_sat6_string , Length)

            Call Nmea_parse()

            Gpgsa_sat7_string = Buffer_str
            Length = Len(gpgsa_sat7_string) - 1
            Gpgsa_sat7_string = Left(gpgsa_sat7_string , Length)

            Call Nmea_parse()

            Gpgsa_sat8_string = Buffer_str
            Length = Len(gpgsa_sat8_string) - 1
            Gpgsa_sat8_string = Left(gpgsa_sat8_string , Length)

            Call Nmea_parse()

            Gpgsa_sat9_string = Buffer_str
            Length = Len(gpgsa_sat9_string) - 1
            Gpgsa_sat9_string = Left(gpgsa_sat9_string , Length)

            Call Nmea_parse()

            Gpgsa_sat10_string = Buffer_str
            Length = Len(gpgsa_sat10_string) - 1
            Gpgsa_sat10_string = Left(gpgsa_sat10_string , Length)

            Call Nmea_parse()

            Gpgsa_sat11_string = Buffer_str
            Length = Len(gpgsa_sat11_string) - 1
            Gpgsa_sat11_string = Left(gpgsa_sat11_string , Length)

            Call Nmea_parse()

            Gpgsa_sat12_string = Buffer_str
            Length = Len(gpgsa_sat12_string) - 1
            Gpgsa_sat12_string = Left(gpgsa_sat12_string , Length)

            Portd.4 = 0

         End If

         If Sentence_header = "GPGGA," Then

         Portd.4 = 1

' $GPCGA,hhmmsss.ss,llll.ll,a,yyyyy.yy,a,1,07,a.a,b.b,M,c.c,M,d.d,0000*hh
'    |       |         |    |    |     | |  |  |   |  |  |  |  |   |    |_ Checksum
'    |       |         |    |    |     | |  |  |   |  |  |  |  |   |______ Diff. Ref. Station ID
'    |       |         |    |    |     | |  |  |   |  |  |  |  |__________ Age of Diff. Correction, second, Null fields when DGPS is not used
'    |       |         |    |    |     | |  |  |   |  |  |  |_____________ Units, M, meters                        : For example M
'    |       |         |    |    |     | |  |  |   |  |  |________________ Geoid Separation, meters                : For example 9.0
'    |       |         |    |    |     | |  |  |   |  |___________________ Units, M, meters                        : For example M
'    |       |         |    |    |     | |  |  |   |______________________ MSL Altitude, meters                    : For example 9.0
'    |       |         |    |    |     | |  |  |__________________________ Horizontal dillusion of precisin        : For example 1.0
'    |       |         |    |    |     | |  |_____________________________ Satellites Used                         : For example 07
'    |       |         |    |    |     | |________________________________ Position Fix Indicator                  : For example 0=Fix not available or invalid, 1=GPS SPS Mode, fix valid, 2=Differential GPS, SPS Mode, fix valid, 3-5= not supported, 6=Dead Reckoning Mode, fix valid
'    |       |         |    |    |     |__________________________________ East/West indicator                     : For example E or W
'    |       |         |    |    |________________________________________ Longtitude, dddmm.mmmm                  : For example 00505.0505 (005.05.0505)
'    |       |         |    |_____________________________________________ North/South indicator                   : For example N or S
'    |       |         |__________________________________________________ Latitude indicator                      : For example 5239.1920 (52.39.1920)
'    |       |____________________________________________________________ Time, Hours,Minutes,Seconds,Subseconds  : For example 180442.453
'    |____________________________________________________________________ Message header ($GP)                    : For example ($GP)CGA = Global Positioning System Fixed Data

            Call Nmea_parse()

            Gpgga_utc_string = Buffer_str
            Length = Len(gpgga_utc_string) - 1
            Gpgga_utc_string = Left(gpgga_utc_string , Length)

            Call Nmea_parse()

            Gpgga_lat_string = Buffer_str
            Length = Len(gpgga_lat_string) - 1
            Gpgga_lat_string = Left(gpgga_lat_string , Length)

            Call Nmea_parse()

            Gpgga_ns_string = Buffer_str
            Length = Len(gpgga_ns_string) - 1
            Gpgga_ns_string = Left(gpgga_ns_string , Length)

            Call Nmea_parse()

            Gpgga_lon_string = Buffer_str
            Length = Len(gpgga_lon_string) - 1
            Gpgga_lon_string = Left(gpgga_lon_string , Length)

            Call Nmea_parse()

            Gpgga_ew_string = Buffer_str
            Length = Len(gpgga_ew_string) - 1
            Gpgga_ew_string = Left(gpgga_ew_string , Length)

            Call Nmea_parse()

            Gpgga_posfix_string = Buffer_str
            Length = Len(gpgga_posfix_string) - 1
            Gpgga_posfix_string = Left(gpgga_posfix_string , Length)

            Call Nmea_parse()

            Gpgga_sats_string = Buffer_str
            Length = Len(gpgga_sats_string) - 1
            Gpgga_sats_string = Left(gpgga_sats_string , Length)

            Portd.4 = 0

         End If


         If Sentence_header = "GPRMC," Then

         Portd.4 = 1

' $GPRMC,hhmmsss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh
'    |       |      |    |    |    |     |  |   |     |    |  |  |_ Checksum
'    |       |      |    |    |    |     |  |   |     |    |  |____ E or W
'    |       |      |    |    |    |     |  |   |     |    |_______ Magnetic variation, Degrees             : For example 156.4
'    |       |      |    |    |    |     |  |   |     |____________ Date, day,month,year                    : For example 150496(15 april 1996)
'    |       |      |    |    |    |     |  |   |__________________ Course over ground, degrees             : For example 340.5
'    |       |      |    |    |    |     |  |______________________ Speed over ground, knots                : For example 0.13
'    |       |      |    |    |    |     |_________________________ East/West indicator                     : For example E or W
'    |       |      |    |    |    |_______________________________ Longtitude, dddmm.mmmm                  : For example 00505.0505 (005.05.0505)
'    |       |      |    |    |____________________________________ North/South indicator                   : For example N or S
'    |       |      |    |_________________________________________ Latitude indicator                      : For example 5239.1920 (52.39.1920)
'    |       |      |______________________________________________ Data Validation indicator               : For example A=Data valid, V=Data invalid
'    |       |_____________________________________________________ Time, Hours,Minutes,Seconds,Subseconds  : For example 180442.453
'    |_____________________________________________________________ Message header ($GP)                    : For example ($GP)RMC = Recommended Minimum Specific GNSS Data

            Call Nmea_parse()

            Gprmc_utc_string = Buffer_str
            Length = Len(gprmc_utc_string) - 1
            Gprmc_utc_string = Left(gprmc_utc_string , Length)

            Call Nmea_parse()

            Gprmc_status_string = Buffer_str
            Length = Len(gprmc_status_string) - 1
            Gprmc_status_string = Left(gprmc_status_string , Length)

            Call Nmea_parse()

            Gprmc_lat_string = Buffer_str
            Length = Len(gprmc_lat_string) - 1
            Gprmc_lat_string = Left(gprmc_lat_string , Length)

            Call Nmea_parse()

            Gprmc_ns_string = Buffer_str
            Length = Len(gprmc_ns_string) - 1
            Gprmc_ns_string = Left(gprmc_ns_string , Length)

            Call Nmea_parse()

            Gprmc_lon_string = Buffer_str
            Length = Len(gprmc_lon_string) - 1
            Gprmc_lon_string = Left(gprmc_lon_string , Length)

            Call Nmea_parse()

            Gprmc_ew_string = Buffer_str
            Length = Len(gprmc_ew_string) - 1
            Gprmc_ew_string = Left(gprmc_ew_string , Length)

            Call Nmea_parse()

            Gprmc_speed_string = Buffer_str
            Length = Len(gprmc_speed_string) - 1
            Gprmc_speed_string = Left(gprmc_speed_string , Length)

            Call Nmea_parse()

            Gprmc_course_string = Buffer_str
            Length = Len(gprmc_course_string) - 1
            Gprmc_course_string = Left(gprmc_course_string , Length)

            Call Nmea_parse()

            Gprmc_date_string = Buffer_str
            Length = Len(gprmc_date_string) - 1
            Gprmc_date_string = Left(gprmc_date_string , Length)

            Portd.4 = 0

         End If
         '----------------------------------------------------------------------

         If Sentence_header = "GPGSV," Then

            Portd.4 = 1

            Call Nmea_parse()

            Gpgsv_totalmessages_string = Buffer_str
            Length = Len(gpgsv_totalmessages_string) - 1
            Gpgsv_totalmessages_string = Left(gpgsv_totalmessages_string , Length)

            Total_messages = Val(gpgsv_totalmessages_string)

            Call Nmea_parse()

            Gpgsv_currentmessage_string = Buffer_str
            Length = Len(gpgsv_currentmessage_string) - 1
            Gpgsv_currentmessage_string = Left(gpgsv_currentmessage_string , Length)

            Current_message = Val(gpgsv_currentmessage_string)

            Call Nmea_parse()

            Gpgsv_sats_string = Buffer_str
            Length = Len(gpgsv_sats_string) - 1
            Gpgsv_sats_string = Left(gpgsv_sats_string , Length)

            If Current_message = 1 Then

               If Val(gpgsv_sats_string) > 0 Then

                  Call Nmea_parse()

                  Gpgsv_ch1satid_string = Buffer_str
                  Length = Len(gpgsv_ch1satid_string) - 1
                  Gpgsv_ch1satid_string = Left(gpgsv_ch1satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch1satel_string = Buffer_str
                  Length = Len(gpgsv_ch1satel_string) - 1
                  Gpgsv_ch1satel_string = Left(gpgsv_ch1satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch1sataz_string = Buffer_str
                  Length = Len(gpgsv_ch1sataz_string) - 1
                  Gpgsv_ch1sataz_string = Left(gpgsv_ch1sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch1satdb_string = Buffer_str
                  Length = Len(gpgsv_ch1satdb_string) - 1
                  Gpgsv_ch1satdb_string = Left(gpgsv_ch1satdb_string , Length)

               End If

               If Val(gpgsv_sats_string) > 1 Then

                  Call Nmea_parse()

                  Gpgsv_ch2satid_string = Buffer_str
                  Length = Len(gpgsv_ch2satid_string) - 1
                  Gpgsv_ch2satid_string = Left(gpgsv_ch2satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch2satel_string = Buffer_str
                  Length = Len(gpgsv_ch2satel_string) - 1
                  Gpgsv_ch2satel_string = Left(gpgsv_ch2satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch2sataz_string = Buffer_str
                  Length = Len(gpgsv_ch2sataz_string) - 1
                  Gpgsv_ch2sataz_string = Left(gpgsv_ch2sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch2satdb_string = Buffer_str
                  Length = Len(gpgsv_ch2satdb_string) - 1
                  Gpgsv_ch2satdb_string = Left(gpgsv_ch2satdb_string , Length)

                  Call Nmea_parse()

               End If

               If Val(gpgsv_sats_string) > 2 Then

                  Gpgsv_ch3satid_string = Buffer_str
                  Length = Len(gpgsv_ch3satid_string) - 1
                  Gpgsv_ch3satid_string = Left(gpgsv_ch3satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch3satel_string = Buffer_str
                  Length = Len(gpgsv_ch3satel_string) - 1
                  Gpgsv_ch3satel_string = Left(gpgsv_ch3satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch3sataz_string = Buffer_str
                  Length = Len(gpgsv_ch3sataz_string) - 1
                  Gpgsv_ch3sataz_string = Left(gpgsv_ch3sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch3satdb_string = Buffer_str
                  Length = Len(gpgsv_ch3satdb_string) - 1
                  Gpgsv_ch3satdb_string = Left(gpgsv_ch3satdb_string , Length)

                  Call Nmea_parse()

               End If

               If Val(gpgsv_sats_string) > 3 Then

                  Gpgsv_ch4satid_string = Buffer_str
                  Length = Len(gpgsv_ch4satid_string) - 1
                  Gpgsv_ch4satid_string = Left(gpgsv_ch4satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch4satel_string = Buffer_str
                  Length = Len(gpgsv_ch4satel_string) - 1
                  Gpgsv_ch4satel_string = Left(gpgsv_ch4satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch4sataz_string = Buffer_str
                  Length = Len(gpgsv_ch4sataz_string) - 1
                  Gpgsv_ch4sataz_string = Left(gpgsv_ch4sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch4satdb_string = Buffer_str
                  Length = Len(gpgsv_ch4satdb_string) - 1
                  Gpgsv_ch4satdb_string = Left(gpgsv_ch4satdb_string , Length)

               End If

            Elseif Current_message = 2 Then

               If Val(gpgsv_sats_string) > 4 Then

                  Call Nmea_parse()

                  Gpgsv_ch5satid_string = Buffer_str
                  Length = Len(gpgsv_ch5satid_string) - 1
                  Gpgsv_ch5satid_string = Left(gpgsv_ch5satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch5satel_string = Buffer_str
                  Length = Len(gpgsv_ch5satel_string) - 1
                  Gpgsv_ch5satel_string = Left(gpgsv_ch5satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch5sataz_string = Buffer_str
                  Length = Len(gpgsv_ch5sataz_string) - 1
                  Gpgsv_ch5sataz_string = Left(gpgsv_ch5sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch5satdb_string = Buffer_str
                  Length = Len(gpgsv_ch5satdb_string) - 1
                  Gpgsv_ch5satdb_string = Left(gpgsv_ch5satdb_string , Length)

               End If

               If Val(gpgsv_sats_string) > 5 Then

                  Call Nmea_parse()

                  Gpgsv_ch6satid_string = Buffer_str
                  Length = Len(gpgsv_ch6satid_string) - 1
                  Gpgsv_ch6satid_string = Left(gpgsv_ch6satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch6satel_string = Buffer_str
                  Length = Len(gpgsv_ch6satel_string) - 1
                  Gpgsv_ch6satel_string = Left(gpgsv_ch6satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch6sataz_string = Buffer_str
                  Length = Len(gpgsv_ch6sataz_string) - 1
                  Gpgsv_ch6sataz_string = Left(gpgsv_ch6sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch6satdb_string = Buffer_str
                  Length = Len(gpgsv_ch6satdb_string) - 1
                  Gpgsv_ch6satdb_string = Left(gpgsv_ch6satdb_string , Length)

               End If

               If Val(gpgsv_sats_string) > 6 Then

                  Call Nmea_parse()

                  Gpgsv_ch7satid_string = Buffer_str
                  Length = Len(gpgsv_ch7satid_string) - 1
                  Gpgsv_ch7satid_string = Left(gpgsv_ch7satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch7satel_string = Buffer_str
                  Length = Len(gpgsv_ch7satel_string) - 1
                  Gpgsv_ch7satel_string = Left(gpgsv_ch7satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch7sataz_string = Buffer_str
                  Length = Len(gpgsv_ch7sataz_string) - 1
                  Gpgsv_ch7sataz_string = Left(gpgsv_ch7sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch7satdb_string = Buffer_str
                  Length = Len(gpgsv_ch7satdb_string) - 1
                  Gpgsv_ch7satdb_string = Left(gpgsv_ch7satdb_string , Length)

               End If

               If Val(gpgsv_sats_string) > 7 Then

                  Call Nmea_parse()

                  Gpgsv_ch8satid_string = Buffer_str
                  Length = Len(gpgsv_ch8satid_string) - 1
                  Gpgsv_ch8satid_string = Left(gpgsv_ch8satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch8satel_string = Buffer_str
                  Length = Len(gpgsv_ch8satel_string) - 1
                  Gpgsv_ch8satel_string = Left(gpgsv_ch8satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch8sataz_string = Buffer_str
                  Length = Len(gpgsv_ch8sataz_string) - 1
                  Gpgsv_ch8sataz_string = Left(gpgsv_ch8sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch8satdb_string = Buffer_str
                  Length = Len(gpgsv_ch8satdb_string) - 1
                  Gpgsv_ch8satdb_string = Left(gpgsv_ch8satdb_string , Length)

               End If

            Elseif Current_message = 3 Then

               If Val(gpgsv_sats_string) > 8 Then

                  Call Nmea_parse()

                  Gpgsv_ch9satid_string = Buffer_str
                  Length = Len(gpgsv_ch9satid_string) - 1
                  Gpgsv_ch9satid_string = Left(gpgsv_ch9satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch9satel_string = Buffer_str
                  Length = Len(gpgsv_ch9satel_string) - 1
                  Gpgsv_ch9satel_string = Left(gpgsv_ch9satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch9sataz_string = Buffer_str
                  Length = Len(gpgsv_ch9sataz_string) - 1
                  Gpgsv_ch9sataz_string = Left(gpgsv_ch9sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch9satdb_string = Buffer_str
                  Length = Len(gpgsv_ch9satdb_string) - 1
                  Gpgsv_ch9satdb_string = Left(gpgsv_ch9satdb_string , Length)

               End If

               If Val(gpgsv_sats_string) > 9 Then

                  Call Nmea_parse()

                  Gpgsv_ch10satid_string = Buffer_str
                  Length = Len(gpgsv_ch10satid_string) - 1
                  Gpgsv_ch10satid_string = Left(gpgsv_ch10satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch10satel_string = Buffer_str
                  Length = Len(gpgsv_ch10satel_string) - 1
                  Gpgsv_ch10satel_string = Left(gpgsv_ch10satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch10sataz_string = Buffer_str
                  Length = Len(gpgsv_ch10sataz_string) - 1
                  Gpgsv_ch10sataz_string = Left(gpgsv_ch10sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch10satdb_string = Buffer_str
                  Length = Len(gpgsv_ch10satdb_string) - 1
                  Gpgsv_ch10satdb_string = Left(gpgsv_ch10satdb_string , Length)

               End If

               If Val(gpgsv_sats_string) > 10 Then

                  Call Nmea_parse()

                  Gpgsv_ch11satid_string = Buffer_str
                  Length = Len(gpgsv_ch11satid_string) - 1
                  Gpgsv_ch11satid_string = Left(gpgsv_ch11satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch11satel_string = Buffer_str
                  Length = Len(gpgsv_ch11satel_string) - 1
                  Gpgsv_ch11satel_string = Left(gpgsv_ch11satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch11sataz_string = Buffer_str
                  Length = Len(gpgsv_ch11sataz_string) - 1
                  Gpgsv_ch11sataz_string = Left(gpgsv_ch11sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch11satdb_string = Buffer_str
                  Length = Len(gpgsv_ch11satdb_string) - 1
                  Gpgsv_ch11satdb_string = Left(gpgsv_ch11satdb_string , Length)

               End If

               If Val(gpgsv_sats_string) > 11 Then

                  Call Nmea_parse()

                  Gpgsv_ch12satid_string = Buffer_str
                  Length = Len(gpgsv_ch12satid_string) - 1
                  Gpgsv_ch12satid_string = Left(gpgsv_ch12satid_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch12satel_string = Buffer_str
                  Length = Len(gpgsv_ch12satel_string) - 1
                  Gpgsv_ch12satel_string = Left(gpgsv_ch12satel_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch12sataz_string = Buffer_str
                  Length = Len(gpgsv_ch12sataz_string) - 1
                  Gpgsv_ch12sataz_string = Left(gpgsv_ch12sataz_string , Length)

                  Call Nmea_parse()

                  Gpgsv_ch12satdb_string = Buffer_str
                  Length = Len(gpgsv_ch12satdb_string) - 1
                  Gpgsv_ch12satdb_string = Left(gpgsv_ch12satdb_string , Length)

               End If

Pleite:


          End If

          Portd.4 = 0

       End If

   End If

End If

Return


Sub Nmea_parse()

            Buffer_str = ""

            Do
               Buffer = Waitkey()
               Buffer_str = Buffer_str + Chr(buffer)
            Loop Until Buffer = "," Or Buffer = "*"

            If Buffer_str = "," Then Buffer_str = ""

            If Buffer_str = "*" Then Buffer_str = ""

End Sub


Globe:

$bgf "globebig.bgf"

Dankje voor jullie reactie en uiteraard heb ik eerst op google gekeken;) Het mcs forum is wel handig denk ik.

@PD5DJ
Wat een lange code zeg:P

Het idee was namelijk om een aantal drukknoppen te gebruiken, een voor de lengtegraad, een voor de breedtegraad etc.

Hea balen, ondanks het mcs forum kan ik niet ontdekken hoe ik de GPS zinnen kan inlezen.

als ik in bascom het commando 'config serialinput' doe dan krijg ik een foutmelding. ik neem aan dat dit commando van belang is?

of is het een idee om in een ander programma te programmeren?

gr.