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
:
Bearbeitet durch User
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.
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 ?
Bernhard S. schrieb: > mit einem Bargraph angezeigt werden kann. Was ist das für ein Bargraph bei dem man nur die Kathoden anschließen muss?
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.
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.
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.
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)
:
Bearbeitet durch User
Bernhard S. schrieb: > Wie hättest Du den Anfang eines Datenstrings bestimmt? Wie schon geschrieben: Das $-Zeichen markiert den Anfang, "\r\n" (Carriage Return, Line Feed) das Ende eines Frames. Die Checksumme wird mit "*" (Sternchen / Asterix) markiert, ist kein notwendiges Kriterium und kann auch weggelassen werden. https://de.wikipedia.org/wiki/NMEA_0183
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.
> Und wo sind deine Abblock-Kondensatoren an den Vcc und AVcc Pins?
Als was würdest Du am Ausgang des 7805 die komischen "Dinger"
bezeichnen?
Bernhard S. schrieb: > Als was würdest Du am Ausgang des 7805 die komischen "Dinger" > bezeichnen? uff basse schrieb: > an den Vcc und AVcc Pins? Einfach einmal eine Application Note von Atmel lesen (und verstehen).
> Einfach einmal eine Application Note von Atmel > lesen (und verstehen). Scheinst noch ein Anfänger zu sein, nicht tragisch, wir helfen Dir gern. Einfach mal ein Prinzipschaltbild so halbwegs deuten lernen.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.