fwallenwein schreibt
Ich habe im mikrocontroller.net ein interessantes NMEA Logger Projekt gefunden. Der Author hat uns erlaubt sein Projekt hier vorzustellen.
!!! Danke an Thomas für dieses Projekt !!!

Vorwort
Das Gerät dient dazu, eine mit dem Boot, Auto, Motorrad, Fahrrad, zu Fuß etc. zurückgelegte Route
aufzuzeichnen um sich diese nachher am PC ansehen zu können. Die aktuelle Position wird dabei von einer seriellen
GPS-Maus geliefert.
Die aufgezeichnete Route kann dann beispielsweise in Google Earth angezeigt werden.
Features:
- Aufzeichnung von maximal 3276 Datenpunkten
- Aufzeichungszyklus 10 Sekunden
- 100 Koordinaten lassen sich als Markierung (sogenannte Waypoints) speichern
- Export der Routen in das GPX-Format (XML)
- Export der Routen z.B. nach Google Earth
Hier mal ein Beispiel wie so etwas dann in Google Earth aussehen könnte:

Zugehörige GPX-Route (ohne Waypoints):
Siehe : Motorrad_Route_1.gpx
GPS-Maus
Für das Gerät wird eine externer GPS-Empfänger (GPS-Maus) benötigt, die über einen seriellen Anschluss (kein USB!) verfügt
und über diesen die Daten im standardisierten NMEA-0183 Datenformat ausgibt.
Die von mir verwendete Maus bezieht ihren Strom über den PS/2-Anschluss des PCs. Da im 6-poligen Mini-DIN-Stecker
des Verteilers alle Signale vorhanden sind, habe ich den Anschluss des Gerätes hierauf ausgelegt um den Kabelsalat
unterwegs gering zu halten. Weiterhin sind die TxD/RxD-Leitungen auch im TTL-Level vorhanden. Das Gerät verwendet
diese Leitungen um die Stromaufnahme zu reduzieren, da der Pegelwandler MAX232 unterwegs abgeschaltet werden kann.
Aufzeichnungsformat
Die GPS-Maus liefert einiges an Informationen aus, z.B. über die zur Zeit erreichbaren Satelliten, die
Genauigkeit der Messung und einiges mehr.
Hier interessiert aber nur die aktuelle Uhrzeit und Datum, sowie Breiten- und Längengrad. Zusätzlich wird noch
die Höhe aufgezeichnet, auch wenn diese bei meinem GPS-Empfänger nicht sonderlich genau zu sein scheint.
Da die Positionsdaten lediglich abgespeichert werden sollen, werden die von der GPS-Maus im ASCII-Format
empfangenen Daten in ein möglichst speichersparendes Format gewandelt.
Ein im EEPROM gespeicherter Datensatz hat dabei folgenden Aufbau:
Datum
Datentyp
Beispiel NMEA-ASCII
Beispiel Datentyp
Größe in Byte
| date |
unsigned long |
050806 |
50806 |
4 |
| time |
unsigned long |
121630.611 |
121630 |
4 |
| latitude |
unsigned long |
5215.3472 |
52153472 |
4 |
| longitude |
unsigned long |
5215.3472 |
52153472 |
4 |
| latitude_ns |
char |
N |
N |
1 |
| longitude_ew |
char |
E |
E |
1 |
|
|
|
|
20 |
Bedienung und Anzeige
Die Bedienung des Gerätes erfolgt über die 2 Tasten, die mehrere Funktionen besitzen.
Beim Einschalten:
- Start-Taste gedrückt: Wechselt in den Übertragungsmodus, die GPS-Maus muss in diesem Modus vom Gerät
abgezogen werden
- Stop-Taste gedrückt: Beginnt einen neuen Track
Im Betrieb:
- Start-Taste: Startet das Logging
- Start-Taste wenn Logging aktiv: Aktuelle Koordinate wird als Wegmarkierung gespeichert
- Stop-Taste: Stoppt das Logging
Vor dem Ausschalten des Gerätes sollte der Logging Vorgang gestoppt werden.
Damit wird der aktuelle Index im EEPROM gespeichert und der Track kann
beim nächsten Einschalten an dieser Stelle fortgesetzt werden.
Anzeigen der Duo-LED rot/grün:
- Grün im Sekundentakt ein/aus: Gerät im Übertragungsmodus
- Grün blitzt kurz jede Sekunde: Aufzeichnungsmodus aktiv, Empfang OK
- Rot blitzt kurz jede Sekunde: GPS-Empfang reicht nicht für eine 2D-Positionsbestimmung
- Rot/Grün blitzen gleichzeitig einmal pro Sekunde: Logging aktiv und Empfang schlecht
Schaltung
An der Schaltung ist eigentlich nichts besonderes. Der Atmega8 ist in Standardbeschaltung, für einen ISP musste auch noch
Platz sein um den AVR im SMD-Gehäuse zu programmieren.
Als Spannungsversorgung ist ein Step-Up Konverter vom Typ LT1073
notwendig, der die Spannung von den zwei Batterie oder Akku-Zellen auf
die
benötigten 5V wandelt. Dieser Wandler benötigt auf der Ausgangsseite
einen Kondensator mit geringen inneren
Verlustwiderstand (Low-ESR). Diese sind etwas schwer zu bekommen, und
von den handelsüblichen Elkos bekommt man nur
selten Datenblätter in denen der ESR aufgelistet ist. Unschön ist auch
noch der Preis des Wandlers von fast 5 Euro,
aber eine günstigere Lösung habe ich noch nicht gefunden.

