Hallo, ich möchte gerne GPS Daten mit einem µC auswerten, eigentlich nur Geschwindigkeit Ich habe mal etwas rumgeschaut und festgestellt, dass GPS Mäuse unterschiedlicher Hersteller bei den PS/2 Steckern unterschiedliche Belegungen haben, also werde ich den Anschluß per USB Stecker machen, in der Hoffnung, dass da die 4 Pins gleich belegt sind. Aber zu meiner eigentlichen Frage. Ich möchte die mittels NMEA-Protokoll eintreffenden Daten auswerten, am besten wohl den $GPRMC Datensatz, weil da neben der Geschwindigkeit auch noch andere schöne Infos enthalten sind. Kennt da jemand fertige und freie C-Bibliotheken für den Empfang und die Auswertung der NMEA-Datensätze?
per USB-Stecker ? Also die USB-Stecker sind schon genormt, also sind die vier Pins auch gleich belegt. Aber dir ist schon klar, das eine USB-Maus einen USB-Host benötigt..
Korrekt. Das kann ein Problem sein. Aber vielleicht ist es eine GPS Maus, die intern seriell ausgibt (TTL oder RS232) und die USB Verbindung über einen integrierten RS232-to-USB Adapter implementiert. Auf dem PC würde GPS Software die GPS Maus dann über eine virtuelle COM Schnittstelle ansprechen. In dem Fall könnte man versuchen den µC direkt vor dem RS232/TTL-to-USB Adapterteil anzuschliessen. Damit bräuchte man keinen USB-Host, sondern hätte die GPS-Maus - µC Kommunikation auf banale UART Kommunikation reduziert. Mehr müsste man auch herauskriegen, wenn man sich die Treibersoftware/Doku der GPS Maus ansieht. Eine typische Installation eines RS232-to-USB Adapter als virtuelle COM Schnittstelle müsste auffallen. Besonders, wenn die üblichen verdächtigen Chipnamen auftauchen.
Außer der UART->USB Wandler ist im GPS Chipsatz integriert was vorallem bei neueren oft der Fall ist. Alternative (jedoch teurer) ein Bluetooth Modul (BlueNiceCom) und ne Bluetooth Maus ..
> Ich möchte die mittels NMEA-Protokoll eintreffenden Daten auswerten, am > besten wohl den $GPRMC Datensatz, weil da neben der Geschwindigkeit auch > noch andere schöne Infos enthalten sind. falls Interesse besteht, kann ich Dir mein Programmschnipsel zur Verfügung stellen. Es zeichnet die gewünschten Daten, welche von einer RS232 GPS-Maus kommen, mittels MSP430 auf einer Smart Media Karte auf. Ich hatte dies mal gebaut, um die Geschwindigkeit beim Skifahren messen zu können. (man kann abends auch nochmal seine Fahrstrecke am Laptop nachfahren). Spaß muß sein Wolfgang
ich habe mich mal bei den Hersteller von GPS Mäusen erkundigt. Holux richtet einen virtuellen COM-Port für den USB Adapter ein. Allerdings hat Holux auf dem miniDin Stecker auh bereits TTL und RS232 Level. Bei Navilock und Haicom warte ich noch auf eine Antwort. Sobald ich da näheres weiß, schreibe ich es hier rein. @Wolfgang: Dein Programm würde mich auf jeden Fall mal interessieren. Vor allem die Funktion die den Datensatz auseinander nimmt und die nötigen Infos herausfiltert.
@Wolfgang Ich bin im Moment au an so was dran. Wäre echt toll wenn Du mir deinen Programmierschnippsel zur Verfügung zustellen könntest. Hier meine Mail Addy reflection@reflectionracing.ch Gruss und Merci schon einmal im Voraus reflection
Muß es denn eine GPS-Maus sein? GPS-Modul samt externer Antenne kosten zusammen die Hälfte von einer GPS-Maus und das Modul kann sich direkt mit dem Controller über UARt unterhalten, sogar schon auf TTL-Pegel. Und eine Platine hat man ja sowieso, da kann also auch das Modul mit drauf.
Such doch mal nach N4TXI hier im Forum (Ach - geht ja erst, wenn man ANGEMELDET ist). sieht dann ungefähr so aus (funktioniert sehr gut)
1 | /******************************************************************************/
|
2 | extern void MsgHandler(unsigned char newchar) |
3 | /*******************************************************************************
|
4 | * ABSTRACT: Processes the characters coming in from USART. In this case,
|
5 | * this is the port connected to the gps receiver.
|
6 | *
|
7 | * INPUT: newchar Next character from the serial port.
|
8 | * OUTPUT: None
|
9 | * RETURN: None
|
10 | */
|
11 | {
|
12 | static unsigned char commas; // Number of commas for far in sentence |
13 | static unsigned char index; // Individual array index |
14 | |
15 | if (newchar == 0) // A NULL character resets GPS decoding |
16 | {
|
17 | commas = 25; // Set to an outrageous value |
18 | sentence_type = FALSE; // Clear local parse variable |
19 | return; |
20 | }
|
21 | |
22 | if (newchar == '$') // Start of Sentence character, reset |
23 | {
|
24 | commas = 0; // No commas detected in sentence for far |
25 | sentence_type = FALSE; // Clear local parse variable |
26 | return; |
27 | }
|
28 | |
29 | if (newchar == ',') // If there is a comma |
30 | {
|
31 | commas += 1; // Increment the comma count |
32 | index = 0; // And reset the field index |
33 | return; |
34 | }
|
35 | |
36 | if (commas == 0) |
37 | {
|
38 | switch(newchar) |
39 | {
|
40 | case ('C'): // Only the GPRMC sentence contains a "C" |
41 | sentence_type = GPRMC; // Set local parse variable |
42 | break; |
43 | case ('S'): // Take note if sentence contains an "S" |
44 | sentence_type = 'S'; // ...because we don't want to parse it |
45 | break; |
46 | case ('A'): // The GPGGA sentence ID contains "A" |
47 | if (sentence_type != 'S') // As does GPGSA, which we will ignore |
48 | sentence_type = GPGGA; // Set local parse variable |
49 | break; |
50 | }
|
51 | |
52 | return; |
53 | }
|
54 | |
55 | if (sentence_type == GPGGA) // GPGGA sentence decode initiated |
56 | {
|
57 | switch (commas) |
58 | {
|
59 | case (1): // Time field, grab characters |
60 | Time_Temp[index++] = newchar; |
61 | return; |
62 | case (2): // Latitude field, grab chars |
63 | Latitude_Temp[index++] = newchar; |
64 | return; |
65 | case (3): |
66 | Northsouth_Temp = newchar; |
67 | return; |
68 | case (4): // Longitude field, grab chars |
69 | Longitude_Temp[index++] = newchar; |
70 | return; |
71 | case (5): |
72 | Eastwest_Temp = newchar; |
73 | return; |
74 | case (7): // Satellite field, grab chars |
75 | Satellites_Temp[index++] = newchar; |
76 | return; |
77 | case (9): // Altitude field, grab chars |
78 | Altitude_Temp[index++] = newchar; |
79 | return; |
80 | }
|
81 | |
82 | return; |
83 | } // end if (sentence_type == GPGGA) |
84 | |
85 | if (sentence_type == GPRMC) // GPGGA sentence decode initiated |
86 | {
|
87 | switch (commas) |
88 | {
|
89 | case (7): // Speed field, grab characters |
90 | Speed_Temp[index++] = newchar; |
91 | return; |
92 | case (8): // Course field, grab characters |
93 | Course_Temp[index++] = newchar; |
94 | return; |
95 | }
|
96 | |
97 | return; |
98 | } // end if (sentence_type == GPRMC) |
99 | |
100 | return; |
101 | |
102 | } // End MsgHandler(unsigned char newchar) |
doch ganz schön lang, hätte man anhängen sollen,.. AxelR.
In der Procycon avrlib sind auch NMEA Parser drin: http://hubbard.engr.scu.edu/embedded/avr/avrlib/ Falls einen Gleitkomma zu aufgebläht ist muss man sie sich etwas anpassen, aber das Prinzip ist OK.
Nach meinem Skiurlaub (GPS Datenaufzeichnung war wieder mit dabei) heute die versprochenen Programmschnipsel. Sie entstanden unter Verwendung der hier im Forum aufgeworfenen Themen: „MSP430 UART Zeichenkette ausfiltern „ + „GPS Datenstrom filtern“ Es wäre sinnvoll, hier mal nachzulesen. Mein Prinzip ist folgendes: alle ankommenden Zeichen werden in ein 1024 bytes großes Feld [Tabelle_roh] geschrieben. Wird die im Interrupt-Unterprogramm __interrupt void usart0_rx (void) festgelegte Zeichenfolge erkannt, ist das Ende des Datensatzes $GPGGA erreicht und es werden die 147 davor liegenden Zeichen aus dem Feld [Tabelle_roh ] ausgelesen, um dann weiter verarbeitet zu werden. (auf SM-Karte speichern, ….) Zur Anzeige von Geschwindigkeit, Koordinaten, Uhrzeit usw. werden die aus dem Internet herunterladbaren Programme „gps_diag.zip“ und „VisualGPSInstall.exe“ verwendet, welche die Datensätze auswerten. Man kann auch ein Navigationsprogramm verwenden und dort die Datensätze abspielen. Dann hat man sogar eine Landkarte dazu. Wolfgang
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.