INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> hallo > ich hab probleme mit dem auslesen eines strings > der von einer GPS maus kommt. > > $GPGGA,065228.615,5121.9527,N,01226.2578,E,1,08,1.0,170.3,M,,,,0000*0B > > ich möchte die daten 5121.9527 und 01226.2578 auswerten und im eeprom abspeichern, > diese später wieder abrufen. und in ein Kartensystem importieren. > > mein gedanke war das "$" zu erkennen, und dann nach dem zweiten komma 9 zeichen zu loggen, > und nach dem 4. komma 10 zeichen ins eeprom zu schreiben. > > ich empfange mit der C-Control 1 aber immen nur die ersten 8 bis 10 zeichen, dann bricht die kommunikation ab > vom > > woran liegt das? > > ist der FIFO der Schnittstelle der C-Control zu klein? (8 byte etwa?) > wenn ich die daten langsam mit einem terminal schicke werden sie nähmlich verarbeitet. > > danke im Vorraus > > Michi Hallo, ist die GPS-Maus so eingestellt, daß sie nur GPGGA sendet? Wenn nicht, dann reicht die Abfrage auf "$" nicht zur eindeutigen Erkennung aus. Da ich Bedenken mit der Abfrage mit dem "$" hatte, habe ich es einfach ignoriert und warte auf "G....". Mit 4800 baud kann man übrigens maximal 4 Datensätze pro Sekunde senden und hat dann keine Zeit zur Weiterverarbeitung. Ich habe mich langsam herangetastet und sende nur benötigte Datensätze und das dann mit 9600 baud. Aus Zeitgründen benutze ich hier sehr viele Variablen und berechne erst an Ende die Zahlenwerte. Die Unit 2.0 ist schon ziemlich ausgereizt, wenn sie einmal pro Sekunde GPS-Daten verarbeiten, Kurs berechnen, Fluglage messen und aussteuern, Luftdruck messen,.... soll und alles auch noch als Datensätze abspeichern soll. Ich habe das Zerlegen der GPS-Daten so gelöst: ' ------------------------------------- GetGPSData ----------------------------------------------------------- function GPS_Auswertung() #GPGGA get zeichen if zeichen <> 71 then goto GPGGA ' G get zeichen if zeichen <> 80 then goto GPGGA ' P get zeichen if zeichen <> 71 then goto GPGGA ' G get zeichen if zeichen <> 71 then goto GPGGA ' G get zeichen if zeichen <> 65 then goto GPGGA ' A GPGGA empfangen for i = 1 to 8 ' ,hhmmss, entfernen get zeichen next i get bgggzehner ' 8 x entfernen + bggg get bggg get bgminzehner ' bgmin get bgmin get zeichen ' entfernen get bgsek1000er ' bgsek get bgsek100er get bgsekzehner get bgsekeiner for i = 1 to 3 ' ",N,"entfernen get zeichen next i get lggg100er get lgggzehner get lggg get lgminzehner ' lgmin get lgmin get zeichen ' . entfernen get lgsek1000er ' lgsek get lgsek100er get lgsekzehner get lgsekeiner for i = 1 to 5 get zeichen next i get satzehner ' Satelitenanzahl get satanzahl for i = 1 to 7 get zeichen next i get isthoehe10000er get isthoehe1000er get isthoehe100er get isthoehezehner get zeichen ' . entfernen get isthoeheeiner #GPVTG get zeichen if zeichen <> 71 then goto GPVTG ' G get zeichen if zeichen <> 80 then goto GPVTG ' P get zeichen if zeichen <> 86 then goto GPVTG ' V get zeichen if zeichen <> 84 then goto GPVTG ' T get zeichen if zeichen <> 71 then goto GPVTG ' G GPVTG empfangen get zeichen ' Komma entfernen get istkurs1000er get istkurs100er get istkurszehner get zeichen ' Punkt entfernen get istkurseiner for i = 1 to 14 ' 14 Zeichen entfernen get zeichen next i get speed100er get speedzehner get speed bggg = (bggg-48) +(10*(bgggzehner-48)) bgmin = (bgmin-48)+(10*(bgminzehner-48)) bgsek = (bgsekeiner-48)+(1000*(bgsek1000er-48))+(100*(bgsek100er-48))+(10*(bgsekzehner-48)) lggg = (lggg-48)+(100*(lggg100er-48))+(10*(lgggzehner-48)) lgmin = (lgmin-48)+(10*(lgminzehner-48)) lgsek = (lgsekeiner-48)+(1000*(lgsek1000er-48))+(100*(lgsek100er-48))+(10*(lgsekzehner-48)) GPSHoehe = (isthoeheeiner-48)+(10000*(isthoehe10000er-48))+(1000*(isthoehe1000er-48))+(100*(isthoehe100er-48))+(10*(isthoehezehner-48)) IstKurs = (istkurseiner-48)+(1000*(istkurs1000er-48))+(100*(istkurs100er-48))+(10*(istkurszehner-48)) speed = (speed-48)+(100*(speed100er-48))+(10*(speedzehner-48)) SatAnzahl = (10*(satzehner-48)+(satanzahl-48)) end function mfg Stefan |
Antwort schreiben |