www.mikrocontroller.net

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


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Artikelsammlung sind ein paar Links unter GPS angegeben.

Autor: irgendwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: irgendwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ..

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: reflection (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philipp Sªsse (philipp)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: GPS'ler (Gast)
Datum:

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

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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)
/******************************************************************************/
extern void MsgHandler(unsigned char newchar)
/*******************************************************************************
* ABSTRACT:  Processes the characters coming in from USART.  In this case,
*        this is the port connected to the gps receiver.
*
* INPUT:    newchar  Next character from the serial port.
* OUTPUT:  None
* RETURN:  None
*/
{
  static unsigned char  commas;      // Number of commas for far in sentence
  static unsigned char  index;      // Individual array index

  if (newchar == 0)              // A NULL character resets GPS decoding
  {
    commas = 25;              // Set to an outrageous value
    sentence_type = FALSE;        // Clear local parse variable
    return;
  }

  if (newchar == '$')            // Start of Sentence character, reset
  {
    commas = 0;                // No commas detected in sentence for far
    sentence_type = FALSE;        // Clear local parse variable
    return;
  }

  if (newchar == ',')            // If there is a comma
  {
    commas += 1;              // Increment the comma count
    index = 0;                // And reset the field index
    return;
  }

  if (commas == 0)
  {
    switch(newchar)
    {
      case ('C'):              // Only the GPRMC sentence contains a "C"
        sentence_type = GPRMC;    // Set local parse variable
        break;
      case ('S'):              // Take note if sentence contains an "S"
        sentence_type = 'S';      // ...because we don't want to parse it
        break;
      case ('A'):              // The GPGGA sentence ID contains "A"
        if (sentence_type != 'S')  // As does GPGSA, which we will ignore
          sentence_type = GPGGA;  // Set local parse variable
        break;
    }

    return;
  }

  if (sentence_type == GPGGA)      // GPGGA sentence  decode initiated
  {
    switch (commas)
    {
      case (1):                  // Time field, grab characters
        Time_Temp[index++] = newchar;
        return;
      case (2):                  // Latitude field, grab chars
        Latitude_Temp[index++] = newchar;
        return;
      case (3):
        Northsouth_Temp = newchar;  
        return;
      case (4):                  // Longitude field, grab chars
        Longitude_Temp[index++] = newchar;
        return;
      case (5):
        Eastwest_Temp = newchar;
        return;
      case (7):                  // Satellite field, grab chars
        Satellites_Temp[index++] = newchar;
        return;
      case (9):                  // Altitude field, grab chars
        Altitude_Temp[index++] = newchar;
        return;
    }

    return;
  }    // end if (sentence_type == GPGGA)

  if (sentence_type == GPRMC)      // GPGGA sentence  decode initiated
  {
    switch (commas)
    {
      case (7):                  // Speed field, grab characters
        Speed_Temp[index++] = newchar;
        return;
      case (8):                  // Course field, grab characters
        Course_Temp[index++] = newchar;
        return;
    }

    return;
  }    // end if (sentence_type == GPRMC)

  return;

}    // End MsgHandler(unsigned char newchar)


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

AxelR.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.