GPS LED Bargraph Monitor $GPGSV MTK3339 ATmega8 Assembler

#6910487
Lesenswert?

Ein kleines Beispiel wie der $GPGSV String mit USART 9600Bd, 8MHz Takt, 
ausgelesen und die Anzahl der gesehenen Satelliten mit einem Bargraph 
angezeigt werden kann.

Prinzip:

Die USART Daten vom GPS-Empfänger werden im Sekundentakt in ein 
Datenfeld (SRAM) geschrieben.

Ein neuer Datensatz beginnt, wenn 20ms keine Daten empfangen wurden.

Nun sucht der ATmega8 im Datenfeld nach "$GPGSV" und liest die Anzahl 
der gesehenen Satelliten aus,

Beispiel 12 Satelliten:

$GPGSV,3,1, 12 ,29,74,060,20,31,54,248,26,25,45,118,43,26,38,295,18*7C


Theorie:

http://aprs.gids.nl/nmea/#gsa
http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm

GPS Satellites in view

    $GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74
    $GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74
    $GPGSV,3,3,11,22,42,067,42,24,14,311,43,27,05,244,00,,,,*4D


    $GPGSV,1,1,13,02,02,213,,03,-3,000,,11,00,121,,14,13,172,05*67


1    = Total number of messages of this type in this cycle
2    = Message number
3    = Total number of SVs in view
4    = SV PRN number
5    = Elevation in degrees, 90 maximum
6    = Azimuth, degrees from true north, 000 to 359
7    = SNR, 00-99 dB (null when not tracking)
8-11 = Information about second SV, same as field 4-7
12-15= Information about third SV, same as field 4-7
16-19= Information about fourth SV, same as field 4-7


Bernhard
Angehängte Dateien:
Gast #6910505
Lesenswert?

Bernhard S. schrieb:
> Ein kleines Beispiel wie der $GPGSV String mit USART 9600Bd, 8MHz Takt,
> ausgelesen und die Anzahl der gesehenen Satelliten mit einem Bargraph
> angezeigt werden kann.

Die Anzahl der gesehenen Satelliten nützt meist wenig. Viel wichtiger 
ist, wieviel Satelliten für die Positionsberechnung benutzt werden. Die 
finden sich im GSA-Sentence.
#6910617
Lesenswert?

Die Frage war ?
Ich wuerde allenfalls die Genauigkeits Aussage verwenden. 200m, 100m, 
20m, 2m, Und die vielleicht logarithmisch darstellen.
Ich wuerde auch nicht die Strings in ein Datenfeld schreiben, sondern 
die Strings waehrend des Empfangs mit einer Zustandsmaschine auseinander 
nehmen.

Aber eben... wo liegt das Problem ?
Gast #6910675
Lesenswert?

Bernhard S. schrieb:
> Ein neuer Datensatz beginnt, wenn 20ms keine Daten empfangen wurden.

Hä?
NMEA-0183-Datensätze werden vorne durch ein "$" und hinten durch ein 
"\r\n" begrenzt. So können auch mehrere Datensätze am Stück ohne Pause 
übertragen werden.

Purzel H. schrieb:
> Ich wuerde auch nicht die Strings in ein Datenfeld schreiben, sondern
> die Strings waehrend des Empfangs mit einer Zustandsmaschine auseinander
> nehmen.

Kann man machen. Allerdings muss man den Kram wegen der 
Checksummen-Überprüfung dann doch zwischenspeichern.
Standard-NMEA-Datensätze haben eine maximale Länge von 80 Zeichen - das 
kann man auch in einem relativ kleinen AVR zwischenspeichern, und bei 
unterschiedlichen Checksummen dann verwerfen.

Bernhard S. schrieb:
> Ein kleines Beispiel wie der $GPGSV String mit USART 9600Bd, 8MHz Takt,
> ausgelesen und die Anzahl der gesehenen Satelliten mit einem Bargraph
> angezeigt werden kann.

Als Projekt eines Anfängers (bis auf die 20ms) gut.
Gast #6910895
Lesenswert?

