www.mikrocontroller.net

Forum: Codesammlung GPS-Logger mit gpx-Export

Autor: Thomas (Gast)
Datum: 13.12.2006 19:40
Dateianhang: AVR_GPS_Logger.zip (360,3 KB, 1647 Downloads)

Hallo,
hier mal ein (weiteres) GPS-Projekt das ich mir letzten Sommer gebastelt
habe:
Ein AVR Atmega 8 zeichnet die Positionsdaten einer seriellen GPS-Maus in
einem 64k EEPROM auf.
Dies reicht für 3200 Datenpunkte. Aufzeichnungszyklus ist einstellbar.
Bedient wird das Gerät über 2 Tasten, als Statusanzeige dient eine
zweifarbige LED.
Die aufgezeichneten Daten werden dann über eine serielle Schnittstelle
zum PC geschickt.
Auf diesem ist ein Windows-Programm (Konsolenanwendung) vorhanden, das
die Daten entgegennimmt und sie im GPX-Datenformat
abspeichert. Dies ist ein standardisiertes XML-Datenformat, das u.a.
auch Google Earth gelesen werden kann.
So kann man sich die aufgezeichnete Route nachher z.B. in Google Earth
ansehen und nachfliegen, oder den Wegpunkten Fotos einer
Digitalkamera zuordnen.
Auf der ToDo-Liste stehen noch einige Punkte, vielleicht hat ja jemand
anderes noch eine Anregung (z.B. MMC-Karte anstatt
RS232 und EEPROM).

Ich habe das Gerät bei einigen Motorradfahrten dabei gehabt und es hat
soweit immer gut funktioniert. Die Laufzeit ist
dabei leider eher aufgrund der geringen Akku-Kapazität begrenzt. Wenn
man ein etwas größeres Gehäuse wählt könnte man durch
verwenden von Mignon-Akkus diese aber erweitern.


Im Archiv enthalten:
- C-Programm für den AVR (AVR-GCC)
- Windows Konsolen-Programm in C (mit DevCpp)
- Kurzdokumentation (index.html) mit ein paar Bildchen
- Beispielroute, kann testweise in Google-Earth geladen werden)
- Schaltplan (als Bild und Eagle-Schematic/Layout)

Gruß
Thomas
Autor: Gast (Gast)
Datum: 13.12.2006 21:00

Prima gemachtes Projekt !!
Bitte auch die Hex- und Exe-Datei :-)
Autor: Christoph Borowski (cborowski)
Datum: 14.12.2006 10:25

Hallo Thomas,

ich habe den Sourcecode eben überflogen. Für mich als Anfänger sehr
informativ und lehrreich (Nutzung von Timern, Interrupts, RS232 etc.).
Vor allem deshalb, weil ich selbst gerade dabei bin mir ein einfaches
GPS-System (serielle GPS-Maus + ATmega8 + Display) zur Anzeige der
relevanten GPS-Daten zu bauen.
Aber ein paar Frage habe ich jetzt auch schon... laut dem Schema ist die
GPS-Maus direkt an PD0 (RXD) angeschlossen und nicht über einen MAX232
o. ä. Pegelwandler. Stimmen da die Pegel? Was für eine GPS-Maus ist das?
Der ATmega8 wird mit 3.69MHz getaktet und die GPS-Maus Daten kommen mit
4800 Baud rein. Unter der Annahme, dass Du jede Sekunde (sehe ich das
richtig?) loggst... wieviel Zeit bleibt am Ende aller Tätigkeiten übrig
bis der nächste  NMEA-Datensatz reinkommt? Oder ist das eher irrelevant,
weil (so wie ich das verstanden habe) Empfang der NMEA-Datensätze und
Auswertung/Logging asynchron laufen mit dem Buffer als NMEA-Daten
Zwischenspeicher?

Gruss
Christoph
Autor: Thomas (Gast)
Datum: 14.12.2006 18:35

@Christpoh
Meine GPS-Maus (LC-N-102 von landolt.de) besitzt einen Zwischenstecker
(PS/2 wie Tastatur) auf dem RxD und TxD einmal im TTL und im RS232-Pegel
vorliegen. Um den Strom für den MAX232 zu sparen, habe ich von der
GPS-Maus die TTL Signale genommen.
Die meisten seriellen Mäuse besitzen ja auch diesen PS/2-Stecker (für
PDAs), ich weiß jedoch nicht ob meine Belegung Standard ist. Das müsste
dann bei der verwendeten Maus nochmals überprüft werden.
Universeller wäre die Schaltung mit RS232 sicherlich.