Layout
Stückliste
Schaltplan
Bezeichnung / Funktion
Quelle
Best.Nr.
Anzahl
| - |
Gehäuse |
Conrad |
- |
- |
| - |
Halter für 2 Microzellen (AAA) Lötfahnen |
Reichelt |
HALTER 2XUM4-NLF |
1 |
| IC1 |
Atmel AVR RISC Controller Atmega8, TQFP32 |
Reichelt |
ATMEGA 8-16 TQ |
1 |
| IC2 |
RS232E Interface, SO-16 |
Reichelt |
MAX 202 CSE |
1 |
| IC3 |
Serielles CMOS EEPROM, 5V, 64kB, DIP8 |
Reichelt |
ST 24C512 BN6 |
1 |
| IC4 |
DC-DC Wandler 5V, DIP-8 |
Reichelt |
LT 1073 CN8-5 |
1 |
| L1 |
Drosselspule, Festinduktivität, axial 68µH |
Reichelt |
SMCC 68µ |
1 |
| D1 |
Schottky-Diode 1N5818 |
Reichelt |
1N 5818 |
1 |
| D2 |
Duo LED, 5mm, 3 Pin, rot/grün |
Reichelt |
LED 5 RG-3 |
1 |
| R1 |
Widerstand 100 Ohm, SMD 1206 |
Reichelt |
SMD 1/4W 100 |
1 |
| R2 |
Widerstand 10 kOhm, SMD 1206 |
Reichelt |
SMD 1/4W 10K |
1 |
| R3, R4 |
Widerstand 470 Ohm, SMD 1206 |
Reichelt |
SMD 1/4W 470 |
2 |
| C1, C4, C6, C7, C8, C9, C10 |
SMD Vielschicht Kondensator 100nF 1206 |
Reichelt |
X7R-G1206 100N |
7 |
| C2, C3 |
SMD Vielschicht Kondensator 15pF 0805 |
Reichelt |
NPO-G0805 15P |
2 |
| C5 |
Elko radial, Low ESR, 100µ 50V |
Conrad |
446122 |
1 |
| P1, P2 |
SMD Kurzhubtaster |
Reichelt |
TASTER 9316 |
2 |
| Q1 |
Standardquarz 3,686411 MHz |
Reichelt |
3,686411HC49U-S |
1 |
| Q2 |
Mosfet BSS84P, SMD, SOT23 |
Reichelt |
BSS84P SMD |
1 |
| X1 |
Sub-D Buchse 9-polig für Printmontage |
Reichelt |
D-SUB BU 09EU |
1 |
| - |
Stiftleiste |
- |
- |
- |
| - |
Lötnägel |
- |
- |
- |
AVR und PC Software
Um die Daten vom PC aus abzuholen, stellt dieser eine Anfrage an den Controller.
Ein Datensatz ist ähnlich dem NMEA-Protokoll aufgebaut, damit hierfür der gleiche Parser
verwendet werden kann.
Einstellungen der seriellen Schnittstelle: 4800 Baud, 1 Startbit, 1 Stopbit, keine Parität
Es stehen dabei folgende Befehle zur Verfügung:
PC
Richtung
Logger
Beschreibung
| $TREQ* |
--> |
|
Anzahl der gespeicherten Trackpunkte |
| |
<-- |
$TCNT,n* |
n = Anzahl |
| |
|
|
|
| $TSET,n* |
--> |
|
Trackpunkt n Abfragen |
| |
<-- |
$ddddddddddttttttttttBBBBBBBBBBLLLLLLLLLLbl* |
d = Datum [ulong]
t = Uhrzeit [ulong]
B = Breite [ulong] Komma an 5.Stelle
L = Länge [ulong] Komma an 6. Stelle
b = Breite [char] n/e
l = Länge [char] e/w
|
| |
|
|
|
| $WREQ* |
--> |
|
Anzahl der gespeicherten Wegpunkte |
| |
<-- |
$WCNT,n* |
n = Anzahl |
| |
|
|
|
| $WSET,n* |
--> |
|
Wegpunkt n Abfragen |
| |
<-- |
$nnnnn* |
n = Wegpunkt Nr. mit führenden Nullen |
To Do
- Überwachen der Batteriespannung
- Einstellen des Aufzeichnungsintervalls (vom PC oder per Tasten am Gerät?)
- Speichern der Koordinaten nur bei Positionsänderung
- ...
Infos und Links
Der original Artikel dieses Projektes bei
www.mikcontroller.net
Allgemeine Infos zur Funktionsweise von GPS (auf deutsch):
http://www.kowoma.de/gps/
GPX-Track-Viewer Seite, Auswertung der EXIF-Informationen von Bildern:
http://www.kompf.de/trekka/
Beschreibung des GPX-Datenformates:
http://www.topografix.com/gpx.asp
: