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
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
@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.
@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
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
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!
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
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)
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
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.
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
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.
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 (?)
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''