Der Loggin-Zyklus ist in dieser:
> uint16_t eeStoreCycle EEPROM = 10;
Zeile auf 10s eingestellt.
Eine Sekunde wäre auch gar nicht sinnvoll, da bei meiner GPS-Maus nur
ca. alle 2 Sekunden ein neues Telegramm eintrudelt.
Der Datenempfang auf der seriellen Schnittstelle wird wie du schon
geschrieben hast nur im SIG_UART_RECV-Interrupt behandelt, in dem die
Daten dann in den Puffer geschrieben werden. Wichtig ist nur, dass
dieser Puffer die ausreichende Größe für maximal eine Zeile ($ bis \r\n)
plus Reservepuffer für die Dauer der Verarbeitung eines Datensatzes
besitzt.
Während des Schreibens der Daten ins Eeprom ist der Interrupt
deaktiviert, darum lösche ich danach auch den UART-Puffer da es in
diesem Fall sein kann, dass Zeichen verloren gegangen sind.

btw: Viele Codefragmente stammen aus der AVR-Lib oder auch aus
Codebeispielen hier aus dem Forum, man muss ja nicht alles neu erfinden
;-)

@Gast
exe-Dateien aus unbekannten Quellen öffne ich selber nicht gerne, darum
habe ich diese entfernt. Gleiches gilt
für die Hex-Datei. Man muss zusätzlich auch noch die eep-Datei ins
Eeprom schieben.
Autor: Christoph Borowski (cborowski)
Datum: 14.12.2006 19:47

@Thomas
Danke für die Erläuterungen. Jetzt werde ich sehen, wie gut ich mit
meinem Projekt vorankomme. Wenn es fertig ist, dann stelle ich das auch
hier rein.

Gruss
Christph
Autor: Nik Bamert (nikbamert)
Datum: 15.12.2006 16:23

Hallo Thomas,

Cooles Projekt!
Dies hat mich gleich auf die Idee gebracht sowas in der Art auch zu
bauen, ich habe mir daher auf ric*rdo eine gebrauchte GPS maus gekauft.
Ich weiss noch nicht wann ich sie hier haben werde, allerdings ist daran
auch so ein PS/2 Stecker verbaut. Hast du die Steckerbelegung einfach
durch ausprobieren herausgefunden oder hast du gaanz zufälligerweise
eine Grafik die das ganze näher erläutert? Ich werde zwar auch noch
einen Adapter auf RS232 mitgeliefert bekommen, aber da du ja sagst auf
dem PS/2 Stecker würden auch Signale mit TTL Pegel anliegen, dann wäre
das ja für die direkte Verbindung mit einem AVR geradezu super geeignet
und der Kabalsalat mit dem Adapter würde entfallen... ;-)

Nik
Autor: Thomas (Gast)
Datum: 15.12.2006 16:55

Bei meiner Maus war ein kleines Handbuch bei, wo auch die
Steckerbelegung angegeben ist.
Bei diesem ist:
1 - Rx (TTL)
2 - Rx (RS232)
3 - GND
4 - Tx (RS232)
5 - Tx (TTL)
6 - +5V

Pin-Nummern nach Grafik auf
http://de.wikipedia.org/wiki/Bild:PS2.png

Ich denke aber mal dass diese Belegung nur für die Maus meines
Herstellers gilt. Also auf jeden Fall die Doku der eigenen Maus prüfen!
Autor: Frank W. (frankw)
Datum: 15.12.2006 17:06

Hi  Thomas (Gast),

sag mal, hast Du ne E-Mail Adresse unter der man Dich erreichen kann ?

Gruss
Frank
Autor: Christoph Borowski (cborowski)
Datum: 15.12.2006 17:19

Hallo,

ich kann Thomas nur zustimmen, was die Belegung am PS/2 Stecker angeht.
Die ist von Hersteller zu Hersteller unterschiedlich. Also auf jeden
Fall die Hersteller-Angaben besorgen.

Gruss
Christoph
Autor: Thomas (Gast)
Datum: 15.12.2006 17:57

Steht die Email nicht im Quellcode?
Ansonsten: saula ät gmx punkt de
Autor: Nik Bamert (nikbamert)
Datum: 21.12.2006 16:11

Hallo,

