www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Suche NMEA Parser für AVR


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Timo Birnschein (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo zusammen,

Ich suche nun schon ein paar Tage das Netz durch und habe diverses hier 
im Forum gelesen... Aber ich scheine irgenwie Tomaten auf den Augen zu 
haben:

Ich suche einen kleinen NMEA Parser, dem ich eigentlich nurnoch die 
Bytes vom GPS Empfänger hin werfen muss und mir dann ein Struct mit 
daten wie Position, Geschwindikeit, Kurs etc füllt und zur Verfügung 
stellt. Aber obwohl hier sehr viele Leute mit GPS am Avr arbeiten, hat 
keiner eine einfache Lib parat, die diese Aufgabe erfüllt.

Super wäre ein relativ schlankes System, als OpenSource.

Hat jemand vielleicht einen guten Tipp für mich?

Mein Sensor spricht reines NMEA 183, kein Sirf oder ähnliches.


Vielen Dank und viele Grüße,
Timo

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Timo Birnschein schrieb:

> Ich suche nun schon ein paar Tage das Netz durch

In der Zeit hättest du das mindestens 5 mal selbst geschrieben. Und 
dabei sogar noch was gelernt (höchst wahrscheinlich).

Das ist Textver- und bearbeitung auf einfachstem Niveau.

Autor: Navi (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Timo Birnschein schrieb:
> etc

Was verstehst du darunter? Für viele Aufgaben reicht es den $GPRMC 
Sentence auszuwerten oder brauchst du auch Routenplanung und 
Wegpunkt-ansteuerdaten?

Autor: uii (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>Ich suche nun schon ein paar Tage das Netz durch...

Die Anzahl Google Anfragen um nichts zu NMEA zu finden belaeuft sich auf 
exakt Null. Zeit einem El-Schlaffo einen Tritt zu geben.

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Gib mir mal ein bsp. NMEA String und sag wie deine "Ziel" Struct 
aussehen soll. Dann zeig ich dir, wie das geht

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

>Gib mir mal ein bsp. NMEA String und sag wie deine "Ziel" Struct
>aussehen soll. Dann zeig ich dir, wie das geht

http://www.olajedatos.com/documentos/MN000315E_NME...

Z.B. GGA oder RMC.

MfG Spess

Autor: Chris (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert

Autor: Chris (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
http://www.procyonengineering.com/embedded/avr/avrlib/

der Link ist besser, musst aber auf die Lizenz achten soweit ich weis.

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>Hi
>>Gib mir mal ein bsp. NMEA String und sag wie deine "Ziel" Struct
>>aussehen soll. Dann zeig ich dir, wie das geht
>http://www.olajedatos.com/documentos/MN000315E_NME...
>Z.B. GGA

Da widerspricht sich was:

GGA Latitude: (Seite5)
Das Beispiel ist        :   .. ,3723.2475, ..
und in der Tabelle steht:      dddmm.mmmm

Das Bsp hat nur vier Stellen vor dem Punkt..

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

>Da widerspricht sich was:

>GGA Latitude: (Seite5)
>Das Beispiel ist        :   .. ,3723.2475, ..
>und in der Tabelle steht:      dddmm.mmmm
>Das Bsp hat nur vier Stellen vor dem Punkt..

Es gibt keine führenden Nullen.

MfG Spess

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>Es gibt keine führenden Nullen.

Warum nicht? Woran soll man erkennen, was das Bedeutet?

In dem selben Beispiel, bei sattelites used, gibt es die doch auch.

Oder Beispiel:

Uhrzeit: 12345.123

WIe spät ist es?
1:23:45
12:03:45
12:34:05

???

EDIT:

Weiter, Latitude:  102.9876
ergibt?
10° 2.9876'
1° 02.9876'

???

Autor: Timo Birnschein (Firma: MicroForge) (timob)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hm, meine Frage war scheinbar blöd formuliert.

Ich kann durchaus programmieren, allerdings ist die Anzahl an 
Komponenten die mein Projekt umfasst (quatrokopter und andere 
Fluggeräte) zu groß um sich um jede Standard Kompontente im Detail zu 
kümmern. Ich habe die letzten Tage Informatione über alles gesammelt. 
Insbesondere viel über Antennendesign und GPS grundsätzlich gelesen und 
nebenbei versucht einen Parser zu finden, der die Aufgabe erledigen 
kann.

Die Stanfort Lib beispielsweise läuft bei mir nicht! es werden schlicht 
die Zahlen aus dem Beispiel-Teststring nicht erkannt, und das obwohl ich 
sie testweise am PC implementiet habe. Viele GPS Logger hier im Forum 
und im Wiki arbeiten nicht mit einem Parser, sonder speichern lediglich 
den kompletten Stream auf eine SD Karte. Damit ist das auch nicht was 
ich will...

Danke an Chris für die beiden Links! Speziel den unteren kannte ich noch 
nicht. Ich werde da mal rein schauen und wenn das auch nicht geht, 
schreib ich das Ding halt selbst. Schade, dass man das Rad manchmal doch 
neu erfinden darf.


Danke nochmal und Gruß
Timo

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

>???

Ganz einfach: vom Punkt nach vorn parsen.

MfG Spess

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>Ganz einfach: vom Punkt nach vorn parsen.

Daswiderspricht sich mit field type aus der Tabelle.

lös doch mal bitte meine Beispiele auf..

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

>lös doch mal bitte meine Beispiele auf..

Uhrzeit: 12345.123

WIe spät ist es?
1:23:45

Weiter, Latitude:  102.9876
ergibt?

1° 02.9876'

MfG Spess

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>1° 02.9876'

Ich denke es gibt keine führenden Nullen?

Wie wird die Uhrzeit Mitternacht dargestellt?
0 ?
000 ?
000000 ?

Oder eine Minute und eine Sekunde nach Mitternacht?

11 ?
011 ?

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

>1° 02.9876'

>Ich denke es gibt keine führenden Nullen?

Es steht doch auch keine Null am Anfang des Strings. Du musst z.B. 
'dddmm.mmmm' wie eine Maske über den String legen so das der Punkt 
übereinstimmt.

Ein String mit dem Field Type dddmm.mmmm fängt nicht mit einer Null an, 
außer dddmm ist Null. Der Punkt ist immer vorhanden. mmmm hört nicht mit 
einer Null auf, außer mmmm ist Null.

>Wie wird die Uhrzeit Mitternacht dargestellt?

0.0.

MfG Spess

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Also wenn das mm von 'mm.mmmm' Null ist, dann sieht das so aus:
falls d>0 : (d)d00.xxxx    d: Grad
sonst            0.xxxx

???


>0.0.

Keine Std und keine Min, weil Null?


Warum dann führende Nullen bei sattelites used und bei station id ?

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oder anders formuliert:

hhmmss ist eigentlich eine Zahl, gebildet durch
  10000h
+   100m
+      s

und das ohne führende Nullen.

Genauso das dddmm:
 100d
+   m
wobei hier noch zusätzlich gilt: m<60

???

Autor: Timo Birnschein (Firma: MicroForge) (timob)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ist es nicht schon offensichtlich geworden - und das ohne mein Zutun - 
warum das nicht einfachste Textverarbeitung ist... ;)

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

Vergiss meine Aussagen. War Müll. In dem von mir verlinktem Dokument ist 
ein Fehler. Die Latitude hat nicht das Format dddmm.mmmm sondern 
ddmm.mmmm (0..90°). Und diese Strings haben eine konstante Länge.

MfG Spess

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Timo Birnschein schrieb:
> Ist es nicht schon offensichtlich geworden - und das ohne mein Zutun -
> warum das nicht einfachste Textverarbeitung ist... ;)

Ja. Ich greif mir die ganze Zeit an den Kopf. Warum dieser sinnlose 
Aufwand, die Nullen zu unterdrücken. Diese fehlenden Stellen erzeugen 
dann wieder jede Menge Aufwand beim zurückrechnen..

Man kann nur den Kopf schütteln

Autor: Matthias Lipinsky (lippy)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>Vergiss meine Aussagen. War Müll. In dem von mir verlinktem Dokument ist
>ein Fehler. Die Latitude hat nicht das Format dddmm.mmmm sondern
>ddmm.mmmm (0..90°). Und diese Strings haben eine konstante Länge.

Puh. Gott sei Dank.

Also ist Mitternacht 000000.0000

und die geogr. Position 0/0 wird als
 0000.0000 LAT
und
00000.0000 LON

dargestellt?


(bitte ein ja ;-)

Autor: was? (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Timo Birnschein schrieb:
> warum das nicht einfachste Textverarbeitung ist...

Doch, das ist es. Nur das Spess und Mathias sich jetzt die Arbeit machen 
das Protokoll zu analysieren, obwohl du das besser machen solltest. 
Schau doch mal hier rein, da steht eigentlich alles drin: 
http://git.savannah.gnu.org/cgit/gpsd.git/tree/dri...

Autor: was? (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Das hab ich gerade noch gesehen:
http://www.maartenlamers.com/nmea/

was? schrieb:
> Mathias

Sorry, Matthias.

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

>(bitte ein ja ;-)

Ja. Enschuldige nochmals die Konfusion. Mein Eigenbau-GPS ist schon 7 
Jahre her.

MfG Spess

Beitrag #2641424 wurde vom Autor gelöscht.
Autor: Matthias Lipinsky (lippy)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
>Sorry, Matthias.

Warum?


>Das hab ich gerade noch gesehen:
>http://www.maartenlamers.com/nmea/

Da steht:
>>$GPGGA,082804.683,5205.9421,N,00506.4368,E,1,03,3.0,0.3,M,,,,0000*01
>>$GPRMC,082804.683,A,5205.9421,N,00506.4368,E,0.02,146.61,190408,,*0C
>>$GPBDG,082804.683,A,52.09904,5.10728,0.02,146.61,1,190408,*73

Das sieht eindeutig nach führenden Nullen, also konstanter Länge aus.
Oder das Feld ist leer.

Somit sollte der Ansatz im ANhang funktionieren. Und sogar schneller
sein als die vielen String/real Funktionen hier:
>http://git.savannah.gnu.org/cgit/gpsd.git/tree/dri...

Autor: was? (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Matthias Lipinsky schrieb:
> Warum?

Zumindest Namen sollte man doch noch richtig abschreiben können. ;)

Matthias Lipinsky schrieb:
> Und sogar schneller
> sein als die vielen String/real Funktionen hier:
>>http://git.savannah.gnu.org/cgit/gpsd.git/tree/dri...

Was hat sich der gute, alte Eric S. Raymond dabei nur gedacht. :P

Autor: Timo Birnschein (Firma: MicroForge) (timob)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Moin!

Das hier ist ein Test-Datensatz aus der lib hier: 
http://nmea.sourceforge.net

    const char *buff[] = {
        "$GPRMC,173843,A,3349.896,N,11808.521,W,000.0,360.0,230108,013.4,E*69\r\n",
        "$GPGGA,111609.14,5001.27,N,3613.06,E,3,08,0.0,10.2,M,0.0,M,0.0,0000*70\r\n",
        "$GPGSV,2,1,08,01,05,005,80,02,05,050,80,03,05,095,80,04,05,140,80*7f\r\n",
        "$GPGSV,2,2,08,05,05,185,80,06,05,230,80,07,05,275,80,08,05,320,80*71\r\n",
        "$GPGSA,A,3,01,02,03,04,05,06,07,08,00,00,00,00,0.0,0.0,0.0*3a\r\n",
        "$GPRMC,111609.14,A,5001.27,N,3613.06,E,11.2,0.0,261206,0.0,E*50\r\n",
        "$GPVTG,217.5,T,208.8,M,000.00,N,000.01,K*4C\r\n"
    };

Da sind durchaus auch führende Nullen zu finden. Allerdings schmiss der 
Parser bei mir komische Zahlen raus, die ich aber auch falsch 
interpretiert haben könnte.

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net