Forum: Mikrocontroller und Digitale Elektronik GPS an µC: NMEA auswerten


von Christian (Gast)


Lesenswert?

Hallo,

ich möchte gerne GPS Daten mit einem µC auswerten, eigentlich nur 
Geschwindigkeit
Ich habe mal etwas rumgeschaut und festgestellt, dass GPS Mäuse 
unterschiedlicher Hersteller bei den PS/2 Steckern unterschiedliche 
Belegungen haben, also werde ich den Anschluß per USB Stecker machen, in 
der Hoffnung, dass da die 4 Pins gleich belegt sind.

Aber zu meiner eigentlichen Frage. Ich möchte die mittels NMEA-Protokoll 
eintreffenden Daten auswerten, am besten wohl den $GPRMC Datensatz, weil 
da neben der Geschwindigkeit auch noch andere schöne Infos enthalten 
sind.
Kennt da jemand fertige und freie C-Bibliotheken für den Empfang und die 
Auswertung der NMEA-Datensätze?

von Stefan (Gast)


Lesenswert?

In der Artikelsammlung sind ein paar Links unter GPS angegeben.

von irgendwer (Gast)


Lesenswert?

per USB-Stecker ? Also die USB-Stecker sind schon genormt, also sind die 
vier Pins auch gleich belegt. Aber dir ist schon klar, das eine USB-Maus 
einen USB-Host benötigt..

von Stefan (Gast)


Lesenswert?

Korrekt. Das kann ein Problem sein.

Aber vielleicht ist es eine GPS Maus, die intern seriell ausgibt (TTL 
oder RS232) und die USB Verbindung über einen integrierten RS232-to-USB 
Adapter implementiert. Auf dem PC würde GPS Software die GPS Maus dann 
über eine virtuelle COM Schnittstelle ansprechen.

In dem Fall könnte man versuchen den µC direkt vor dem RS232/TTL-to-USB 
Adapterteil anzuschliessen. Damit bräuchte man keinen USB-Host, sondern 
hätte die GPS-Maus - µC Kommunikation auf banale UART Kommunikation 
reduziert.

Mehr müsste man auch herauskriegen, wenn man sich die 
Treibersoftware/Doku der GPS Maus ansieht. Eine typische Installation 
eines RS232-to-USB Adapter als virtuelle COM Schnittstelle müsste 
auffallen. Besonders, wenn die üblichen verdächtigen Chipnamen 
auftauchen.

von irgendwer (Gast)


Lesenswert?

Außer der UART->USB Wandler ist im GPS Chipsatz integriert was vorallem 
bei neueren oft der Fall ist. Alternative (jedoch teurer) ein Bluetooth 
Modul (BlueNiceCom) und ne Bluetooth Maus ..

von Wolfgang (Gast)


Lesenswert?

> Ich möchte die mittels NMEA-Protokoll eintreffenden Daten auswerten, am
> besten wohl den $GPRMC Datensatz, weil da neben der Geschwindigkeit auch
> noch andere schöne Infos enthalten sind.
falls Interesse besteht, kann ich Dir mein Programmschnipsel zur 
Verfügung stellen.
Es zeichnet die gewünschten Daten, welche von einer RS232 GPS-Maus 
kommen, mittels MSP430 auf einer Smart Media Karte auf. Ich hatte dies 
mal gebaut, um die Geschwindigkeit beim Skifahren messen zu können. (man 
kann abends auch nochmal seine Fahrstrecke am Laptop nachfahren). Spaß 
muß sein
Wolfgang

von Christian (Gast)


Lesenswert?

ich habe mich mal bei den Hersteller von GPS Mäusen erkundigt.

Holux richtet einen virtuellen COM-Port für den USB Adapter ein.
Allerdings hat Holux auf dem miniDin Stecker auh bereits TTL und RS232 
Level.

Bei Navilock und Haicom warte ich noch auf eine Antwort.

Sobald ich da näheres weiß, schreibe ich es hier rein.

@Wolfgang:
Dein Programm würde mich auf jeden Fall mal interessieren. Vor allem die 
Funktion die den Datensatz auseinander nimmt und die nötigen Infos 
herausfiltert.

von reflection (Gast)


Lesenswert?

@Wolfgang

Ich bin im Moment au an so was dran. Wäre echt toll wenn Du mir deinen 
Programmierschnippsel zur Verfügung zustellen könntest. Hier meine Mail 
Addy reflection@reflectionracing.ch

Gruss und Merci schon einmal im Voraus

reflection

von Philipp S. (philipp)


Lesenswert?

Muß es denn eine GPS-Maus sein? GPS-Modul samt externer Antenne kosten 
zusammen die Hälfte von einer GPS-Maus und das Modul kann sich direkt 
mit dem Controller über UARt unterhalten, sogar schon auf TTL-Pegel. Und 
eine Platine hat man ja sowieso, da kann also auch das Modul mit drauf.

von GPS'ler (Gast)


Lesenswert?

@Philipp Sªsse  bitte ebay-nummern von platine/antenne posten *g

von Axel R. (Gast)


Lesenswert?

Such doch mal nach N4TXI hier im Forum (Ach - geht ja erst, wenn man 
ANGEMELDET ist).