STK500-Besitzer schrieb:
> Kann man machen. Allerdings muss man den Kram wegen der
> Checksummen-Überprüfung dann doch zwischenspeichern.

Warum den ganzen Kram zwischenspeichern?
Auch die Checksumme lässt sich live mitrechnen. Und wenn der '*' kommt, 
muss die FSM dafür sorgen, dass die beiden Checksummen-Bytes 
herausgefischt und geprüft werden. Nur wenn die ok ist, wird die 
Satellitenanzahl zur Aktualisierung der Anzeige weitergereicht.
Gast #6911107
Lesenswert?

Wolfgang schrieb:
> Auch die Checksumme lässt sich live mitrechnen. Und wenn der '*' kommt,
> muss die FSM dafür sorgen, dass die beiden Checksummen-Bytes
> herausgefischt und geprüft werden.

Vielleicht etwas zu allgemein formuliert:
Dass man die live mitrechnen kann, ist mir schon klar.
Wenn man dann noch mehr als ein Feld aus dem NMEA-Frame verwenden will, 
speichert man die anderen auch noch mit. Wenn dann die Checksumme falsch 
ist, oder das Frameende nicht erkannt wird (weil zum Beispiel ein "$" 
folgt), kann man alles Geparstes verwerfen.
Es gibt ja nicht nur ein NMEA-Protokoll in dem ein Feld interessiert.
#6911251
Lesenswert?

Die Anzahl der gesehenen Satelliten nützt meist wenig.

In meiner Anwendung nutze ich nur den hochgenauen Sekundenimpuls, um 
einen Quarzofen zu justieren.

> Als Projekt eines Anfängers (bis auf die 20ms) gut.

Die 20ms Pause dienen dazu, um den Anfang einer Übertragung zu 
bestimmen.
Wie hättest Du den Anfang eines Datenstrings bestimmt?

> Was ist das für ein Bargraph bei dem man nur die Kathoden anschließen
> muss?

Die neuen WLAN-Module können das problemlos ;-)

(Korrektur s. Anhang)
Angehängte Dateien:
Gast #6911359
Lesenswert?

Bernhard S. schrieb:
> Ein kleines Beispiel wie der $GPGSV String mit USART 9600Bd, 8MHz Takt,
> ausgelesen und die Anzahl der gesehenen Satelliten mit einem Bargraph
> angezeigt werden kann.

Und wo sind deine Abblock-Kondensatoren an den Vcc und AVcc Pins?

Braucht's keine, gell? Kostet nur unnötig Zeit und Geld.
Ausserdem ist das mit den Abblock-Kondensatoren eh nur
esoterisches Geschwafel.
#6911446
Lesenswert?

STK500-Besitzer schrieb:
> Wie schon geschrieben: Das $-Zeichen markiert den Anfang, "\r\n"
> (Carriage Return, Line Feed) das Ende eines Frames.

Problem: Die Frames können in unterschielicher Reihenfolge vom 
GPS-Modul, je nach Hersteller, gesendet werden.
Noch in der Interrupt-Routine müsste entschieden werden, ob es z.B. ein 
$GPGSV oder $GGSA String, Prüfsumme berechnet, Daten ausgewertet werden.

Das ist zwar nicht unmöglich, aber zeitlich ziemlich knapp.

Ich beschreite momentan den einfachen Weg, alles in den SRAM schreiben 
und in aller Ruhe die Frams auswerten, uns stehen ca. 0,8 Sekunden dafür 
zur Verfügung.
Gast #6911458
Lesenswert?

Bernhard S. schrieb:
> Ich beschreite momentan den einfachen Weg, alles in den SRAM schreiben
> und in aller Ruhe die Frams auswerten, uns stehen ca. 0,8 Sekunden dafür
> zur Verfügung.

Da hast du meinen Post mit Wolfgangs verwechselt.
Ich mache es nämlich auch immer so.
Wobei man die Checksumme halt schon beim Empfnag mit berechnen kann.
Das Parsen erfolgt dann nach der Überprüfung der Checksumme.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren