GPS Daten empfangen und wieder senden

Gast #927052
Lesenswert?
• ▲
▼
Hallo,

ich empfange NMEA Daten von einem GPS-Modul und parse diese.
Gleichzeitig werden die NMEA Daten wieder an die UART ausgegeben.
Meine Lösung sieht so aus:
1
#define UART0_TX_BUFFER_SIZE      0x60
2
#define UART0_RX_BUFFER_SIZE      0x60
3
#define UART1_TX_BUFFER_SIZE      0x10
4
#define UART1_RX_BUFFER_SIZE      0x10
5

6
uartSetRxHandler(0, gpsRxHandler);//Handler der RX Daten
7

8

9
void gpsRxHandler(u08 charIn)
10
{
11
  static u08 j=0,startflag=0;
12

13
  if  (systemState & SYSTEM_NMEA_OUTPUT)
14
  {
15
    uartAddToTxBuffer(0, charIn);
16
    txCharCounter++;    
17
  }
18
  if ((varioState & SYSTEM_NMEA_PARSER) == 0)
19
  {
20
    startflag = 0;
21
    j = 0;
22
  }
23
  else
24
  {
25
    if  (startflag)
26
    {
27
      if  (( charIn != '\r') && ( charIn != '\n') && (j < NMEA_BUFFERSIZE))
28
      {
29
        NmeaSentence[j++] = charIn;  //Fill String
30
      }
31
      else
32
      {
33
        NmeaSentence[j] = 0;    //String complete
34
        j = 0;
35
        startflag = 0;
36
        if  (!strncmp(NmeaSentence, "GPGGA", 5))
37
        {
38
          nmeaProcessGPGGA(NmeaSentence);
39
        }
40
        
41
          else
42
          {
43
            if  (!strncmp(NmeaSentence, "GPGSA", 5))
44
            {
45
              nmeaProcessGPGSA(NmeaSentence);
46
            }
47
            else
48
            {
49
              if  (!strncmp(NmeaSentence, "GPRMC", 5))
50
              {
51
                nmeaProcessGPRMC(NmeaSentence);
52
                nmeaCalculations();
53
                state_bits |= GPS_RDY;
54
              }
55
            }
56
          
57
        }
58
      }
59
    }
60
    if  (charIn == '$')
61
    {
62
      startflag = 1;
63
          }
64
  }
65
}
66

67
in der main loop:
68

69
if (txCharCounter > 70)
70
    {
71
      uartSendTxBuffer(0);
72
      txCharCounter = 0;
73
    }

zu 98% läuft der code wie gewünscht, aber manchmal verhaspelt sich die 
Ausgabe der NMEA Daten.
Gast #927099
Lesenswert?
• ▲
▼
das logfile ist im Anhang.
Am Anfang stimmen die Daten, dann fehlerhaft und am Schluß wieder OK.
Als würde der buffer immer wieder gleiche Daten auslesen.
Die Prüfsumme wird nicht geprüft, ich denke nicht dass da ein Fehler 
ist.
Würde zwar den Datenmüll verhindern aber nicht die Ursache beheben.
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.