Hallo,
ich sitze gerade vor folgendem Problem:
Ich möchte die Breite und Länge auf einem LCD Display anzeigen.
Soweit funktioniert das auch super. Nur die Werte für die Bogensekunde
stimmen überhaupt nicht.
(empfange 12Satteliten davon 10 fix)
Wo mache ich da etwas falsch?
Gruß Dirk
Auszug Header
typedef struct{
uint8_t Grad;
uint8_t Bogenminuten;
uint16_t Bogensekunden;
uint8_t NS;
}TBreite;
Auszug Main
Font_SetPos(2,40); // Anzeige Position festlegen
printf("Breite %02d.%02d.%02d.%c",
GPS_Daten0.Breite.Grad,
GPS_Daten0.Breite.Bogenminuten,
GPS_Daten0.Breite.Bogensekunden,
GPS_Daten0.Breite.NS);
Font_SetPos(2,50); // Anzeige Position festlegen
printf("Laenge %02d.%02d.%02d.%c", GPS_Daten0.Laenge.Grad,
GPS_Daten0.Laenge.Bogenminuten,
GPS_Daten0.Laenge.Bogensekunden,
GPS_Daten0.Laenge.WE);
>Soweit funktioniert das auch super. Nur die Werte für die Bogensekunde>stimmen überhaupt nicht.
Woher weisst du das? Was erwartest du und was wird angezeigt?
>Wo mache ich da etwas falsch?
Beim einlesen der Bogensekunden?
Sorry, zu wenig Infos.
Dirk schrieb:> Hallo,>> der Code ist von Marc Seiffert.> nähere Infos hier>> Beitrag "GPS-Parser für XMEGA">> Gruß Dirk
Da kommen aber deine Variablen und Strukturen gar nicht vor!
So wirst du dir nicht viele Helfer finden, wenn sich die Helfer erst mal
alles aus 25 Quellen zusammensuchen müssen, um dann die noch fehlenden
Details zu erraten um daraus dann eine Hypothese abzuleiten, was du wohl
alles falsch gemacht haben könntest.
> Ziel->Breite.Bogensekunden = (Quelle[18]-48)*1000;> Ziel->Breite.Bogensekunden += (Quelle[19]-48)*100;> Ziel->Breite.Bogensekunden += (Quelle[20]-48)*10;> Ziel->Breite.Bogensekunden += (Quelle[21]-48);
Liefert dein GPS vier Stellen für die Bogensekunden?
Hast du mal einen Terminal Mitschnitt vom GPS?
Hi
>der Code ist von Marc Seiffert.>nähere Infos hier>Beitrag "GPS-Parser für XMEGA">Gruß Dirk
Das ist Müll. Die Stellen nach dem Komma müssen mit 60 Multipliziert
werden. Der Intergerteil davon sind die Minuten. Der Nachkommateil davon
x 60 ergibt die Sekunden.
MfG Spess
Denke mal ja
holger schrieb:>> Ziel->Breite.Bogensekunden = (Quelle[18]-48)*1000;>>> Ziel->Breite.Bogensekunden += (Quelle[19]-48)*100;>>> Ziel->Breite.Bogensekunden += (Quelle[20]-48)*10;>>> Ziel->Breite.Bogensekunden += (Quelle[21]-48);>>>> Liefert dein GPS vier Stellen für die Bogensekunden?
$GPRMC,215359.000,V,0000.0000,N,00000.0000,E,000.0,000.0,170111,,,N*78
$GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02
$GPGGA,215400.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,0.0,M,,0000*6F
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPGSV,1,1,02,15,00,000,31,24,00,000,33*7B
soeben Mitgeschnitten. Ist zwar null Empfang (Fenster zu Rollo runter)
aber das tut ja nichts zur Sache.
Dirk
>Angezeigt wird>>Breite xx.xx.6837.N>>richtig wäre aber>>Breite xx.xx.4926.N (laut Google Earth)
Ach Mann, das ist doch wieder das Ding mit den
Nachkommastellen. Das sind keine Sekunden sondern
Bruchteile von Minuten. Umrechnung: bemühe die Forensuche.
>soeben Mitgeschnitten. Ist zwar null Empfang (Fenster zu Rollo runter)>aber das tut ja nichts zur Sache.
Klaro, wenn mein Fernseher nicht an ist kann ich dir
sagen welches Programm eingeschaltet ist. Pappnase;)
Hi
>Ach Mann, das ist doch wieder das Ding mit den>Nachkommastellen. Das sind keine Sekunden sondern>Bruchteile von Minuten. Umrechnung: bemühe die Forensuche.
Richtig.
MfG Spess
@Holger
der Mitschnitt war nur auf die Anzahl der Stellen für die Bogenkunde
gedacht.
Wie gesagt wenn der Empfänger draußen liegt empfange ich 12Satteliten
davon 10 fix.
Dirk
Dirk schrieb:> @Holger>> der Mitschnitt war nur auf die Anzahl der Stellen für die Bogenkunde> gedacht.> Wie gesagt wenn der Empfänger draußen liegt empfange ich 12Satteliten> davon 10 fix.
Dann mach draussen einen Mitschnitt und sieh dir an, was denn nun
richtig ist.
Je nach verwendetem Erd und Kartenmodell können GPS Koordinaten
nämlich durchaus von anderen veröffentlichten Daten abweichen.
D.h. wenn du vergleichen willst, dann Vergleich deinen Mitschnitt mit
deiner Anzeige. Die müssen übreinstimmen. Aber Vergleich nicht mit einer
Quelle, bei der du nicht weißt, wie die Daten aufbereitet wurden.
holger schrieb:>> Ziel->Breite.Bogensekunden = (Quelle[18]-48)*1000;>>> Ziel->Breite.Bogensekunden += (Quelle[19]-48)*100;>>> Ziel->Breite.Bogensekunden += (Quelle[20]-48)*10;>>> Ziel->Breite.Bogensekunden += (Quelle[21]-48)*60;
Dann wäre es ja so oder stehe ich jetzt ganz auf dem Schlauch.
Dirk
>Breite xx.xx.6837.N>richtig wäre aber>Breite xx.xx.4926.N (laut Google Earth)
Mal so als Hinweis:
Breitengrade:
1° = 111,1 Kilometer
1' = 1852 Meter
1" = ~ 31 Meter
Und jetzt kannst du mal die angebliche Differenz ausrechnen.
Dirk schrieb:> holger schrieb:>>> Ziel->Breite.Bogensekunden = (Quelle[18]-48)*1000;>>>>> Ziel->Breite.Bogensekunden += (Quelle[19]-48)*100;>>>>> Ziel->Breite.Bogensekunden += (Quelle[20]-48)*10;>>>>> Ziel->Breite.Bogensekunden += (Quelle[21]-48)*60;>> Dann wäre es ja so oder stehe ich jetzt ganz auf dem Schlauch.>> Dirk
Vorher wars richtig, entferne deine Verschlimmbesserung besser wieder.
Die Abweichung von der Googleposition hat nichts mit einem
Umrechnungsfehler von Dezimalsekunden in Sekunden zu tun. Google benutzt
wohl einfach ein anderes oder abgewandeltes geodätisches Referenzsystem
und verursacht dadurch in deinem Fall eben eine Abweichung von 350
Metern.
Habe grade mal nachgeschaut, Google werwendet eine einfache
Zylinderprojektion mit dem WGS84 Referenzelipsoid, was die Unterschiede
schon erklären könnte.
Das kannst du dir vereinfacht in etwa so vorstellen als das die Erde als
Kugel (Elipsoid) angenommen wird und darauf eine Kartenhaut gespannt
wird. Was dabei vernachlässigt wird ist die Tatsache das die Erde an
manchen Stellen etwas höher, an anderen etwas tiefer ist. Durch diese
Verzerrungen stimmt die Kartenhaut zwar an den meisten Stellen so
ungefähr, sitzt aber manchmal doch etwas daneben.
Der Fehler kommt also nur daher das Google Earth die Luftbilder nicht
exakt auf die Erde abbildet.
Als Beispiel hierfür kann man sich z.B. mal den 50. Breitengrad in der
Mainzer Innenstadt in Google Earth anschauen ( 49°59'56.00"N,
8°16'16.10"E ), der liegt auf den Bildern auch 4 Sekunden bzw. 120m
daneben.