Hallo, ich möchte ein GPS Modul welches NMEA Protokoll ausgibt an einen MSP430F149 anschließen. Anschließend möchte ich einige Daten des NMEA Streams auswerten. Was läuft: - Initialisierung des UART - Interruptroutine: TXBUF1 = RXBUF1; (Terminalprog sendet und empfängt einwandfrei) - GPS Modul sendet (kann ich auf dem Terminal sehen) - Rx vom uC ist auch am Tx vom GPS Modul !!! - Mit den Pegeln ist auch alles klar: Von der Elektronik ist es kein Problem. Was kann ich nicht: - Den String (z.B. $GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0,181102,0.4,E,A*19) empfangen und in einem String speichern um diesen "auseinandernehmen" zu können um an die einzelnen Infos zwischen den Kommas ',' zu kommen. - Diese einzelnen Infos sollen dann jeweils in einzelnen Variablen gespeichert werden. Dann kann ich diese sehrschnell sortieren, ausgeben oder ähnliches - Die Checksummenprüfung ( hier: *19 ) lasse ich erst mal weg Ich programmiere mit dem ICC430 - aber das dürfte dafür nicht so eine große Rolle spielen. Hat jemand einen Codeschnipsel die ich verwenden könnte. Eigentlich ist es nur einzelne Empfangene ASCII Zeichen in einen string schreiben und diesen bei den Kommas trennen. Danke schon mal... Rosalie
Es würde sich anbieten, den String schon beim Empfang auf die Variablen zu verteilen: Das "$" setzt einen Zähler zurück, der bei jedem neu eintreffenden Zeichen um 1 erhöht wird. Je nach Zählerstand wird die jeweilige Variable bearbeitet. Als weitere Trennzeichen benutzt man natürlich die Kommata.
Danke Gast, dass weiss ich schon. Ich hab erst mal das Problem die empfangenen Daten in einen String zu bekommen. Mir ist nicht ganz klar, wie ich die empfangenen Bytes in einen String bekomme. Ich schreibe mal die Interruptfunktion hin, die ich bereits habe: static char string1[8]; char i; char j = 0; .... #pragma interrupt_handler uart1_rx:UART1RX_VECTOR void uart1_rx (void) { while ((IFG2 & UTXIFG1) == 0); //TXBUF1 = RXBUF1; string1[j++] = RXBUF1; if (j > sizeof string1-1) { i = 0; j = 0; TXBUF1 = string1[i++]; } } Das funktionier eben nicht. Es werden nicht alle Zeichen wieder ausgegeben. Und selbst dann habe ich die erst in einem Array, oder ( string1[] ) ??? Vielleicht kann mir jemand sagen, wie ich aus empfangenen Daten an der UART1 einen String bekomme, den ich dann mit strtok() auseinandernehmen kann. Was ich möchte ich folgendes Ergebnis: Inhalt Variable_1 = $GPRMC Inhalt Variable_2 = 191410 Inhalt Variable_3 = A Inhalt Variable_4 = 4735.5634 . . . . Ein bißchen C-Code würde mir wahrscheinlich am besten helfen. Danke
C arbeitet dabei eher mit Pointern. Ich würde gar nicht erst den Weg über Strings gehen, sondern die Werte in Zahlen-Variablen ablegen. Entsprechende Wandel-Routinen findet man hier im Forum.
falls Interesse besteht, könnte ich mal mein Programmschnipsel suchen, mit welchem ich einzelne NMEA-Daten aus dem Datenstrom herausgefischt habe, um sie mit einem MSP430F1611 auf einer Smart Media Karte abzuspeichern
Hallo Wolfgang, es besteht immer noch Interesse ! Ich bin zwar immer noch dran, habe aber noch nicht den richtigen Durchbruch geschafft. Es will mir einfach nicht gelingen einen Datensatz von $ ... CR LF in einen String, oder wenigstens in ein array zu bekommen. Vielen Dank schon mal
Denke wir haben ein ähnliches Problem, vielleicht können wir uns ja gegenseitig helfen Beitrag "MSP430 GPS-Daten von UART0 Probleme" Gruss reflection
Hier ein Programmschnipsel. Bitte nicht über meinen Programmierstil schimpfen! nur wundern Es entstand 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. Falls etwas Brauchbares dabei ist, wäre ein Kurzkommentar nicht schlecht. Wolfgang
Habe alles nach Anleitung gemacht. Habe ein Conrad CR4 Modul. Geht aber nicht, ich krieg immer nur alles 0en raus... send habe ich auch immer brav gedrückt. Kann es sein, das wenn er keine gültigen Daten hat, er auch keine über die serielle Schnittstelle sendet? Ich habe hier im Wohnzimmer keinen Empfang. Wenn ich das Teil an USB anhänge und mit HyperTerminal schaue, erhalte ich Daten, auch wenn sie nicht korrekt sind. Möchte halt USB und seriell nutzen. Hat jemand noch nen Tipp auf Lager? Greets
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.