heute ist nun endlich meine GPS maus angekommen. Nun habe ich allerdings
eine Frage - kann es sein dass die Positionsbestimmung mit 3 Satelitten
SEHR ungenau ist? Ich schau mir direkt die Ausgaben am Terminal an, un
das Teil gibt mir Koordinaten von einem Ort der 20 kilometer von hier
entfernt ist aus ? Sowohl die Daten im GPRMC als auch die des GPGGA
Strings sind so ungenau :-( Das kann doch nicht normal sein?


Nik

EDIT: ausser GoogleEarth würde die Koordinaten an einem falschen Ort
anzeigen, gibts sonst noch was womit ich das überprüfen könnte? (habe
gerade keine "altmodische" Landkarte zur Hand)
Autor: Frank W. (frankw)
Datum: 21.12.2006 16:53

nur so ne Idee,

Du könntest mal nachschauen auf welches Kartendatum Dein GPS z.Z.
eingestellt ist. Google Earth benutzt meines Wissens WGS84. Wenn Deine
Maus aus was anderes eingestellt ist, dann kann das schon Abweichungen
erklären.

Gruss
Frank
Autor: Thomas (Gast)
Datum: 21.12.2006 17:24

Eigentlich sollten sogar 2 Satelliten ausreichen, um wenigstens eine
2D-Positionsbestimmung zu machen. 20km Abweichung sind aber sehr viel.

War die GPS-Maus lange ausgeschaltet, oder wurde ausgeschaltet an eine
weit entfernte Position gebracht, so dauert es auch eine Weile bis sich
die GPS-Maus die ganzen Daten der Satelliten zusammengesammelt hat.

Um sich die NMEA-Daten etwas zusammengefasster und grafisch darstellen
zu lassen ist auch Visualgps
http://www.visualgps.net/
ganz gut zu gebrauchen.
Autor: Nik Bamert (nikbamert)
Datum: 21.12.2006 17:53

Danke für eure schnellen Antworten :-)

>War die GPS-Maus lange ausgeschaltet, oder wurde ausgeschaltet an eine
>weit entfernte Position gebracht, so dauert es auch eine Weile bis sich
>die GPS-Maus die ganzen Daten der Satelliten zusammengesammelt hat.

Ich habe die Maus über Ric*rdo gekauft und interessantwerweise : Der
Verkäufer wohnt ebenfalls ungefähr 20km von hier weg...die Maus wurde
also diese 20 km im ausgeschalteten Zustand per Post verschickt.
Ich habe die Maus nun mal 30 minuten laufen lassen, leider kommen immer
noch dieselben Koordinaten raus.

>Du könntest mal nachschauen auf welches Kartendatum Dein GPS z.Z.
>eingestellt ist. Google Earth benutzt meines Wissens WGS84.

Wie könnte ich feststellen welches Kartendatum meine GPS maus verwendet?
Ich werde mir nun mal VisualGPS herunterladen und ein wenig testen...und
hoffen dass das Ding nicht irgendwie kaputt ist.

Grüsse,
Nik
Autor: Thomas (Gast)
Datum: 21.12.2006 18:25

Hast du die NMEA-Koordinaten denn auch umgerechnet?

Im NMEA-Format wird der Breiten und Längengrad nämlich in Grad und
Minute mit Nachkomma angegeben.
In Google-Earth hast du Grad + Minuten + Sekunde mit Nachkomma, das
musst du dann dementsprechend umrechnen.
Autor: Nik Bamert (nikbamert)
Datum: 21.12.2006 18:32

Jaa ganz genau (oder eben auch nicht :D). Ich bin auch gerade darauf
gekommen, dass ich das nicht gemacht habe... Ganz schön fände ich
einfach Grad als Dezimalzahl mit x Nachkommastellen, so könnte man das
dann nämlich direkt in ein kml File auf eine SD karte speichern...
Dann verstehe ich auch endlich weshalb direkt aus der GPS Maus immer so
merkwürdige Koordinaten rauskommen wie xxyy.yyyyyyy, dann ist es
warscheinlich so das x die Grad sind und yy die Minuten (?)
Autor: Thomas (Gast)
Datum: 21.12.2006 18:53

Ich zitiere mal aus Kowoma:

In NMEA:

 00739.3538, E

entspricht 007° 39.3538' östliche Länge

Du hast also 7°.
Dann 39,3538 Minuten * 60 Sekunden/Minute = 2361.228 Sekunden

 2361.228 / 60 = 39 Minuten

 2361.228 mod 60 = 21.228 Sekunden

Also 7°39'21.228''

Autor: Wolfgang (Gast)
Datum: 22.12.2006 19:28

Moin Thomas,

kannst du mich mal kontaktieren?

Gruss Wolfgang
wwbusch@gmail.com

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net