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


von Timo Birnschein (Gast)


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

von Karl H. (kbuchegg)


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.

von Navi (Gast)


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?

von uii (Gast)


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.

von Matthias L. (Gast)


Lesenswert?

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

von spess53 (Gast)


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_NMEA_ref_manual.pdf

Z.B. GGA oder RMC.

MfG Spess

von Chris (Gast)


Lesenswert?


von Chris (Gast)


Lesenswert?

http://www.procyonengineering.com/embedded/avr/avrlib/

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

von Matthias L. (Gast)


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..

von spess53 (Gast)


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

von Matthias L. (Gast)


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'

???

von Timo B. (Firma: MicroForge) (timob)


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

von spess53 (Gast)


Lesenswert?

Hi

>???

Ganz einfach: vom Punkt nach vorn parsen.

MfG Spess

von Matthias L. (Gast)


Lesenswert?

>Ganz einfach: vom Punkt nach vorn parsen.

Daswiderspricht sich mit field type aus der Tabelle.

lös doch mal bitte meine Beispiele auf..

von spess53 (Gast)


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

von Matthias L. (Gast)


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 ?

von spess53 (Gast)


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

von Matthias L. (Gast)


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 ?

von Matthias L. (Gast)


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

???

von Timo B. (Firma: MicroForge) (timob)


Lesenswert?

Ist es nicht schon offensichtlich geworden - und das ohne mein Zutun - 
warum das nicht einfachste Textverarbeitung ist... ;)

von spess53 (Gast)


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

von Matthias L. (Gast)


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

von Matthias L. (Gast)


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 ;-)

von was? (Gast)


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/driver_nmea0183.c

von was? (Gast)


Lesenswert?

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

was? schrieb:
> Mathias

Sorry, Matthias.

von spess53 (Gast)


Lesenswert?

Hi

>(bitte ein ja ;-)

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

MfG Spess

von Matthias L. (Gast)


Angehängte Dateien:

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...

von was? (Gast)


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

von Timo B. (Firma: MicroForge) (timob)


Lesenswert?

Moin!

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

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

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.

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.