sieht dann ungefähr so aus (funktioniert sehr gut)
1
/******************************************************************************/
2
extern void MsgHandler(unsigned char newchar)
3
/*******************************************************************************
4
* ABSTRACT:  Processes the characters coming in from USART.  In this case,
5
*        this is the port connected to the gps receiver.
6
*
7
* INPUT:    newchar  Next character from the serial port.
8
* OUTPUT:  None
9
* RETURN:  None
10
*/
11
{
12
  static unsigned char  commas;      // Number of commas for far in sentence
13
  static unsigned char  index;      // Individual array index
14
15
  if (newchar == 0)              // A NULL character resets GPS decoding
16
  {
17
    commas = 25;              // Set to an outrageous value
18
    sentence_type = FALSE;        // Clear local parse variable
19
    return;
20
  }
21
22
  if (newchar == '$')            // Start of Sentence character, reset
23
  {
24
    commas = 0;                // No commas detected in sentence for far
25
    sentence_type = FALSE;        // Clear local parse variable
26
    return;
27
  }
28
29
  if (newchar == ',')            // If there is a comma
30
  {
31
    commas += 1;              // Increment the comma count
32
    index = 0;                // And reset the field index
33
    return;
34
  }
35
36
  if (commas == 0)
37
  {
38
    switch(newchar)
39
    {
40
      case ('C'):              // Only the GPRMC sentence contains a "C"
41
        sentence_type = GPRMC;    // Set local parse variable
42
        break;
43
      case ('S'):              // Take note if sentence contains an "S"
44
        sentence_type = 'S';      // ...because we don't want to parse it
45
        break;
46
      case ('A'):              // The GPGGA sentence ID contains "A"
47
        if (sentence_type != 'S')  // As does GPGSA, which we will ignore
48
          sentence_type = GPGGA;  // Set local parse variable
49
        break;
50
    }
51
52
    return;
53
  }
54
55
  if (sentence_type == GPGGA)      // GPGGA sentence  decode initiated
56
  {
57
    switch (commas)
58
    {
59
      case (1):                  // Time field, grab characters
60
        Time_Temp[index++] = newchar;
61
        return;
62
      case (2):                  // Latitude field, grab chars
63
        Latitude_Temp[index++] = newchar;
64
        return;
65
      case (3):
66
        Northsouth_Temp = newchar;  
67
        return;
68
      case (4):                  // Longitude field, grab chars
69
        Longitude_Temp[index++] = newchar;
70
        return;
71
      case (5):
72
        Eastwest_Temp = newchar;
73
        return;
74
      case (7):                  // Satellite field, grab chars
75
        Satellites_Temp[index++] = newchar;
76
        return;
77
      case (9):                  // Altitude field, grab chars
78
        Altitude_Temp[index++] = newchar;
79
        return;
80
    }
81
82
    return;
83
  }    // end if (sentence_type == GPGGA)
84
85
  if (sentence_type == GPRMC)      // GPGGA sentence  decode initiated
86
  {
87
    switch (commas)
88
    {
89
      case (7):                  // Speed field, grab characters
90
        Speed_Temp[index++] = newchar;
91
        return;
92
      case (8):                  // Course field, grab characters
93
        Course_Temp[index++] = newchar;
94
        return;
95
    }
96
97
    return;
98
  }    // end if (sentence_type == GPRMC)
99
100
  return;
101
102
}    // End MsgHandler(unsigned char newchar)

doch ganz schön lang, hätte man anhängen sollen,..

AxelR.

von Thomas (Gast)


Lesenswert?

In der Procycon avrlib sind auch NMEA Parser drin:

http://hubbard.engr.scu.edu/embedded/avr/avrlib/

Falls einen Gleitkomma zu aufgebläht ist muss man sie sich etwas 
anpassen, aber das Prinzip ist OK.

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Nach meinem Skiurlaub (GPS Datenaufzeichnung war wieder mit dabei) heute 
die versprochenen Programmschnipsel.

Sie entstanden unter Verwendung der hier im Forum aufgeworfenen Themen:
„MSP430 UART Zeichenkette ausfiltern „  +  „GPS Datenstrom filtern“
Es wäre sinnvoll, hier mal nachzulesen.

Mein Prinzip ist folgendes: alle ankommenden Zeichen werden in ein 1024 
bytes großes Feld [Tabelle_roh] geschrieben. Wird die im 
Interrupt-Unterprogramm   __interrupt void usart0_rx (void) festgelegte 
Zeichenfolge erkannt, ist das Ende des Datensatzes $GPGGA erreicht und 
es werden die 147 davor liegenden Zeichen aus dem Feld [Tabelle_roh ] 
ausgelesen, um dann weiter verarbeitet zu werden. (auf SM-Karte 
speichern, ….)
Zur Anzeige von Geschwindigkeit, Koordinaten, Uhrzeit usw. werden die 
aus dem Internet herunterladbaren Programme „gps_diag.zip“ und 
„VisualGPSInstall.exe“ verwendet, welche die Datensätze auswerten. Man 
kann auch ein Navigationsprogramm verwenden und dort die Datensätze 
abspielen. Dann hat man sogar eine Landkarte dazu.

Wolfgang

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.