Hallo,
ich habe ein Problem. Es sollen Daten von einem GPS Sensor gelesen
werden. Speziell brauche ich nur die GPRMC und GPGGA Strings. Der Sensor
sendet im NMEA format.
Allerdings wird irgendwie die Hälfte vom Empfang verschluckt, manchmal
funktioniert es auch. Es scheint irgendein Timingproblem zu sein.
Hier ist der Code:
Die Ausgabe:
Es wird immer nur der GPGGA-Teil aufgefangen. Hat evtl jemand eine Idee
warum?
Danke
ich habe ein Problem. Es sollen Daten von einem GPS Sensor gelesen
werden. Speziell brauche ich nur die GPRMC und GPGGA Strings. Der Sensor
sendet im NMEA format.
Allerdings wird irgendwie die Hälfte vom Empfang verschluckt, manchmal
funktioniert es auch. Es scheint irgendein Timingproblem zu sein.
Hier ist der Code:
Code:
$regfile = "m644pdef.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 512
$framesize = 128
$baud = 38400
$baud1 = 9600
' ************* GPS - TEIL ********************
Open "COM2:" For Binary As #2
Config Serialin = Buffered , Size = 100 , Bytematch = 10
Config Serialin1 = Buffered , Size = 100
Config Portb.6 = Input
Const Id_str_lg = 6 ' Länge des Identifiers
Dim Id_str As String * Id_str_lg ' ID String
Dim Buff_str_ovrl As String * 99 At _rs232inbuf0 Overlay ' Einen String über den SerialIn Puffer legen
Dim Wr_ctr As Byte ' Schreibzähler
Dim Wr_b As Byte
Dim Mc As String * 100 ' GPS MC - Teil
Dim Ga As String * 100 ' GPS GA - Teil
Dim Writestring As String * 30
Dim Length As Integer
Dim B_cpd As Byte ' Hilfsvariable zum Kopieren der Bytes des Stringoverlays
Dim C_st As Byte
Mc = ""
Ga = ""
' ********************************************
Enable Interrupts
Do
Loop
End
'Daten vom Buffer auslesen
Serial0charmatch:
Pushall
B_cpd = _rs_bufcountr0 - 2 ' Anzahl zu kopierender Zeichen des Pufferstrings
C_st = _rs_head_ptr0 + 1 ' Startkopierposition im Pufferstring
Id_str = Mid(buff_str_ovrl , C_st , Id_str_lg) ' ID String holen, ab 2tem Zeichen, ohne $
Print #2 , Buff_str_ovrl
If Id_str <> "$GPGGA" And Id_str <> "$GPRMC" Then
Clear Serialin
Popall
Return
End If
If Id_str = "$GPRMC" And Mc = "" Then
Mc = Mid(buff_str_ovrl , C_st , B_cpd) ' Puffer in den String kopieren, ohne $, ohne CR
End If
If Id_str = "$GPGGA" And Ga = "" Then
Ga = Mid(buff_str_ovrl , C_st , B_cpd) ' Puffer in den String kopieren, ohne $, ohne CR
End If
Clear Serialin
Popall
Return
Die Ausgabe:
Code:
<\n>$GPGGA,205133.560,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*46<\r>
<\n><\r>
<\n>$G33.560,V,8960.0000,N,00000.0000,E,0.00,0.00,190110,,,N*7C<\r>
<\n>M,,*46<\r>
<\n><\r>
<\n>$GPGGA,205133.760,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*44<\r>
<\n><\r>
<\n>$G33.760,V,8960.0000,N,00000.0000,E,0.00,0.00,190110,,,N*7E<\r>
<\n>M,,*44<\r>
<\n><\r>
<\n>$GPGGA,205133.961,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*4B<\r>
<\n><\r>
<\n>$G33.961,V,8960.0000,N,00000.0000,E,0.00,0.00,190110,,,N*71<\r>
<\n>M,,*4B<\r>
<\n><\r>
<\n>$GPGGA,205134.160,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*45<\r>
Es wird immer nur der GPGGA-Teil aufgefangen. Hat evtl jemand eine Idee
warum?
Danke