Hi,
ich spiele derzeit mit einem PA6C GPS rum und habe gestern meine Auswertung geschrieben. Da es für meine Verwendung (GPS Tracker) wichtig ist dass die Daten auch wirklich richtig sind will ich die Checksumme überprüfen. Soweit so gut....in der Theorie. Mein Onlinerechner und mein Taschenrechner bekommen beide die gleiche Checksumme raus, nur Bascom macht anscheinend irgendwo etwas anders.
Hier mal der Codeausschnitt, der das ganze Ausrechnen soll:
CodeBox BascomAVR
Ich habe das ganze auch ohne die Bascom-XOR Routine per Hand gemacht. Leider mit dem selben Ergebnis. Im Anhang seht ihr die Ausgabe in Docklight und den Datensatz aus dem die (falsche) CRC generiert wurde. Uni-- ist die CRC die am Ende des Datenpakets mitgeschickt wurde. Davor ist meine errechnete CRC
Ich hoffe jemand von euch weiß Rat, ich zweifle langsam an meinem Rechner
EDIT: Online Checksummenrechner: http://www.hhhh.org/wiml/proj/nmeaxor.html
ich spiele derzeit mit einem PA6C GPS rum und habe gestern meine Auswertung geschrieben. Da es für meine Verwendung (GPS Tracker) wichtig ist dass die Daten auch wirklich richtig sind will ich die Checksumme überprüfen. Soweit so gut....in der Theorie. Mein Onlinerechner und mein Taschenrechner bekommen beide die gleiche Checksumme raus, nur Bascom macht anscheinend irgendwo etwas anders.
Hier mal der Codeausschnitt, der das ganze Ausrechnen soll:
CodeBox BascomAVR
$regfile = "m328def.dat" $crystal = 8000000 $hwstack = 100 $swstack = 100 $framesize = 120 $baud = 9600 Debug On '## IO-Deklaration ## Cs Alias Portb.0 En_v_lipo Alias Portc.1 Led_o Alias Portc.3 Led_u Alias Portd.2 Dio1 Alias Portd.4 En_gps Alias Portb.2 Config Cs = Output Config En_v_lipo = Output Config Led_o = Output Config Led_u = Output Config Dio1 = Input Config En_gps = Output '## Variablen ## Dim Empfangen As String * 80 Dim Startbyte As Byte Dim Gps_freigabe As Bit Dim Ext_power As Bit Dim Auswertung As Bit Dim Universalstring As String * 80 Dim I As Byte Dim Stellen As Byte Dim Anfang As Byte Dim Ende As Byte Dim Sats As Byte Dim Hdop As Single Dim Altitude As Single Dim Ew As Bit Dim Ns As Bit Dim Satfix As Byte Dim Latstring As String * 8 Dim Longstring As String * 9 Dim Latitude As Double Dim Longtitude As Double Dim Crc_cnt As Byte Dim Crc As Byte Dim Crc_s As String * 1 '## ADC Init ## Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc '## SPI Init ## Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 0 '## HW-Voreinstellungen ## Spiinit Enable Interrupts Cs = 1 '## Variablen init ## Gps_freigabe = 1 Ext_power = 1 '## Debugmeldung ## Print "HW-Init beendet" '******************************************************************************* ' MAIN-Loop '******************************************************************************* 'GPS einstellen Print "$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29" 'GGA Protokoll 'Print "$PMTK314,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28" 'GGA und VTG Protokoll Do If Gps_freigabe = 1 Then If Ext_power = 1 Then 'Kein Powersave, also LED an Led_o = 1 End If Do 'Warten auf Paketanfang Startbyte = Waitkey() Loop Until Startbyte = "$" Input Empfangen Noecho 'String einlesen (ohne dollar) Universalstring = "GPGGA" If Universalstring = Left(empfangen , 5) Then 'Falls es ein GPGGA String ist 'Checksumme bilden I = Len(empfangen) - 3 Universalstring = Mid(empfangen , 1 , I) Print Universalstring Crc = Checksumxor(universalstring) Crc = Hex(crc) Universalstring = Right(empfangen , 2) Print Crc Print "uni--" ; Universalstring '### hier kommen dann noch die ellenlange auswertung usw.
Ich habe das ganze auch ohne die Bascom-XOR Routine per Hand gemacht. Leider mit dem selben Ergebnis. Im Anhang seht ihr die Ausgabe in Docklight und den Datensatz aus dem die (falsche) CRC generiert wurde. Uni-- ist die CRC die am Ende des Datenpakets mitgeschickt wurde. Davor ist meine errechnete CRC
Ich hoffe jemand von euch weiß Rat, ich zweifle langsam an meinem Rechner
EDIT: Online Checksummenrechner: http://www.hhhh.org/wiml/proj/nmeaxor.html
Zuletzt bearbeitet: