<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kaktus621</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kaktus621"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Kaktus621"/>
	<updated>2026-04-18T20:17:17Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=66644</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=66644"/>
		<updated>2012-06-02T06:19:48Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Benötigte Bauteile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.martin-matysiak.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Ich habe ein doppelseitiges Layout erstellt, bei dem fast ausschließlich SMD-Bauteile zum Einsatz kommen, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, halte ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C], [http://de.farnell.com/hammond/1551rtbu/case-abs-blue-50x50x20mm/dp/1511150 F] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist lediglich meine Vorgehensweise beim zusammenbau des Geräts. Es besteht kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage hinweisen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit den beiden größten Bauteilen sollte man noch warten.&lt;br /&gt;
Dies wäre zum einen der Quarz, der nach dem Verlöten mit zwei &amp;quot;Löthügeln&amp;quot; auf der Unterseite das Befestigen des Mikrocontrollers stören könnte.&lt;br /&gt;
Zum anderen handelt es sich um das GPS-Modul. Man kann es eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Aus diesem Grund habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Lötzinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Zinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Ein Beispiel dafür findet sich in der Abbildung (die 22pF Kondensatoren in der Nähe des Quarzes).&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren zum Verlöten bei beiden Teilen sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontroller besteht aus mehreren einzelnen Modulen, die in der Hauptdatei zusammengesetzt und abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.4&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Der jeweils aktuelle Quellcode + Makefile kann auf GitHub (siehe Downloads) abgerufen werden.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
In Version 1.2 wurde ein Fehler behoben, der allerdings nur sehr sporadisch aufgetreten ist. In seltenen Fällen kam es dazu, dass das Abschlusssymbol (0x03) nicht geschrieben wurde, sodass der Logger beim nächsten Start in einer Endlosschleife hing (da das Zeichen nicht gefunden werden kann). Dies kann nun nicht mehr passieren.&lt;br /&gt;
&lt;br /&gt;
In Version 1.3 wurden zwei Fehler behoben. Zum einen war das GPS-Modul entgegen des Kommentars auf 2 Hertz Aktualisierungsrate gestellt, zum anderen hat die UART Bibliothek regelmäßig versucht, über die Arraygrenzen des Eingabebuffers zu schreiben. Per Glück oder Zufall hatte dies davor keine schwerwiegenden Konsequenzen, ist aber jetzt behoben.&lt;br /&gt;
&lt;br /&gt;
In Version 1.4 wurde die Befehlsbibliothek für das GPS-Modul stark überarbeitet. Man kann nun die gewünschten NMEA-Kommandos über einen Parameter beim Befehl &#039;&#039;gps_init()&#039;&#039; konfigurieren. Insgesamt werden nun alle möglichen NMEA-Kommandos unterstützt. Die Kommandos werden auf Korrektheit (d.H. richtiger Anfang und richtige Prüfsumme) geprüft. Außerdem wird bei den Kommandos, bei denen es möglich ist, auch ermittelt, ob ein GPS-Fix vorliegt. Weiterhin wurde der gesamte Code in dieser Version aufgeräumt und dokumentiert (auf Englisch).&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Hierfür kann man das Tool &amp;quot;RawRead&amp;quot; verwenden, welches das Erstellen, Auslesen und Leeren von &#039;&#039;NoFS&#039;&#039;-Medien stark vereinfacht. Das Tool ist mittlerweile in Version &#039;&#039;&#039;2.0&#039;&#039;&#039; und nun als Python-Skript realisiert, sodass es auf allen Plattformen (Windows, Mac, Linux) problemlos eingesetzt werden kann. Zum Ausführen des Skripts benötigt man Python, für Windows werde ich noch eine vorkompilierte *.exe-Datei erstellen, sodass diese Voraussetzung entfällt. Weiterhin muss das Tool auf allen Plattformen mit Administrationsrechnen ausgeführt werden, da direkt auf das Laufwerk geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Gesteuert wird das das Programm ausschließlich über Kommandozeilenparameter. Für eine Übersicht an verfügbaren Befehlen kann man das Programm mit &amp;quot;python rawread.py --help&amp;quot; ausführen.&lt;br /&gt;
&lt;br /&gt;
RawRead besitzt einen Mechanismus, der automatisch das richtige Laufwerk auswählt, sodass man den Pfad nicht manuell spezifizieren muss. Auch, wenn man eine neue Karte erstmalig mit einem &#039;&#039;NoFS&#039;&#039; beschreiben möchte (Parameter &amp;quot;-c&amp;quot;), wird über ein bestimmtes Verfahren sichergestellt, dass ausschließlich auf die Speicherkarte (und nicht etwa auf die Systemfestplatte) geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
Hier mal der Weg, den ich für den Einsatz am Mac nutze, denn der Martin hat ja mit seinem RawRead.exe den Windows-Pfad beschritten.&lt;br /&gt;
&lt;br /&gt;
Um die Daten von der Karte zu lutschen, nutze ich &#039;&#039;/bin/dd&#039;&#039;, also ein Bordmittel am Mac. Die übliche Warnung, &#039;&#039;&#039;if&#039;&#039;&#039; und &#039;&#039;&#039;of&#039;&#039;&#039; nicht zu vertauschen, und das richtige Device zu nehmen, erwähne ich hiermit nur der Vollständigkeit halber. Evtl. Fahrlässigkeit kann fantastische Folgen haben.&lt;br /&gt;
 $ dd if=/dev/disk1 of=~/Desktop/dump.bin&lt;br /&gt;
Das File ist bei mir 2 GB groß -- je nach Karte halt. Das dauert ne Weile. Man kann ein Gefühl dafür entwickeln (oder es berechnen), wie lang der letzte Track war und wie viele Blöcke dazu von der Karte geholt werden müssen und dafür das Kommando mit &amp;lt;code&amp;gt;count=xyz&amp;lt;/code&amp;gt; verkürzen. Die Angabe des Device &amp;lt;code&amp;gt;/dev/disk1&amp;lt;/code&amp;gt; variiert natürlich je nach Bestückung mit Geräten am USB. Das richtige zu finden klappt mit &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; oder klicki-bunti mit dem &#039;&#039;System-Profiler&#039;&#039; (Snow Leo) oder &#039;&#039;Systeminformationen&#039;&#039; (Lion). Das File &amp;lt;code&amp;gt;dump.bin&amp;lt;/code&amp;gt; kann man dann dem Java-Programm &#039;&#039;NMEA-Toolbox&#039;&#039; zum Konvertieren vorwerfen. Java-Programme laufen auf dem Mac unter Snow Leo sofort und auch unter Lion direkt nach Installation der JRE ohne Mucken. So weit, so gut. Nun der zweite Teil:&lt;br /&gt;
&lt;br /&gt;
Das Präparieren der Karte für den nächsten Aufzeichnungslauf (vgl. Karte leeren im Abschnitt für PC) mache ich mit einem nachinstallierten Progrämmchen namens &#039;&#039;hexedit&#039;&#039;. Das kann genau das, was es im Namen trägt. Und es kann es auch auf Devices, nicht nur auf Files. Installiert habe ich es aus dem Debian-Package-Fundus, der für Mac-Nutzer über eins der Projekte [http://www.macports.org/ MacPorts] oder [http://www.finkproject.org/ Fink] Einzug findet. Das ist am Anfang etwas mühsam, lohnt sich aber insgesamt, speziell wenn man z.B. eine Toolchain für AVR oder ARM oder ähnliches installieren möchte. Mühsam ist es auch deshalb, weil es wird das Developer-Package (&#039;&#039;Xcode&#039;&#039;) von Apple als Voraussetzung verlangt. Ist z.B. MacPorts installiert, kann mit&lt;br /&gt;
 # port install hexedit&lt;br /&gt;
das Paket installiert werden. Wenn der &#039;&#039;hexedit&#039;&#039; läuft, macht man schnell noch das Device beschreibbar mit&lt;br /&gt;
 # chmod 666 /dev/disk1&lt;br /&gt;
und dann läßt sich mit &lt;br /&gt;
 # hexedit /dev/disk1&lt;br /&gt;
der Editor starten und die ersten Bytes der SD-Karte mit den 8 Bytes &#039;&#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039;&#039; beschreiben. Danach ist die Karte bereit für den neuen Einsatz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1p01_avr.zip|AVR-Studio Projektordner V1.1p01 Bugfix (*.zip, 19KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/GPS-Logger AVR-Quellcodes (V1.2+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/RawRead RawRead (V2.0+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60878</id>
		<title>Infrarot Auslöser für Nikon Kameras</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60878"/>
		<updated>2011-10-01T13:23:45Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Software */ fehlenden code ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von [http://martinmatysiak.de Martin Matysiak]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
[[Bild:innenansicht_ir_remote.jpg|thumb|300px|Innenansicht - Ja, das ist ein SSOP Controller, wo eigentlich ein DIP Controller sein sollte - ich hatte keine mehr übrig und der letzte ist durch einen kleinen Fehler gestorben ;-)]]&lt;br /&gt;
&lt;br /&gt;
Während eines Moments der Langeweile habe ich mich dazu entschieden, eine Infrarot-Fernbedienung für meine Nikon Digitalkamera zu bauen. Dabei stellte sich heraus, dass es sich dabei um ein extrem einfaches Projekt handelt, perfekt, wenn man einen Tag lang nichts zu tun hat. Die Fernbedienung hat eine Reichweite von mindestens 15 - 20 Meter, mehr konnte ich bislang nicht testen.&lt;br /&gt;
&lt;br /&gt;
Die Fernbedienung besteht hauptsächlich aus einem Mikrocontroller, der per Knopfdruck mit Strom versorgt wird. Daraufhin wird eine Infrarot-LED mit einer Frequenz von ca. 38kHz angesteuert, die ein bestimmtes Leuchtmuster an die Kamera sendet. Die Fernbedienung ist funktionsgleich zu Nikon&#039;s ML-L3 und funktioniert somit mit einer vielzahl von Nikon Kameras.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Für die Fernbedienung wird nur eine geringe Anzahl an Bauteilen benötigt. Wer öfter mit Elektronischen Schaltungen bastelt, wird vermutlich alle Bauteile lagernd haben. Nachfolgend eine genaue Auflistung:&lt;br /&gt;
&lt;br /&gt;
* Plastikgehäuse für die Schaltung (am besten, wenn es ein Fernbedienungsgehäuse wie im obigen Foto ist)&lt;br /&gt;
* Ein Stück Loch- oder Streifenrasterplatine&lt;br /&gt;
* 1x Atmel ATTiny13 Mikrocontroller&lt;br /&gt;
* 1x 8 MHz Quarzoszillator&lt;br /&gt;
* 1x 3V Knopfzelle (z.B. CR2032, vorzugsweise mit Lötfahnen)&lt;br /&gt;
* 1x Taster&lt;br /&gt;
* 1x Infrarot-LED&lt;br /&gt;
* 1x ca. 1 bis 2 Ohm Widerstand&lt;br /&gt;
* 1x 100 Ohm Widerstand&lt;br /&gt;
* 1x 10 kOhm Widerstand&lt;br /&gt;
* 1x BC547 NPN Transistor (oder äquivalentes Modell)&lt;br /&gt;
* 2x 100 nF Kondensator&lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte die Fernbedienung auch mit dem internen Oszillator funktionieren. In der Praxis erwies sich der Einsatz eines externen Quarzoszillators allerdings deutlich zuverlässiger. Hier der Schaltplan der Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
[[Bild:schaltplan_nikon_ir_remote.png|center|thumb|500px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Ich werde hier kein Platinenlayout zur Verfügung stellen, da das Layout stark von der Wahl der Bauteile und des Gehäuses abhängt. Außerdem habe ich nicht erwähnt, ob ich DIP oder SMD Bauteile verwendet habe - such dir einfach die Form aus, die dir am besten passt! Ich persönlich habe eine Mischung aus beidem verwendet, da ich nur Bauteile verwenden wollte, die ich bereits lagernd hatte.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
Bevor ich den eigentlichen Quellcode vorstelle, möchte ich ein paar Worte über das Protokoll verlieren, welches die Fernbedienung einsetzt. Das Infrarot-Signal wird mit einer Frequenz von etwa 38,4 Kilohertz moduliert. Das bedeutet, wenn die LED &amp;quot;an&amp;quot; ist, leuchtet sie nicht durchgehend, sondern blinkt 38400 mal in der Sekunde. Weiterhin muss die LED zwei mal in einem ganz bestimmten Muster leuchten (mit einer Pause von 63ms), damit sie von der Kamera erkannt wird. Im Quellcode nenne ich dieses Muster &amp;quot;burst&amp;quot;. Glücklicherweise haben sich bereits einige Leute mit dieser Thematik befasst und das Signal der Original-Fernbedienung genaustens analysiert. Ich habe die Daten von BigMike&#039;s Webseite&amp;lt;ref&amp;gt;[http://www.bigmike.it/ircontrol/ www.bigmike.it/ircontrol]&amp;lt;/ref&amp;gt; genommen.&lt;br /&gt;
&lt;br /&gt;
Der Quellcode für den Mikrocontroller ist relativ simpel. Da der Schalter einfach die Stromversorgung aktiviert und nicht etwa als digitaler Eingang agiert, ist das einzige, was der Controller tun muss, direkt nach dem Start das richtige Muster auszugeben. Diese Tatsache spiegelt sich in der extrem kurzen Hauptmethode wieder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int main(void) {&lt;br /&gt;
  // Initialize port&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; IO_IR);&lt;br /&gt;
 &lt;br /&gt;
  burst();&lt;br /&gt;
  _delay_ms(63);&lt;br /&gt;
  burst();&lt;br /&gt;
   &lt;br /&gt;
  while(1) {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das war einfach, nicht wahr? Viel interessanter ist die burst Methode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
#define F_CPU 8000000UL&lt;br /&gt;
&lt;br /&gt;
// DO NOT USE PB3! PIN IS USED AS CLOCK INPUT!&lt;br /&gt;
#define IO_IR PB4&lt;br /&gt;
&lt;br /&gt;
#define LED_ON() PORTB |= (1 &amp;lt;&amp;lt; IO_IR)&lt;br /&gt;
#define LED_OFF() PORTB &amp;amp;=~(1 &amp;lt;&amp;lt; IO_IR)&lt;br /&gt;
&lt;br /&gt;
// Length of a clock in microseconds (ca. 38,4kHz)&lt;br /&gt;
#define CLOCK_DURATION 9&lt;br /&gt;
&lt;br /&gt;
// Number of clocks per data burst&lt;br /&gt;
#define BURST_LENGTH 3088&lt;br /&gt;
&lt;br /&gt;
#include&amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include&amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
#include&amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Clock-counts at which the LED state has to be toggled&lt;br /&gt;
// The values are determined by experimenting, they work&lt;br /&gt;
// with a 8MHz crystal oscillator&lt;br /&gt;
const uint16_t thresholds[8] = {2,164, 2564, 2597, 2727, 2760, 3054, 3087};&lt;br /&gt;
 &lt;br /&gt;
// Sends a single data burst (two of them are needed)&lt;br /&gt;
void burst() {&lt;br /&gt;
  uint16_t clock = 0;&lt;br /&gt;
  uint8_t current_threshold = 0;&lt;br /&gt;
  uint8_t status = 0;&lt;br /&gt;
     &lt;br /&gt;
  while(clock++ &amp;lt; BURST_LENGTH) {&lt;br /&gt;
    if (clock == thresholds[current_threshold]) {&lt;br /&gt;
      status ^= 1;&lt;br /&gt;
      current_threshold++;&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    if (clock &amp;amp; status) {&lt;br /&gt;
      LED_ON();&lt;br /&gt;
    } else {&lt;br /&gt;
      LED_OFF();&lt;br /&gt;
    }      &lt;br /&gt;
         &lt;br /&gt;
    _delay_us(CLOCK_DURATION);&lt;br /&gt;
  }&lt;br /&gt;
     &lt;br /&gt;
  LED_OFF();&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun, was passiert hier? Ein Durchlauf der while-Schleife benötigt ungefähr 13 Mikrosekunden, wodurch die Modulationsfrequenz von 38.4 kHz erreicht wird. Während jeder Iteration wird ein Zähler inkrementiert. Dieser Zähler entspricht der Anzahl der bisher erfolgten Takte. Pro Durchlauf wird er mit einem Array von Schwellwerten verglichen. Wird ein Schwellwert erreicht, schaltet der LED Zustand von &amp;quot;an&amp;quot; auf &amp;quot;aus&amp;quot; oder umgekehrt (wobei &amp;quot;an&amp;quot; wie vorhin erwähnt Blinken mit 38.4 kHz bedeutet).&lt;br /&gt;
&lt;br /&gt;
Damit die LED also wirklich leuchtet, müssen zwei Bedingungen gelten:&lt;br /&gt;
&lt;br /&gt;
* Der aktuelle Takt ist ungerade (dadurch wird das Blinken mit Modulationsfrequenz erreicht)&lt;br /&gt;
* Der Zustand der LED ist &amp;quot;an&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Auch wenn die status Variable ein 8-bit Integer ist, verwende ich nur das niederwertigste Bit zur Indikation des Zustandes. Der Zähler wird bei jedem Schleifendurchlauf inkrementiert, das heißt, dass das niederwerigste Bit des Zählers bei jedem Durchlauf zwischen Null und Eins springt. Nun kann man einfach die beiden Variablen UND-verknüpfen - wenn das Ergebnis der Verknüpfung eine Eins ist, heißt es, dass beide Bedingungen erfüllt sind und die LED leuchten kann.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60874</id>
		<title>Infrarot Auslöser für Nikon Kameras</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60874"/>
		<updated>2011-10-01T08:26:10Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von [http://martinmatysiak.de Martin Matysiak]&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
[[Bild:innenansicht_ir_remote.jpg|thumb|300px|Innenansicht - Ja, das ist ein SSOP Controller, wo eigentlich ein DIP Controller sein sollte - ich hatte keine mehr übrig und der letzte ist durch einen kleinen Fehler gestorben ;-)]]&lt;br /&gt;
&lt;br /&gt;
Während eines Moments der Langeweile habe ich mich dazu entschieden, eine Infrarot-Fernbedienung für meine Nikon Digitalkamera zu bauen. Dabei stellte sich heraus, dass es sich dabei um ein extrem einfaches Projekt handelt, perfekt, wenn man einen Tag lang nichts zu tun hat. Die Fernbedienung hat eine Reichweite von mindestens 15 - 20 Meter, mehr konnte ich bislang nicht testen.&lt;br /&gt;
&lt;br /&gt;
Die Fernbedienung besteht hauptsächlich aus einem Mikrocontroller, der per Knopfdruck mit Strom versorgt wird. Daraufhin wird eine Infrarot-LED mit einer Frequenz von ca. 38kHz angesteuert, die ein bestimmtes Leuchtmuster an die Kamera sendet. Die Fernbedienung ist funktionsgleich zu Nikon&#039;s ML-L3 und funktioniert somit mit einer vielzahl von Nikon Kameras.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Für die Fernbedienung wird nur eine geringe Anzahl an Bauteilen benötigt. Wer öfter mit Elektronischen Schaltungen bastelt, wird vermutlich alle Bauteile lagernd haben. Nachfolgend eine genaue Auflistung:&lt;br /&gt;
&lt;br /&gt;
* Plastikgehäuse für die Schaltung (am besten, wenn es ein Fernbedienungsgehäuse wie im obigen Foto ist)&lt;br /&gt;
* Ein Stück Loch- oder Streifenrasterplatine&lt;br /&gt;
* 1x Atmel ATTiny13 Mikrocontroller&lt;br /&gt;
* 1x 8 MHz Quarzoszillator&lt;br /&gt;
* 1x 3V Knopfzelle (z.B. CR2032, vorzugsweise mit Lötfahnen)&lt;br /&gt;
* 1x Taster&lt;br /&gt;
* 1x Infrarot-LED&lt;br /&gt;
* 1x ca. 1 bis 2 Ohm Widerstand&lt;br /&gt;
* 1x 100 Ohm Widerstand&lt;br /&gt;
* 1x 10 kOhm Widerstand&lt;br /&gt;
* 1x BC547 NPN Transistor (oder äquivalentes Modell)&lt;br /&gt;
* 2x 100 nF Kondensator&lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte die Fernbedienung auch mit dem internen Oszillator funktionieren. In der Praxis erwies sich der Einsatz eines externen Quarzoszillators allerdings deutlich zuverlässiger. Hier der Schaltplan der Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
[[Bild:schaltplan_nikon_ir_remote.png|center|thumb|500px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Ich werde hier kein Platinenlayout zur Verfügung stellen, da das Layout stark von der Wahl der Bauteile und des Gehäuses abhängt. Außerdem habe ich nicht erwähnt, ob ich DIP oder SMD Bauteile verwendet habe - such dir einfach die Form aus, die dir am besten passt! Ich persönlich habe eine Mischung aus beidem verwendet, da ich nur Bauteile verwenden wollte, die ich bereits lagernd hatte.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
Bevor ich den eigentlichen Quellcode vorstelle, möchte ich ein paar Worte über das Protokoll verlieren, welches die Fernbedienung einsetzt. Das Infrarot-Signal wird mit einer Frequenz von etwa 38,4 Kilohertz moduliert. Das bedeutet, wenn die LED &amp;quot;an&amp;quot; ist, leuchtet sie nicht durchgehend, sondern blinkt 38400 mal in der Sekunde. Weiterhin muss die LED zwei mal in einem ganz bestimmten Muster leuchten (mit einer Pause von 63ms), damit sie von der Kamera erkannt wird. Im Quellcode nenne ich dieses Muster &amp;quot;burst&amp;quot;. Glücklicherweise haben sich bereits einige Leute mit dieser Thematik befasst und das Signal der Original-Fernbedienung genaustens analysiert. Ich habe die Daten von BigMike&#039;s Webseite&amp;lt;ref&amp;gt;[http://www.bigmike.it/ircontrol/ www.bigmike.it/ircontrol]&amp;lt;/ref&amp;gt; genommen.&lt;br /&gt;
&lt;br /&gt;
Der Quellcode für den Mikrocontroller ist relativ simpel. Da der Schalter einfach die Stromversorgung aktiviert und nicht etwa als digitaler Eingang agiert, ist das einzige, was der Controller tun muss, direkt nach dem Start das richtige Muster auszugeben. Diese Tatsache spiegelt sich in der extrem kurzen Hauptmethode wieder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int main(void) {&lt;br /&gt;
  // Initialize port&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; IO_IR);&lt;br /&gt;
 &lt;br /&gt;
  burst();&lt;br /&gt;
  _delay_ms(63);&lt;br /&gt;
  burst();&lt;br /&gt;
   &lt;br /&gt;
  while(1) {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das war einfach, nicht wahr? Viel interessanter ist die burst Methode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Clock-counts at which the LED state has to be toggled&lt;br /&gt;
// The values are determined by experimenting, they work&lt;br /&gt;
// with a 8MHz crystal oscillator&lt;br /&gt;
const uint16_t thresholds[8] = {2,164, 2564, 2597, 2727, 2760, 3054, 3087};&lt;br /&gt;
 &lt;br /&gt;
// Sends a single data burst (two of them are needed)&lt;br /&gt;
void burst() {&lt;br /&gt;
  uint16_t clock = 0;&lt;br /&gt;
  uint8_t current_threshold = 0;&lt;br /&gt;
  uint8_t status = 0;&lt;br /&gt;
     &lt;br /&gt;
  while(clock++ &amp;lt; BURST_LENGTH) {&lt;br /&gt;
    if (clock == thresholds[current_threshold]) {&lt;br /&gt;
      status ^= 1;&lt;br /&gt;
      current_threshold++;&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    if (clock &amp;amp; status) {&lt;br /&gt;
      LED_ON();&lt;br /&gt;
    } else {&lt;br /&gt;
      LED_OFF();&lt;br /&gt;
    }      &lt;br /&gt;
         &lt;br /&gt;
    _delay_us(CLOCK_DURATION);&lt;br /&gt;
  }&lt;br /&gt;
     &lt;br /&gt;
  LED_OFF();&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun, was passiert hier? Ein Durchlauf der while-Schleife benötigt ungefähr 13 Mikrosekunden, wodurch die Modulationsfrequenz von 38.4 kHz erreicht wird. Während jeder Iteration wird ein Zähler inkrementiert. Dieser Zähler entspricht der Anzahl der bisher erfolgten Takte. Pro Durchlauf wird er mit einem Array von Schwellwerten verglichen. Wird ein Schwellwert erreicht, schaltet der LED Zustand von &amp;quot;an&amp;quot; auf &amp;quot;aus&amp;quot; oder umgekehrt (wobei &amp;quot;an&amp;quot; wie vorhin erwähnt Blinken mit 38.4 kHz bedeutet).&lt;br /&gt;
&lt;br /&gt;
Damit die LED also wirklich leuchtet, müssen zwei Bedingungen gelten:&lt;br /&gt;
&lt;br /&gt;
* Der aktuelle Takt ist ungerade (dadurch wird das Blinken mit Modulationsfrequenz erreicht)&lt;br /&gt;
* Der Zustand der LED ist &amp;quot;an&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Auch wenn die status Variable ein 8-bit Integer ist, verwende ich nur das niederwertigste Bit zur Indikation des Zustandes. Der Zähler wird bei jedem Schleifendurchlauf inkrementiert, das heißt, dass das niederwerigste Bit des Zählers bei jedem Durchlauf zwischen Null und Eins springt. Nun kann man einfach die beiden Variablen UND-verknüpfen - wenn das Ergebnis der Verknüpfung eine Eins ist, heißt es, dass beide Bedingungen erfüllt sind und die LED leuchten kann.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60873</id>
		<title>Infrarot Auslöser für Nikon Kameras</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60873"/>
		<updated>2011-10-01T08:24:10Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einleitung==&lt;br /&gt;
&lt;br /&gt;
[[Bild:innenansicht_ir_remote.jpg|thumb|300px|Innenansicht - Ja, das ist ein SSOP Controller, wo eigentlich ein DIP Controller sein sollte - ich hatte keine mehr übrig und der letzte ist durch einen kleinen Fehler gestorben ;-)]]&lt;br /&gt;
&lt;br /&gt;
Während eines Moments der Langeweile habe ich mich dazu entschieden, eine Infrarot-Fernbedienung für meine Nikon Digitalkamera zu bauen. Dabei stellte sich heraus, dass es sich dabei um ein extrem einfaches Projekt handelt, perfekt, wenn man einen Tag lang nichts zu tun hat. Die Fernbedienung hat eine Reichweite von mindestens 15 - 20 Meter, mehr konnte ich bislang nicht testen.&lt;br /&gt;
&lt;br /&gt;
Die Fernbedienung besteht hauptsächlich aus einem Mikrocontroller, der per Knopfdruck mit Strom versorgt wird. Daraufhin wird eine Infrarot-LED mit einer Frequenz von ca. 38kHz angesteuert, die ein bestimmtes Leuchtmuster an die Kamera sendet. Die Fernbedienung ist funktionsgleich zu Nikon&#039;s ML-L3 und funktioniert somit mit einer vielzahl von Nikon Kameras.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Für die Fernbedienung wird nur eine geringe Anzahl an Bauteilen benötigt. Wer öfter mit Elektronischen Schaltungen bastelt, wird vermutlich alle Bauteile lagernd haben. Nachfolgend eine genaue Auflistung:&lt;br /&gt;
&lt;br /&gt;
* Plastikgehäuse für die Schaltung (am besten, wenn es ein Fernbedienungsgehäuse wie im obigen Foto ist)&lt;br /&gt;
* Ein Stück Loch- oder Streifenrasterplatine&lt;br /&gt;
* 1x Atmel ATTiny13 Mikrocontroller&lt;br /&gt;
* 1x 8 MHz Quarzoszillator&lt;br /&gt;
* 1x 3V Knopfzelle (z.B. CR2032, vorzugsweise mit Lötfahnen)&lt;br /&gt;
* 1x Taster&lt;br /&gt;
* 1x Infrarot-LED&lt;br /&gt;
* 1x ca. 1 bis 2 Ohm Widerstand&lt;br /&gt;
* 1x 100 Ohm Widerstand&lt;br /&gt;
* 1x 10 kOhm Widerstand&lt;br /&gt;
* 1x BC547 NPN Transistor (oder äquivalentes Modell)&lt;br /&gt;
* 2x 100 nF Kondensator&lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte die Fernbedienung auch mit dem internen Oszillator funktionieren. In der Praxis erwies sich der Einsatz eines externen Quarzoszillators allerdings deutlich zuverlässiger. Hier der Schaltplan der Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
[[Bild:schaltplan_nikon_ir_remote.png|center|thumb|500px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Ich werde hier kein Platinenlayout zur Verfügung stellen, da das Layout stark von der Wahl der Bauteile und des Gehäuses abhängt. Außerdem habe ich nicht erwähnt, ob ich DIP oder SMD Bauteile verwendet habe - such dir einfach die Form aus, die dir am besten passt! Ich persönlich habe eine Mischung aus beidem verwendet, da ich nur Bauteile verwenden wollte, die ich bereits lagernd hatte.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
Bevor ich den eigentlichen Quellcode vorstelle, möchte ich ein paar Worte über das Protokoll verlieren, welches die Fernbedienung einsetzt. Das Infrarot-Signal wird mit einer Frequenz von etwa 38,4 Kilohertz moduliert. Das bedeutet, wenn die LED &amp;quot;an&amp;quot; ist, leuchtet sie nicht durchgehend, sondern blinkt 38400 mal in der Sekunde. Weiterhin muss die LED zwei mal in einem ganz bestimmten Muster leuchten (mit einer Pause von 63ms), damit sie von der Kamera erkannt wird. Im Quellcode nenne ich dieses Muster &amp;quot;burst&amp;quot;. Glücklicherweise haben sich bereits einige Leute mit dieser Thematik befasst und das Signal der Original-Fernbedienung genaustens analysiert. Ich habe die Daten von BigMike&#039;s Webseite&amp;lt;ref&amp;gt;[http://www.bigmike.it/ircontrol/ www.bigmike.it/ircontrol]&amp;lt;/ref&amp;gt; genommen.&lt;br /&gt;
&lt;br /&gt;
Der Quellcode für den Mikrocontroller ist relativ simpel. Da der Schalter einfach die Stromversorgung aktiviert und nicht etwa als digitaler Eingang agiert, ist das einzige, was der Controller tun muss, direkt nach dem Start das richtige Muster auszugeben. Diese Tatsache spiegelt sich in der extrem kurzen Hauptmethode wieder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int main(void) {&lt;br /&gt;
  // Initialize port&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; IO_IR);&lt;br /&gt;
 &lt;br /&gt;
  burst();&lt;br /&gt;
  _delay_ms(63);&lt;br /&gt;
  burst();&lt;br /&gt;
   &lt;br /&gt;
  while(1) {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das war einfach, nicht wahr? Viel interessanter ist die burst Methode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Clock-counts at which the LED state has to be toggled&lt;br /&gt;
// The values are determined by experimenting, they work&lt;br /&gt;
// with a 8MHz crystal oscillator&lt;br /&gt;
const uint16_t thresholds[8] = {2,164, 2564, 2597, 2727, 2760, 3054, 3087};&lt;br /&gt;
 &lt;br /&gt;
// Sends a single data burst (two of them are needed)&lt;br /&gt;
void burst() {&lt;br /&gt;
  uint16_t clock = 0;&lt;br /&gt;
  uint8_t current_threshold = 0;&lt;br /&gt;
  uint8_t status = 0;&lt;br /&gt;
     &lt;br /&gt;
  while(clock++ &amp;lt; BURST_LENGTH) {&lt;br /&gt;
    if (clock == thresholds[current_threshold]) {&lt;br /&gt;
      status ^= 1;&lt;br /&gt;
      current_threshold++;&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    if (clock &amp;amp; status) {&lt;br /&gt;
      LED_ON();&lt;br /&gt;
    } else {&lt;br /&gt;
      LED_OFF();&lt;br /&gt;
    }      &lt;br /&gt;
         &lt;br /&gt;
    _delay_us(CLOCK_DURATION);&lt;br /&gt;
  }&lt;br /&gt;
     &lt;br /&gt;
  LED_OFF();&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun, was passiert hier? Ein Durchlauf der while-Schleife benötigt ungefähr 13 Mikrosekunden, wodurch die Modulationsfrequenz von 38.4 kHz erreicht wird. Während jeder Iteration wird ein Zähler inkrementiert. Dieser Zähler entspricht der Anzahl der bisher erfolgten Takte. Pro Durchlauf wird er mit einem Array von Schwellwerten verglichen. Wird ein Schwellwert erreicht, schaltet der LED Zustand von &amp;quot;an&amp;quot; auf &amp;quot;aus&amp;quot; oder umgekehrt (wobei &amp;quot;an&amp;quot; wie vorhin erwähnt Blinken mit 38.4 kHz bedeutet).&lt;br /&gt;
&lt;br /&gt;
Damit die LED also wirklich leuchtet, müssen zwei Bedingungen gelten:&lt;br /&gt;
&lt;br /&gt;
* Der aktuelle Takt ist ungerade (dadurch wird das Blinken mit Modulationsfrequenz erreicht)&lt;br /&gt;
* Der Zustand der LED ist &amp;quot;an&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Auch wenn die status Variable ein 8-bit Integer ist, verwende ich nur das niederwertigste Bit zur Indikation des Zustandes. Der Zähler wird bei jedem Schleifendurchlauf inkrementiert, das heißt, dass das niederwerigste Bit des Zählers bei jedem Durchlauf zwischen Null und Eins springt. Nun kann man einfach die beiden Variablen UND-verknüpfen - wenn das Ergebnis der Verknüpfung eine Eins ist, heißt es, dass beide Bedingungen erfüllt sind und die LED leuchten kann.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60872</id>
		<title>Infrarot Auslöser für Nikon Kameras</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60872"/>
		<updated>2011-10-01T08:23:43Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Während eines Moments der Langeweile habe ich mich dazu entschieden, eine Infrarot-Fernbedienung für meine Nikon Digitalkamera zu bauen. Dabei stellte sich heraus, dass es sich dabei um ein extrem einfaches Projekt handelt, perfekt, wenn man einen Tag lang nichts zu tun hat. Die Fernbedienung hat eine Reichweite von mindestens 15 - 20 Meter, mehr konnte ich bislang nicht testen.&lt;br /&gt;
&lt;br /&gt;
Die Fernbedienung besteht hauptsächlich aus einem Mikrocontroller, der per Knopfdruck mit Strom versorgt wird. Daraufhin wird eine Infrarot-LED mit einer Frequenz von ca. 38kHz angesteuert, die ein bestimmtes Leuchtmuster an die Kamera sendet. Die Fernbedienung ist funktionsgleich zu Nikon&#039;s ML-L3 und funktioniert somit mit einer vielzahl von Nikon Kameras.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Für die Fernbedienung wird nur eine geringe Anzahl an Bauteilen benötigt. Wer öfter mit Elektronischen Schaltungen bastelt, wird vermutlich alle Bauteile lagernd haben. Nachfolgend eine genaue Auflistung:&lt;br /&gt;
&lt;br /&gt;
* Plastikgehäuse für die Schaltung (am besten, wenn es ein Fernbedienungsgehäuse wie im obigen Foto ist)&lt;br /&gt;
* Ein Stück Loch- oder Streifenrasterplatine&lt;br /&gt;
* 1x Atmel ATTiny13 Mikrocontroller&lt;br /&gt;
* 1x 8 MHz Quarzoszillator&lt;br /&gt;
* 1x 3V Knopfzelle (z.B. CR2032, vorzugsweise mit Lötfahnen)&lt;br /&gt;
* 1x Taster&lt;br /&gt;
* 1x Infrarot-LED&lt;br /&gt;
* 1x ca. 1 bis 2 Ohm Widerstand&lt;br /&gt;
* 1x 100 Ohm Widerstand&lt;br /&gt;
* 1x 10 kOhm Widerstand&lt;br /&gt;
* 1x BC547 NPN Transistor (oder äquivalentes Modell)&lt;br /&gt;
* 2x 100 nF Kondensator&lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte die Fernbedienung auch mit dem internen Oszillator funktionieren. In der Praxis erwies sich der Einsatz eines externen Quarzoszillators allerdings deutlich zuverlässiger. Hier der Schaltplan der Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
[[Bild:schaltplan_nikon_ir_remote.png|center|thumb|500px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Ich werde hier kein Platinenlayout zur Verfügung stellen, da das Layout stark von der Wahl der Bauteile und des Gehäuses abhängt. Außerdem habe ich nicht erwähnt, ob ich DIP oder SMD Bauteile verwendet habe - such dir einfach die Form aus, die dir am besten passt! Ich persönlich habe eine Mischung aus beidem verwendet, da ich nur Bauteile verwenden wollte, die ich bereits lagernd hatte.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
Bevor ich den eigentlichen Quellcode vorstelle, möchte ich ein paar Worte über das Protokoll verlieren, welches die Fernbedienung einsetzt. Das Infrarot-Signal wird mit einer Frequenz von etwa 38,4 Kilohertz moduliert. Das bedeutet, wenn die LED &amp;quot;an&amp;quot; ist, leuchtet sie nicht durchgehend, sondern blinkt 38400 mal in der Sekunde. Weiterhin muss die LED zwei mal in einem ganz bestimmten Muster leuchten (mit einer Pause von 63ms), damit sie von der Kamera erkannt wird. Im Quellcode nenne ich dieses Muster &amp;quot;burst&amp;quot;. Glücklicherweise haben sich bereits einige Leute mit dieser Thematik befasst und das Signal der Original-Fernbedienung genaustens analysiert. Ich habe die Daten von BigMike&#039;s Webseite&amp;lt;ref&amp;gt;[http://www.bigmike.it/ircontrol/ www.bigmike.it/ircontrol]&amp;lt;/ref&amp;gt; genommen.&lt;br /&gt;
&lt;br /&gt;
Der Quellcode für den Mikrocontroller ist relativ simpel. Da der Schalter einfach die Stromversorgung aktiviert und nicht etwa als digitaler Eingang agiert, ist das einzige, was der Controller tun muss, direkt nach dem Start das richtige Muster auszugeben. Diese Tatsache spiegelt sich in der extrem kurzen Hauptmethode wieder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int main(void) {&lt;br /&gt;
  // Initialize port&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; IO_IR);&lt;br /&gt;
 &lt;br /&gt;
  burst();&lt;br /&gt;
  _delay_ms(63);&lt;br /&gt;
  burst();&lt;br /&gt;
   &lt;br /&gt;
  while(1) {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das war einfach, nicht wahr? Viel interessanter ist die burst Methode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Clock-counts at which the LED state has to be toggled&lt;br /&gt;
// The values are determined by experimenting, they work&lt;br /&gt;
// with a 8MHz crystal oscillator&lt;br /&gt;
const uint16_t thresholds[8] = {2,164, 2564, 2597, 2727, 2760, 3054, 3087};&lt;br /&gt;
 &lt;br /&gt;
// Sends a single data burst (two of them are needed)&lt;br /&gt;
void burst() {&lt;br /&gt;
  uint16_t clock = 0;&lt;br /&gt;
  uint8_t current_threshold = 0;&lt;br /&gt;
  uint8_t status = 0;&lt;br /&gt;
     &lt;br /&gt;
  while(clock++ &amp;lt; BURST_LENGTH) {&lt;br /&gt;
    if (clock == thresholds[current_threshold]) {&lt;br /&gt;
      status ^= 1;&lt;br /&gt;
      current_threshold++;&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    if (clock &amp;amp; status) {&lt;br /&gt;
      LED_ON();&lt;br /&gt;
    } else {&lt;br /&gt;
      LED_OFF();&lt;br /&gt;
    }      &lt;br /&gt;
         &lt;br /&gt;
    _delay_us(CLOCK_DURATION);&lt;br /&gt;
  }&lt;br /&gt;
     &lt;br /&gt;
  LED_OFF();&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun, was passiert hier? Ein Durchlauf der while-Schleife benötigt ungefähr 13 Mikrosekunden, wodurch die Modulationsfrequenz von 38.4 kHz erreicht wird. Während jeder Iteration wird ein Zähler inkrementiert. Dieser Zähler entspricht der Anzahl der bisher erfolgten Takte. Pro Durchlauf wird er mit einem Array von Schwellwerten verglichen. Wird ein Schwellwert erreicht, schaltet der LED Zustand von &amp;quot;an&amp;quot; auf &amp;quot;aus&amp;quot; oder umgekehrt (wobei &amp;quot;an&amp;quot; wie vorhin erwähnt Blinken mit 38.4 kHz bedeutet).&lt;br /&gt;
&lt;br /&gt;
Damit die LED also wirklich leuchtet, müssen zwei Bedingungen gelten:&lt;br /&gt;
&lt;br /&gt;
* Der aktuelle Takt ist ungerade (dadurch wird das Blinken mit Modulationsfrequenz erreicht)&lt;br /&gt;
* Der Zustand der LED ist &amp;quot;an&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Auch wenn die status Variable ein 8-bit Integer ist, verwende ich nur das niederwertigste Bit zur Indikation des Zustandes. Der Zähler wird bei jedem Schleifendurchlauf inkrementiert, das heißt, dass das niederwerigste Bit des Zählers bei jedem Durchlauf zwischen Null und Eins springt. Nun kann man einfach die beiden Variablen UND-verknüpfen - wenn das Ergebnis der Verknüpfung eine Eins ist, heißt es, dass beide Bedingungen erfüllt sind und die LED leuchten kann.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60871</id>
		<title>Infrarot Auslöser für Nikon Kameras</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60871"/>
		<updated>2011-10-01T08:21:17Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Während eines Moments der Langeweile habe ich mich dazu entschieden, eine Infrarot-Fernbedienung für meine Nikon Digitalkamera zu bauen. Dabei stellte sich heraus, dass es sich dabei um ein extrem einfaches Projekt handelt, perfekt, wenn man einen Tag lang nichts zu tun hat. Die Fernbedienung hat eine Reichweite von mindestens 15 - 20 Meter, mehr konnte ich bislang nicht testen.&lt;br /&gt;
&lt;br /&gt;
Die Fernbedienung besteht hauptsächlich aus einem Mikrocontroller, der per Knopfdruck mit Strom versorgt wird. Daraufhin wird eine Infrarot-LED mit einer Frequenz von ca. 38kHz angesteuert, die ein bestimmtes Leuchtmuster an die Kamera sendet. Die Fernbedienung ist funktionsgleich zu Nikon&#039;s ML-L3 und funktioniert somit mit einer vielzahl von Nikon Kameras.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Für die Fernbedienung wird nur eine geringe Anzahl an Bauteilen benötigt. Wer öfter mit Elektronischen Schaltungen bastelt, wird vermutlich alle Bauteile lagernd haben. Nachfolgend eine genaue Auflistung:&lt;br /&gt;
&lt;br /&gt;
* Plastikgehäuse für die Schaltung (am besten, wenn es ein Fernbedienungsgehäuse wie im obigen Foto ist)&lt;br /&gt;
* Ein Stück Loch- oder Streifenrasterplatine&lt;br /&gt;
* 1x Atmel ATTiny13 Mikrocontroller&lt;br /&gt;
* 1x 8 MHz Quarzoszillator&lt;br /&gt;
* 1x 3V Knopfzelle (z.B. CR2032, vorzugsweise mit Lötfahnen)&lt;br /&gt;
* 1x Taster&lt;br /&gt;
* 1x Infrarot-LED&lt;br /&gt;
* 1x ca. 1 bis 2 Ohm Widerstand&lt;br /&gt;
* 1x 100 Ohm Widerstand&lt;br /&gt;
* 1x 10 kOhm Widerstand&lt;br /&gt;
* 1x BC547 NPN Transistor (oder äquivalentes Modell)&lt;br /&gt;
* 2x 100 nF Kondensator&lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte die Fernbedienung auch mit dem internen Oszillator funktionieren. In der Praxis erwies sich der Einsatz eines externen Quarzoszillators allerdings deutlich zuverlässiger. Hier der Schaltplan der Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
[[Bild:schaltplan_nikon_ir_remote.png|center|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Ich werde hier kein Platinenlayout zur Verfügung stellen, da das Layout stark von der Wahl der Bauteile und des Gehäuses abhängt. Außerdem habe ich nicht erwähnt, ob ich DIP oder SMD Bauteile verwendet habe - such dir einfach die Form aus, die dir am besten passt! Ich persönlich habe eine Mischung aus beidem verwendet, da ich nur Bauteile verwenden wollte, die ich bereits lagernd hatte.&lt;br /&gt;
&lt;br /&gt;
[[Bild:innenansicht_ir_remote.jpg|thumb|300px|Ja, das ist ein SSOP Controller, wo eigentlich ein DIP Controller sein sollte - ich hatte keine mehr übrig und der letzte ist durch einen kleinen Fehler gestorben ;-)]]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
Bevor ich den eigentlichen Quellcode vorstelle, möchte ich ein paar Worte über das Protokoll verlieren, welches die Fernbedienung einsetzt. Das Infrarot-Signal wird mit einer Frequenz von etwa 38,4 Kilohertz moduliert. Das bedeutet, wenn die LED &amp;quot;an&amp;quot; ist, leuchtet sie nicht durchgehend, sondern blinkt 38400 mal in der Sekunde. Weiterhin muss die LED zwei mal in einem ganz bestimmten Muster leuchten (mit einer Pause von 63ms), damit sie von der Kamera erkannt wird. Im Quellcode nenne ich dieses Muster &amp;quot;burst&amp;quot;. Glücklicherweise haben sich bereits einige Leute mit dieser Thematik befasst und das Signal der Original-Fernbedienung genaustens analysiert. Ich habe die Daten von BigMike&#039;s Webseite&amp;lt;ref&amp;gt;[http://www.bigmike.it/ircontrol/ www.bigmike.it/ircontrol]&amp;lt;/ref&amp;gt; genommen.&lt;br /&gt;
&lt;br /&gt;
Der Quellcode für den Mikrocontroller ist relativ simpel. Da der Schalter einfach die Stromversorgung aktiviert und nicht etwa als digitaler Eingang agiert, ist das einzige, was der Controller tun muss, direkt nach dem Start das richtige Muster auszugeben. Diese Tatsache spiegelt sich in der extrem kurzen Hauptmethode wieder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int main(void) {&lt;br /&gt;
  // Initialize port&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; IO_IR);&lt;br /&gt;
 &lt;br /&gt;
  burst();&lt;br /&gt;
  _delay_ms(63);&lt;br /&gt;
  burst();&lt;br /&gt;
   &lt;br /&gt;
  while(1) {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das war einfach, nicht wahr? Viel interessanter ist die burst Methode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Clock-counts at which the LED state has to be toggled&lt;br /&gt;
// The values are determined by experimenting, they work&lt;br /&gt;
// with a 8MHz crystal oscillator&lt;br /&gt;
const uint16_t thresholds[8] = {2,164, 2564, 2597, 2727, 2760, 3054, 3087};&lt;br /&gt;
 &lt;br /&gt;
// Sends a single data burst (two of them are needed)&lt;br /&gt;
void burst() {&lt;br /&gt;
  uint16_t clock = 0;&lt;br /&gt;
  uint8_t current_threshold = 0;&lt;br /&gt;
  uint8_t status = 0;&lt;br /&gt;
     &lt;br /&gt;
  while(clock++ &amp;lt; BURST_LENGTH) {&lt;br /&gt;
    if (clock == thresholds[current_threshold]) {&lt;br /&gt;
      status ^= 1;&lt;br /&gt;
      current_threshold++;&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    if (clock &amp;amp; status) {&lt;br /&gt;
      LED_ON();&lt;br /&gt;
    } else {&lt;br /&gt;
      LED_OFF();&lt;br /&gt;
    }      &lt;br /&gt;
         &lt;br /&gt;
    _delay_us(CLOCK_DURATION);&lt;br /&gt;
  }&lt;br /&gt;
     &lt;br /&gt;
  LED_OFF();&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun, was passiert hier? Ein Durchlauf der while-Schleife benötigt ungefähr 13 Mikrosekunden, wodurch die Modulationsfrequenz von 38.4 kHz erreicht wird. Während jeder Iteration wird ein Zähler inkrementiert. Dieser Zähler entspricht der Anzahl der bisher erfolgten Takte. Pro Durchlauf wird er mit einem Array von Schwellwerten verglichen. Wird ein Schwellwert erreicht, schaltet der LED Zustand von &amp;quot;an&amp;quot; auf &amp;quot;aus&amp;quot; oder umgekehrt (wobei &amp;quot;an&amp;quot; wie vorhin erwähnt Blinken mit 38.4 kHz bedeutet).&lt;br /&gt;
&lt;br /&gt;
Damit die LED also wirklich leuchtet, müssen zwei Bedingungen gelten:&lt;br /&gt;
&lt;br /&gt;
* Der aktuelle Takt ist ungerade (dadurch wird das Blinken mit Modulationsfrequenz erreicht)&lt;br /&gt;
* Der Zustand der LED ist &amp;quot;an&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Auch wenn die status Variable ein 8-bit Integer ist, verwende ich nur das niederwertigste Bit zur Indikation des Zustandes. Der Zähler wird bei jedem Schleifendurchlauf inkrementiert, das heißt, dass das niederwerigste Bit des Zählers bei jedem Durchlauf zwischen Null und Eins springt. Nun kann man einfach die beiden Variablen UND-verknüpfen - wenn das Ergebnis der Verknüpfung eine Eins ist, heißt es, dass beide Bedingungen erfüllt sind und die LED leuchten kann.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60868</id>
		<title>Infrarot Auslöser für Nikon Kameras</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Infrarot_Ausl%C3%B6ser_f%C3%BCr_Nikon_Kameras&amp;diff=60868"/>
		<updated>2011-10-01T08:19:41Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: Artikel angelegt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Während eines Moments der Langeweile habe ich mich dazu entschieden, eine Infrarot-Fernbedienung für meine Nikon Digitalkamera zu bauen. Dabei stellte sich heraus, dass es sich dabei um ein extrem einfaches Projekt handelt, perfekt, wenn man einen Tag lang nichts zu tun hat. Die Fernbedienung hat eine Reichweite von mindestens 15 - 20 Meter, mehr konnte ich bislang nicht testen.&lt;br /&gt;
&lt;br /&gt;
Die Fernbedienung besteht hauptsächlich aus einem Mikrocontroller, der per Knopfdruck mit Strom versorgt wird. Daraufhin wird eine Infrarot-LED mit einer Frequenz von ca. 38kHz angesteuert, die ein bestimmtes Leuchtmuster an die Kamera sendet. Die Fernbedienung ist funktionsgleich zu Nikon&#039;s ML-L3 und funktioniert somit mit einer vielzahl von Nikon Kameras.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
Für die Fernbedienung wird nur eine geringe Anzahl an Bauteilen benötigt. Wer öfter mit Elektronischen Schaltungen bastelt, wird vermutlich alle Bauteile lagernd haben. Nachfolgend eine genaue Auflistung:&lt;br /&gt;
&lt;br /&gt;
* Plastikgehäuse für die Schaltung (am besten, wenn es ein Fernbedienungsgehäuse wie im obigen Foto ist)&lt;br /&gt;
* Ein Stück Loch- oder Streifenrasterplatine&lt;br /&gt;
* 1x Atmel ATTiny13 Mikrocontroller&lt;br /&gt;
* 1x 8 MHz Quarzoszillator&lt;br /&gt;
* 1x 3V Knopfzelle (z.B. CR2032, vorzugsweise mit Lötfahnen)&lt;br /&gt;
* 1x Taster&lt;br /&gt;
* 1x Infrarot-LED&lt;br /&gt;
* 1x ca. 1 bis 2 Ohm Widerstand&lt;br /&gt;
* 1x 100 Ohm Widerstand&lt;br /&gt;
* 1x 10 kOhm Widerstand&lt;br /&gt;
* 1x BC547 NPN Transistor (oder äquivalentes Modell)&lt;br /&gt;
* 2x 100 nF Kondensator&lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte die Fernbedienung auch mit dem internen Oszillator funktionieren. In der Praxis erwies sich der Einsatz eines externen Quarzoszillators allerdings deutlich zuverlässiger. Hier der Schaltplan der Fernbedienung:&lt;br /&gt;
&lt;br /&gt;
[[Bild:schaltplan_nikon_ir_remote.png|framed|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Ich werde hier kein Platinenlayout zur Verfügung stellen, da das Layout stark von der Wahl der Bauteile und des Gehäuses abhängt. Außerdem habe ich nicht erwähnt, ob ich DIP oder SMD Bauteile verwendet habe - such dir einfach die Form aus, die dir am besten passt! Ich persönlich habe eine Mischung aus beidem verwendet, da ich nur Bauteile verwenden wollte, die ich bereits lagernd hatte.&lt;br /&gt;
&lt;br /&gt;
[[Bild:innenansicht_ir_remote.jpg|thumb|300px|Ja, das ist ein SSOP Controller, wo eigentlich ein DIP Controller sein sollte - ich hatte keine mehr übrig und der letzte ist durch einen kleinen Fehler gestorben ;-)]]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
Bevor ich den eigentlichen Quellcode vorstelle, möchte ich ein paar Worte über das Protokoll verlieren, welches die Fernbedienung einsetzt. Das Infrarot-Signal wird mit einer Frequenz von etwa 38,4 Kilohertz moduliert. Das bedeutet, wenn die LED &amp;quot;an&amp;quot; ist, leuchtet sie nicht durchgehend, sondern blinkt 38400 mal in der Sekunde. Weiterhin muss die LED zwei mal in einem ganz bestimmten Muster leuchten (mit einer Pause von 63ms), damit sie von der Kamera erkannt wird. Im Quellcode nenne ich dieses Muster &amp;quot;burst&amp;quot;. Glücklicherweise haben sich bereits einige Leute mit dieser Thematik befasst und das Signal der Original-Fernbedienung genaustens analysiert. Ich habe die Daten von BigMike&#039;s Webseite&amp;lt;ref&amp;gt;[http://www.bigmike.it/ircontrol/ www.bigmike.it/ircontrol]&amp;lt;/ref&amp;gt; genommen.&lt;br /&gt;
&lt;br /&gt;
Der Quellcode für den Mikrocontroller ist relativ simpel. Da der Schalter einfach die Stromversorgung aktiviert und nicht etwa als digitaler Eingang agiert, ist das einzige, was der Controller tun muss, direkt nach dem Start das richtige Muster auszugeben. Diese Tatsache spiegelt sich in der extrem kurzen Hauptmethode wieder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
int main(void) {&lt;br /&gt;
  // Initialize port&lt;br /&gt;
  DDRB |= (1 &amp;lt;&amp;lt; IO_IR);&lt;br /&gt;
 &lt;br /&gt;
  burst();&lt;br /&gt;
  _delay_ms(63);&lt;br /&gt;
  burst();&lt;br /&gt;
   &lt;br /&gt;
  while(1) {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das war einfach, nicht wahr? Viel interessanter ist die burst Methode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// Clock-counts at which the LED state has to be toggled&lt;br /&gt;
// The values are determined by experimenting, they work&lt;br /&gt;
// with a 8MHz crystal oscillator&lt;br /&gt;
const uint16_t thresholds[8] = {2,164, 2564, 2597, 2727, 2760, 3054, 3087};&lt;br /&gt;
 &lt;br /&gt;
// Sends a single data burst (two of them are needed)&lt;br /&gt;
void burst() {&lt;br /&gt;
  uint16_t clock = 0;&lt;br /&gt;
  uint8_t current_threshold = 0;&lt;br /&gt;
  uint8_t status = 0;&lt;br /&gt;
     &lt;br /&gt;
  while(clock++ &amp;lt; BURST_LENGTH) {&lt;br /&gt;
    if (clock == thresholds[current_threshold]) {&lt;br /&gt;
      status ^= 1;&lt;br /&gt;
      current_threshold++;&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    if (clock &amp;amp; status) {&lt;br /&gt;
      LED_ON();&lt;br /&gt;
    } else {&lt;br /&gt;
      LED_OFF();&lt;br /&gt;
    }      &lt;br /&gt;
         &lt;br /&gt;
    _delay_us(CLOCK_DURATION);&lt;br /&gt;
  }&lt;br /&gt;
     &lt;br /&gt;
  LED_OFF();&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun, was passiert hier? Ein Durchlauf der while-Schleife benötigt ungefähr 13 Mikrosekunden, wodurch die Modulationsfrequenz von 38.4 kHz erreicht wird. Während jeder Iteration wird ein Zähler inkrementiert. Dieser Zähler entspricht der Anzahl der bisher erfolgten Takte. Pro Durchlauf wird er mit einem Array von Schwellwerten verglichen. Wird ein Schwellwert erreicht, schaltet der LED Zustand von &amp;quot;an&amp;quot; auf &amp;quot;aus&amp;quot; oder umgekehrt (wobei &amp;quot;an&amp;quot; wie vorhin erwähnt Blinken mit 38.4 kHz bedeutet).&lt;br /&gt;
&lt;br /&gt;
Damit die LED also wirklich leuchtet, müssen zwei Bedingungen gelten:&lt;br /&gt;
&lt;br /&gt;
* Der aktuelle Takt ist ungerade (dadurch wird das Blinken mit Modulationsfrequenz erreicht)&lt;br /&gt;
* Der Zustand der LED ist &amp;quot;an&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Auch wenn die status Variable ein 8-bit Integer ist, verwende ich nur das niederwertigste Bit zur Indikation des Zustandes. Der Zähler wird bei jedem Schleifendurchlauf inkrementiert, das heißt, dass das niederwerigste Bit des Zählers bei jedem Durchlauf zwischen Null und Eins springt. Nun kann man einfach die beiden Variablen UND-verknüpfen - wenn das Ergebnis der Verknüpfung eine Eins ist, heißt es, dass beide Bedingungen erfüllt sind und die LED leuchten kann.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Innenansicht_ir_remote.jpg&amp;diff=60865</id>
		<title>Datei:Innenansicht ir remote.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Innenansicht_ir_remote.jpg&amp;diff=60865"/>
		<updated>2011-10-01T08:15:04Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: Ja, das ist ein SSOP Controller, wo eigentlich ein DIP Controller sein sollte - ich hatte keine mehr übrig und der letzte ist durch einen kleinen Fehler gestorben ;-)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ja, das ist ein SSOP Controller, wo eigentlich ein DIP Controller sein sollte - ich hatte keine mehr übrig und der letzte ist durch einen kleinen Fehler gestorben ;-)&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Schaltplan_nikon_ir_remote.png&amp;diff=60864</id>
		<title>Datei:Schaltplan nikon ir remote.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Schaltplan_nikon_ir_remote.png&amp;diff=60864"/>
		<updated>2011-10-01T08:14:37Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: Schaltplan Nikon IR Fernbedienung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltplan Nikon IR Fernbedienung&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger&amp;diff=60367</id>
		<title>GPS Logger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger&amp;diff=60367"/>
		<updated>2011-09-11T17:52:26Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Bild:gLogger_Logo.png|right]]&lt;br /&gt;
&#039;&#039;von Martin &#039;Kaktus621&#039; Matysiak&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Wichtige Information==&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es diesen GPS-Logger in einer deutlich kleineren und verbesserten Version: [[GPS Logger Mini]]. &lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Der Sommer nähert sich und die Versuchung steigt, sich mal vom Arbeitstisch zu entfernen und etwas im Freien zu unternehmen. Wie schön wäre es, den Bekannten daheim oder den Freunden im Internet ganz leicht zu zeigen, wo man überall gewesen ist?&lt;br /&gt;
&lt;br /&gt;
Dies war der Auslöser für mein erstes großes Projekt : Ein GPS-Logger!&lt;br /&gt;
&lt;br /&gt;
Über ein GPS Modul empfängt das Gerät die aktuelle Position des Trägers und schreibt diese auf eine SD-Speicherkarte.&lt;br /&gt;
Zu Hause angekommen kann man die aufgezeichneten Daten unter verschiedenen Gesichtspunkten analysieren, zum Beispiel die zurückgelegte Strecke (in Google Earth betrachtbar) oder die bewältigten Höhenmeter.&lt;br /&gt;
&lt;br /&gt;
Der GPS-Logger besteht im Groben aus den folgenden 3 Komponenten:&lt;br /&gt;
&lt;br /&gt;
* Ein AVR Mikrocontroller (z.&amp;amp;nbsp;B. ATMega32)&lt;br /&gt;
* Ein GPS Modul (z.&amp;amp;nbsp;B. Navilock NL507 TTL)&lt;br /&gt;
* Eine SD Speicherkarte&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Planung ===&lt;br /&gt;
Neben den drei Hauptkomponenten gehören natürlich noch ein paar andere Teile zur Schaltung, damit die Kommunikation untereinander funktioniert. Im Folgenden der Schaltplan meines Aufbaus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:gLogger_schalt_v2.png|300px]]&lt;br /&gt;
&lt;br /&gt;
Versorgt wird es von einem LiPo-Handyakku, der im voll geladenen Zustand 4,1V liefert. Das Ganze wird auf einer einseitigen Platine (u.A. mit Verwendung von SMD Bauteilen) aufgebaut, hier das Board Layout:&lt;br /&gt;
&lt;br /&gt;
[[Bild:gLogger_board_v2.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Umsetzung ===&lt;br /&gt;
Und so sieht das Ganze fertig bestückt aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:gLogger_platine_top.jpg|300px]] [[Bild:gLogger_platine_bottom.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Der TQFP AVR hat mir schon ein paar Schwierigkeiten beim Löten bereitet, aber es hat alles geklappt (konnte keine Kurzschlüsse feststellen), auch wenn es nicht ganz perfekt aussieht. Der verwendete MicroSD Kartenslot ist erhältlich bei CSD-Electronics unter der Artikelnummer SCHA2B0300.&lt;br /&gt;
&lt;br /&gt;
Nachtrag 08.08.08:&lt;br /&gt;
Der eingesetzte MosFET stellt sich als in diesem Fall unbrauchbar heraus, da er einen zu hohen Source-Drain Widerstand besitzt, was zur Folge hat, dass das GPS Modul mit seinen ca. 60mA Stromverbrauch zu wenig Spannung erhält (lediglich 2,4V anstatt der vollen 3,3V). &lt;br /&gt;
Gelöst werden kann das Problem durch einen BSS138 als Ersatz, diesen gibt es allerdings nur im SOT23 Gehäuse, weshalb ich das Layout und den Schaltplan soeben aktualisiert habe. Ansonsten kann man den MosFET auch einfach entfernen, die Source-Drain-Strecke überbrücken und hat so immer volle 3,3V am GPS Modul (allerdings fehlt dann die Möglichkeit des Abschaltens bei schwachem Akku).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Außerdem habe ich das Gehäuse nun fertiggestellt, hier neue Fotos:&lt;br /&gt;
&lt;br /&gt;
[[Bild:gLogger_gehaeuse_auf.jpg|300px]] [[Bild:gLogger_gehaeuse_zu.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Downloads ===&lt;br /&gt;
* [[Media:gLogger_eagle.zip|Eagle Projekt Dateien zum gLogger]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== AVR ===&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
* Aufnahme kann per Taster gestartet / gestoppt werden&lt;br /&gt;
* Status LEDs zeigen den Status an&lt;br /&gt;
* Speicherverbrauch : ca. 1,4 MB pro Stunde (bei GPS Fix und 7 NMEA Meldungen pro Sekunde), man kann natürlich 6 von den 7 Meldungen abschalten, wenn man NUR die Position haben möchte, dann sinkt der Speicherverbrauch auf ca. 200KB pro Stunde&lt;br /&gt;
* Automatischer Stromsparmodus bei schwachem Akku (Aufnahme wird gestoppt, GPS Modul deaktiviert, der Mikrocontroller in einen Sleep-Modus versetzt)&lt;br /&gt;
&lt;br /&gt;
==== Verwendete Libraries ====&lt;br /&gt;
&lt;br /&gt;
* [[http://homepage.hispeed.ch/peterfleury/index.html UART library von Peter Fleury]]&lt;br /&gt;
* [[http://www.ulrichradig.de/home/index.php/avr/mmc-sd MMC/SD library von Ulrich Radig]]&lt;br /&gt;
* [[http://www.mikro-control.de/Joomla/index.php?option=com_content&amp;amp;task=view&amp;amp;id=5&amp;amp;Itemid=26 FAT16 library von Stephan Busker]]&lt;br /&gt;
&lt;br /&gt;
==== Changelog ====&lt;br /&gt;
&lt;br /&gt;
Version 1.02 (16.08.2008):&lt;br /&gt;
&lt;br /&gt;
* Akkuspannung wird über den ADC ausgelesen und bei einer Akkuspannung kleiner als ca. 3,6V die Aufnahme gestoppt, das GPS Modul abgeschaltet und der µC in einen Sleepmode versetzt (muss noch getestet werden)&lt;br /&gt;
* Blinken während der Aufnahme überarbeitet (per Timer Interrupt)&lt;br /&gt;
&lt;br /&gt;
Version 1.01 (17.07.2008):&lt;br /&gt;
&lt;br /&gt;
* GPS Library um den Befehl gps_get_nmea erweitert -&amp;gt; Wartet erst auf einen vollständigen NMEA Datensatz und schreibt diesen in den übergebenen Buffer&lt;br /&gt;
* Die Ledcodes wurden überarbeitet. Überschreiben nicht mehr den ganzen Ports (wodurch z.&amp;amp;nbsp;B. Pull-Ups deaktiviert werden könnten) sondern verändern nur die jeweiligen Bits der Leuchtdioden&lt;br /&gt;
  &lt;br /&gt;
Version 1.00 (12.07.2008):&lt;br /&gt;
&lt;br /&gt;
* Erstes öffentliches Release&lt;br /&gt;
* AVR empfängt im Aufzeichnungsmodus fortlaufend Zeichen vom GPS Modul und schreibt diese direkt auf die SD Karte&lt;br /&gt;
&lt;br /&gt;
==== FAQ ====&lt;br /&gt;
&lt;br /&gt;
Falls ihr Fragen oder Probleme habt, wendet euch per E-Mail an [[mailto:mail@k621.de mich]] oder schreibt die Frage in die [[http://www.mikrocontroller.net/topic/102452 Foren-Diskussion]]. Wenn ihr damit einverstanden seid, werde ich die Fragen dann auch hier veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
===== Was hat es mit den LED-Codes auf sich? =====&lt;br /&gt;
&#039;&#039;eingesandt von Marcel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Leuchtdioden, nämlich &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_STAT&#039;&#039;&#039; (Grün)&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:#ccaa22;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_WARN&#039;&#039;&#039; (Gelb)&amp;lt;/span&amp;gt; und &amp;lt;span style=&amp;quot;color:#aa2222;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_BATT&#039;&#039;&#039; (Rot)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erste Regel:&#039;&#039;&#039; Ein Blinken ist ein gutes Zeichen dafür, dass alles funktioniert. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zweite Regel:&#039;&#039;&#039; Grün bedeutet alles OK, Gelb möchte vor etwas Warnen und Rot zeigt an, dass der Akku schwach ist.&lt;br /&gt;
&lt;br /&gt;
* Wenn alles in Ordnung ist, sollte nach dem Einschalten &amp;lt;span style=&amp;quot;color:#ccaa22;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_WARN&#039;&#039;&#039;&amp;lt;/span&amp;gt; Blinken. Dies bedeutet, dass sich der Controller in der Hauptschleife befindet, aber keine Aufnahme läuft - Also kein Grund zur Sorge. Ist dies nicht der Fall (z.&amp;amp;nbsp;B. &amp;lt;span style=&amp;quot;color:#ccaa22;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_WARN&#039;&#039;&#039;&amp;lt;/span&amp;gt; leuchtet dauerhaft), dann hat höchstwahrscheinlich die Initalisierung der SD Karte nicht funktioniert&lt;br /&gt;
* Betätigt man nun die Aufnahmetaste, leuchtet zunächst &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_STAT&#039;&#039;&#039;&amp;lt;/span&amp;gt; als Feedback auf, nach ca. 2 Sekunden erlischen dann beide LED&#039;s und &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_STAT&#039;&#039;&#039;&amp;lt;/span&amp;gt; beginnt zu blinken, das bedeutet, dass die Aufnahme läuft&lt;br /&gt;
&lt;br /&gt;
===== Wieso kann ich die Aufnahme nicht beenden ? =====&lt;br /&gt;
&#039;&#039;eingesandt von Marcel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Es kann der Fall auftreten, dass ihr die Aufnahme ganz normal starten konntet und &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;&#039;&#039;&#039;LED_STAT&#039;&#039;&#039;&amp;lt;/span&amp;gt; auch blinkt, aber ein erneutet Druck auf die Taste bewirkt nichts.&lt;br /&gt;
&lt;br /&gt;
Dies ist ein anzeichen dafür, dass der Controller beim Auslesen der NMEA Meldung stecken geblieben ist. Die LED blinkt weiter, da diese über einen Timer gesteuert wird, parallel zum Hauptprogramm. &lt;br /&gt;
&lt;br /&gt;
Wieso bleibt der Controller denn einfach so stecken? Das hat entweder den Grund, dass das GPS-Modul überhaupt nicht angesteckt ist, oder aber, dass dieses keine NMEA-Konformen Meldungen ausgibt oder die falsche Baudrate eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
==== Download ====&lt;br /&gt;
&lt;br /&gt;
* [[Media:gLogger_avr_1.02.zip|gLogger AVR Software - Version 1.02 (16.08.2008)]]&lt;br /&gt;
* [[Media:gLogger_avr_1.01.zip|gLogger AVR Software - Version 1.01 (17.07.2008)]]&lt;br /&gt;
&lt;br /&gt;
=== Computer ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:gLogger_nmeaTool.png|thumb|300px|Screenshot der NMEA Toolbox]]&lt;br /&gt;
&lt;br /&gt;
Für den Computer habe ich derweilen eine Software entwickelt, die die aufgezeichneten GPS Daten verarbeiten kann und diese zum Beispiel in eine *.kml-Datei (Für Google Earth oder Google Maps) schreibt, oder aber Höhen- und Geschwindigkeitsdiagramme erstellen kann.&lt;br /&gt;
&lt;br /&gt;
Die Funktion des Konvertierens zu *.kml funktioniert derzeit perfekt, die Optionen zum erstellen der Höhen- und Geschwindigkeitsdiagramme erzeugen bis jetzt lediglich Excel-Tabellen, wo man sich später leicht ein Diagramm anzeigen lassen kann, geplant ist allerdings, dass die &amp;quot;NMEA Toolbox&amp;quot; direkt Diagramme erstellt und anzeigt.&lt;br /&gt;
&lt;br /&gt;
Die Toolbox wurde in Java entwickelt, der NetBeans-Projektordner in seiner aktuellen Version, sowie die kompilierte *.jar zum ausführen liegt hier als Download bereit.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
* Eingabeformat : Jedes beliebige, solange NMEA-Datensätze der Dateiinhalt sind&lt;br /&gt;
* Ausgabeformat : &lt;br /&gt;
** Google Earth Pfad (*.kml)&lt;br /&gt;
** Google Maps Pfad (*.kml)&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
** Geschwindigkeitsdiagramm (*.csv)&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
** Höhendiagramm (*.csv)&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
** GPX-Track (*.gpx)&lt;br /&gt;
* Verschiedene konfigurierbare Filter, um Genauigkeitsverluste des GPS-Moduls möglichst zu entfernen&lt;br /&gt;
&lt;br /&gt;
[1] : Das besondere am Maps Pfad ggü. Google Earth ist, dass hier die Anzahl der Pfadpunkte auf 350 reduziert wird, da Google Maps nicht mehr in einem Pfad akzeptiert, dadurch gibt es allerdings auch einen Verlust von Details in der Strecke&lt;br /&gt;
&lt;br /&gt;
[2] : In Zukunft ist auch ein echtes Diagramm als Ausgabe geplant, dann als *.png oder ähnliches&lt;br /&gt;
&lt;br /&gt;
==== Changelog ====&lt;br /&gt;
&lt;br /&gt;
Version 1.3 (18.04.2010)&lt;br /&gt;
&lt;br /&gt;
* Verwendung von &amp;quot;Preferences&amp;quot; zum Sichern des zuletzt verwendeten Ordners (Implementiert von [http://projekte.esuark.de/ Jens Krause], vielen Dank!)&lt;br /&gt;
&lt;br /&gt;
Version 1.2 (21.03.2009):&lt;br /&gt;
&lt;br /&gt;
*  Javadoc angelegt&lt;br /&gt;
* Kompletten Code umstrukturiert&lt;br /&gt;
** Konvertierer in eigene Klassen gepackt&lt;br /&gt;
** Konvertierer laufen nun als Threads&lt;br /&gt;
** Insgesamt Code etwas aufgeräumt&lt;br /&gt;
* Interface &#039;erfrischt&#039;&lt;br /&gt;
** Konvertier-Buttons durch Grafiken ersetzt (Text wird als Tooltip angezeigt)&lt;br /&gt;
** Statusanzeige eingebaut&lt;br /&gt;
* Weitere kleine Übersetzungen auf Deutsch&lt;br /&gt;
* Im description-Tag der KML-Datei wird nun das Erstellungsdatum angezeigt&lt;br /&gt;
* Einige Filter entfernt (werden nun autom. ausgeführt)&lt;br /&gt;
* Google Maps Frage erscheint nur noch, wenn man eine KML Datei erstellen möchte und der Pfad mehr als 350 Punkte besitzt&lt;br /&gt;
* Google Maps - Reduzieralgorithmus optimiert&lt;br /&gt;
* GPX Format implementiert&lt;br /&gt;
&lt;br /&gt;
Version 1.1 (03.01.2009):&lt;br /&gt;
&lt;br /&gt;
* Meldungen in Dialogfenstern auf Deutsch übersetzt&lt;br /&gt;
* Fehler bei Google-Maps-Filter behoben&lt;br /&gt;
&lt;br /&gt;
Version 1.0d (25.09.2008):&lt;br /&gt;
&lt;br /&gt;
* NMEA Toolbox auf Deutsch übersetzt&lt;br /&gt;
  &lt;br /&gt;
Version 1.00 (12.07.2008):&lt;br /&gt;
&lt;br /&gt;
* Erstes öffentliches Release&lt;br /&gt;
&lt;br /&gt;
==== FAQ ====&lt;br /&gt;
&lt;br /&gt;
Falls ihr Fragen oder Probleme habt, wendet euch per E-Mail an [[mailto:mail@k621.de mich]] oder schreibt die Frage in die [[http://www.mikrocontroller.net/topic/102452 Foren-Diskussion]]. Wenn ihr damit einverstanden seid, werde ich die Fragen dann auch hier veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
==== Download ====&lt;br /&gt;
&lt;br /&gt;
* [[Media:nmea_toolbox_src_1.3.zip|NMEA Toolbox - NetBeans Projektordner V1.3]]&lt;br /&gt;
* [[Media:nmea_toolbox_jar_1.3.zip|NMEA Toolbox - Ausführbare .jar V1.3]] &lt;br /&gt;
* [[Media:nmea_toolbox_src_1.2.zip|NMEA Toolbox - NetBeans Projektordner V1.2]]&lt;br /&gt;
* [[Media:nmea_toolbox_jar_1.2.zip|NMEA Toolbox - Ausführbare .jar V1.2]] &lt;br /&gt;
* [[Media:nmea_toolbox_src_1.1.zip|NMEA Toolbox - NetBeans Projektordner V1.1]]&lt;br /&gt;
* [[Media:nmea_toolbox_jar_1.1.zip|NMEA Toolbox - Ausführbare .jar V1.1]] &lt;br /&gt;
* [[Media:nmea_toolbox_src_1.0.d.zip|NMEA Toolbox - NetBeans Projektordner V1.0d]]&lt;br /&gt;
* [[Media:nmea_toolbox_jar_1.0.d.zip|NMEA Toolbox - Ausführbare .jar V1.0d]]&lt;br /&gt;
* [[Media:nmea_toolbox_src.zip|NMEA Toolbox - NetBeans Projektordner V1.0]]&lt;br /&gt;
* [[Media:nmea_toolbox_jar.zip|NMEA Toolbox - Ausführbare .jar V1.0]]&lt;br /&gt;
&lt;br /&gt;
== To-Do / Ideen für die Zukunft ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;Stromversorgung überdenken -&amp;gt; Geht es effizienter?&amp;lt;/span&amp;gt; &lt;br /&gt;
** Ja, siehe aktuelle Schaltung&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;Das ganze auf einer richtigen Platine entwerfen, evtl. SMD-Bauteile verwenden, damit das Gerät noch kleiner wird&amp;lt;/span&amp;gt;&lt;br /&gt;
** Erledigt; Layout siehe oben, 6 Drahtbrücken, Platinengröße 61mm x 72mm&lt;br /&gt;
&lt;br /&gt;
* Eine kompakte SMD-Platine entwerfen.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#aa2222;&amp;quot;&amp;gt;Erweiterung : Einfaches Navigationssystem -&amp;gt; Am Computer wird ein Pfad festgelegt und das Gerät leitet einen von Wegpunkt zu Wegpunkt, indem die Richtung über LEDs oder ein Display gezeigt wird&amp;lt;/span&amp;gt;&lt;br /&gt;
** Idee wieder verworfen, Statusanzeige über Display wird aber möglicherweise noch realisiert&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;Besseren Algorithmus für das Reduzieren der Pfadpunkte in der NMEA Toolbox entwickeln (mit geringerem Genauigkeitsverlust)&amp;lt;/span&amp;gt;&lt;br /&gt;
** Ist in Bearbeitung&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#22aa22;&amp;quot;&amp;gt;NMEA-Toolbox : Export in das *.GPX-Format&amp;lt;/span&amp;gt;&lt;br /&gt;
** Ist in Bearbeitung&lt;br /&gt;
&lt;br /&gt;
* Echte Diagramme in der NMEA Toolbox erstellen&lt;br /&gt;
** Hierfür kann ich dir die JFreeChart Library empfehlen! (falls du die nicht schon kennst) Sehr einfach zu verwenden und macht sehr saubere Diagramme.&lt;br /&gt;
** Folgt in der übernächsten Version!&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#aa2222;&amp;quot;&amp;gt;Über das PC-Tool Parameter verändern (welche Werte sollen aufgezeichnet werden, welche Aufzeichnungsrate...)&amp;lt;/span&amp;gt;&lt;br /&gt;
** Würde eine direkte Verbindung zw. PC und gLogger erfordern -&amp;gt; vorerst nicht geplant (außer jemand möchte sich da dran setzen? :))&lt;br /&gt;
*** Hier wird man fündig: http://www.obdev.com/products/vusb/benefits-de.html, da gibt es viele Beispielprojekte, aus denen man sich das Benötigte zusammenkopieren kann.&lt;br /&gt;
&lt;br /&gt;
* Digitaleingänge hinzu und die zustände dieser im log hinzufügen&lt;br /&gt;
** Folgt möglicherweise im Sommer (z.&amp;amp;nbsp;B. Temperaturüberwachung o.ä.)&lt;br /&gt;
&lt;br /&gt;
* Alle Anschlüsse zum AVR per Pads freilegen&lt;br /&gt;
&lt;br /&gt;
* Anschlussmöglichkeit für große Tastenmatrix (30-50 Tasten), um sehr schnell Geo-Attribute eingeben zu können. Die Idee ist, es für OpenStreetMap zu verwenden: dann kann man auf Knopfdruck &amp;quot;ab hier asphaltiert&amp;quot;, &amp;quot;hier Foto gemacht&amp;quot;, &amp;quot;hier steht eine Bank&amp;quot; usw. eingeben.&lt;br /&gt;
** Eine gute Idee. An sich kann man die Tastatur an den freigelegten Port klemmen, man müsste dann nur noch die Software dementsprechend anpassen&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
* [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.0004540865131e3917627 Beispiel-Route in Google Maps]&lt;br /&gt;
&lt;br /&gt;
[[Bild:gLogger_vgl.jpg|thumb|600px|Genauigkeitsvergleich Google Maps Pfad - Originalpfad (G. Earth)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr style=&amp;quot;visibility:hidden; clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe Auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion im Forum : http://www.mikrocontroller.net/topic/102452&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sparkfun.com/datasheets/GPS/NMEA%20Reference%20Manual1.pdf NMEA Reference Manual (PDF-Dokument)]&lt;br /&gt;
&lt;br /&gt;
[[Category:1. Wettbewerb]]&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=60364</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=60364"/>
		<updated>2011-09-11T17:47:21Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* AVR */ Neue Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.martin-matysiak.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Ich habe ein doppelseitiges Layout erstellt, bei dem fast ausschließlich SMD-Bauteile zum Einsatz kommen, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, halte ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist lediglich meine Vorgehensweise beim zusammenbau des Geräts. Es besteht kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage hinweisen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit den beiden größten Bauteilen sollte man noch warten.&lt;br /&gt;
Dies wäre zum einen der Quarz, der nach dem Verlöten mit zwei &amp;quot;Löthügeln&amp;quot; auf der Unterseite das Befestigen des Mikrocontrollers stören könnte.&lt;br /&gt;
Zum anderen handelt es sich um das GPS-Modul. Man kann es eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Aus diesem Grund habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Lötzinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Zinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Ein Beispiel dafür findet sich in der Abbildung (die 22pF Kondensatoren in der Nähe des Quarzes).&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren zum Verlöten bei beiden Teilen sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontroller besteht aus mehreren einzelnen Modulen, die in der Hauptdatei zusammengesetzt und abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.4&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Der jeweils aktuelle Quellcode + Makefile kann auf GitHub (siehe Downloads) abgerufen werden.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
In Version 1.2 wurde ein Fehler behoben, der allerdings nur sehr sporadisch aufgetreten ist. In seltenen Fällen kam es dazu, dass das Abschlusssymbol (0x03) nicht geschrieben wurde, sodass der Logger beim nächsten Start in einer Endlosschleife hing (da das Zeichen nicht gefunden werden kann). Dies kann nun nicht mehr passieren.&lt;br /&gt;
&lt;br /&gt;
In Version 1.3 wurden zwei Fehler behoben. Zum einen war das GPS-Modul entegen des Kommentars auf 2 Hertz Aktualisierungsrate gestellt, zum anderen hat die UART Bibliothek regelmäßig versucht, über die Arraygrenzen des Eingabebuffers zu schreiben. Per Glück oder Zufall hatte dies davor keine schwerwiegenden Konsequenzen, ist aber jetzt behoben.&lt;br /&gt;
&lt;br /&gt;
In Version 1.4 wurde die Befehlsbibliothek für das GPS-Modul stark überarbeitet. Man kann nun die gewünschten NMEA-Kommandos über einen Parameter beim Befehl &#039;&#039;gps_init()&#039;&#039; konfigurieren. Insgesamt werden nun alle möglichen NMEA-Kommandos unterstützt. Die Kommandos werden auf Korrektheit (d.H. richtiger Anfang und richtige Prüfsumme) geprüft. Außerdem wird bei den Kommandos, bei denen es möglich ist, auch ermittelt, ob ein GPS-Fix vorliegt. Weiterhin wurde der gesamte Code in dieser Version aufgeräumt und dokumentiert (auf Englisch).&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Hierfür kann man das Tool &amp;quot;RawRead&amp;quot; verwenden, welches das Erstellen, Auslesen und Leeren von &#039;&#039;NoFS&#039;&#039;-Medien stark vereinfacht. Das Tool ist mittlerweile in Version &#039;&#039;&#039;2.0&#039;&#039;&#039; und nun als Python-Skript realisiert, sodass es auf allen Plattformen (Windows, Mac, Linux) problemlos eingesetzt werden kann. Zum Ausführen des Skripts benötigt man Python, für Windows werde ich noch eine vorkompilierte *.exe-Datei erstellen, sodass diese Voraussetzung entfällt. Weiterhin muss das Tool auf allen Plattformen mit Administrationsrechnen ausgeführt werden, da direkt auf das Laufwerk geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Gesteuert wird das das Programm ausschließlich über Kommandozeilenparameter. Für eine Übersicht an verfügbaren Befehlen kann man das Programm mit &amp;quot;python rawread.py --help&amp;quot; ausführen.&lt;br /&gt;
&lt;br /&gt;
RawRead besitzt einen Mechanismus, der automatisch das richtige Laufwerk auswählt, sodass man den Pfad nicht manuell spezifizieren muss. Auch, wenn man eine neue Karte erstmalig mit einem &#039;&#039;NoFS&#039;&#039; beschreiben möchte (Parameter &amp;quot;-c&amp;quot;), wird über ein bestimmtes Verfahren sichergestellt, dass ausschließlich auf die Speicherkarte (und nicht etwa auf die Systemfestplatte) geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
Hier mal der Weg, den ich für den Einsatz am Mac nutze, denn der Martin hat ja mit seinem RawRead.exe den Windows-Pfad beschritten.&lt;br /&gt;
&lt;br /&gt;
Um die Daten von der Karte zu lutschen, nutze ich &#039;&#039;/bin/dd&#039;&#039;, also ein Bordmittel am Mac. Die übliche Warnung, &#039;&#039;&#039;if&#039;&#039;&#039; und &#039;&#039;&#039;of&#039;&#039;&#039; nicht zu vertauschen, und das richtige Device zu nehmen, erwähne ich hiermit nur der Vollständigkeit halber. Evtl. Fahrlässigkeit kann fantastische Folgen haben.&lt;br /&gt;
 $ dd if=/dev/disk1 of=~/Desktop/dump.bin&lt;br /&gt;
Das File ist bei mir 2 GB groß -- je nach Karte halt. Das dauert ne Weile. Man kann ein Gefühl dafür entwickeln (oder es berechnen), wie lang der letzte Track war und wie viele Blöcke dazu von der Karte geholt werden müssen und dafür das Kommando mit &amp;lt;code&amp;gt;count=xyz&amp;lt;/code&amp;gt; verkürzen. Die Angabe des Device &amp;lt;code&amp;gt;/dev/disk1&amp;lt;/code&amp;gt; variiert natürlich je nach Bestückung mit Geräten am USB. Das richtige zu finden klappt mit &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; oder klicki-bunti mit dem &#039;&#039;System-Profiler&#039;&#039; (Snow Leo) oder &#039;&#039;Systeminformationen&#039;&#039; (Lion). Das File &amp;lt;code&amp;gt;dump.bin&amp;lt;/code&amp;gt; kann man dann dem Java-Programm &#039;&#039;NMEA-Toolbox&#039;&#039; zum Konvertieren vorwerfen. Java-Programme laufen auf dem Mac unter Snow Leo sofort und auch unter Lion direkt nach Installation der JRE ohne Mucken. So weit, so gut. Nun der zweite Teil:&lt;br /&gt;
&lt;br /&gt;
Das Präparieren der Karte für den nächsten Aufzeichnungslauf (vgl. Karte leeren im Abschnitt für PC) mache ich mit einem nachinstallierten Progrämmchen namens &#039;&#039;hexedit&#039;&#039;. Das kann genau das, was es im Namen trägt. Und es kann es auch auf Devices, nicht nur auf Files. Installiert habe ich es aus dem Debian-Package-Fundus, der für Mac-Nutzer über eins der Projekte [http://www.macports.org/ MacPorts] oder [http://www.finkproject.org/ Fink] Einzug findet. Das ist am Anfang etwas mühsam, lohnt sich aber insgesamt, speziell wenn man z.B. eine Toolchain für AVR oder ARM oder ähnliches installieren möchte. Mühsam ist es auch deshalb, weil es wird das Developer-Package (&#039;&#039;Xcode&#039;&#039;) von Apple als Voraussetzung verlangt. Ist z.B. MacPorts installiert, kann mit&lt;br /&gt;
 # port install hexedit&lt;br /&gt;
das Paket installiert werden. Wenn der &#039;&#039;hexedit&#039;&#039; läuft, macht man schnell noch das Device beschreibbar mit&lt;br /&gt;
 # chmod 666 /dev/disk1&lt;br /&gt;
und dann läßt sich mit &lt;br /&gt;
 # hexedit /dev/disk1&lt;br /&gt;
der Editor starten und die ersten Bytes der SD-Karte mit den 8 Bytes &#039;&#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039;&#039; beschreiben. Danach ist die Karte bereit für den neuen Einsatz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1p01_avr.zip|AVR-Studio Projektordner V1.1p01 Bugfix (*.zip, 19KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/GPS-Logger AVR-Quellcodes (V1.2+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/RawRead RawRead (V2.0+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kaktus621&amp;diff=60363</id>
		<title>Benutzer:Kaktus621</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kaktus621&amp;diff=60363"/>
		<updated>2011-09-11T17:42:26Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Herzlich Willkommen auf meiner Benutzerseite!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mein Name ist Martin Matysiak, ich bin 20 Jahre alt und habe seit kurzem meine Schullaufbahn am Kaiser-Karls-Gymnasium Aachen abgeschlossen. &lt;br /&gt;
Mein Interesse an der Elektronik habe ich wohl von meinem Vater geerbt :) und durch mein Interesse für die Informatik bin ich so zu Mikrocontrollern gekommen. Seitdem mache ich immer mal ein paar kleine Sachen, um den Umgang mit µCs zu erlernen.&lt;br /&gt;
&lt;br /&gt;
Mein erstes großes Projekt ist ein [[GPS Logger]], mit dem man ganz leicht seine eigene Route aufzeichnen und am PC darstellen kann.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen kleineren Nachfolger, den [[GPS Logger Mini]]. Dieser ist so entworfen, dass ein Nachbau ohne große Probleme möglich ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin habe ich einige Bauteile für die Software Eagle gezeichnet, welche ich euch zur Verfügung stellen möchte:&lt;br /&gt;
&lt;br /&gt;
*[[Media:con-memcard.zip|con-memcard]] - Diverse Speicherkartenslots von verschiedenen Anbietern (Siehe Description der Devices)&lt;br /&gt;
*[[Media:selfmade.zip|selfmade]] - Alle Möglichen Bauteile, die in der Form noch nicht in Eagle vertreten waren. Wird immer mal wieder aktualisiert ;-)&lt;br /&gt;
&lt;br /&gt;
Wenn du mehr über mich erfahren willst, besuche doch bitte meine Homepage unter [http://martin-matysiak.de/ martin-matysiak.de]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59998</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59998"/>
		<updated>2011-08-29T16:19:21Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* AVR */ Neue Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.martin-matysiak.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Ich habe ein doppelseitiges Layout erstellt, bei dem fast ausschließlich SMD-Bauteile zum Einsatz kommen, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, halte ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist lediglich meine Vorgehensweise beim zusammenbau des Geräts. Es besteht kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage hinweisen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit den beiden größten Bauteilen sollte man noch warten.&lt;br /&gt;
Dies wäre zum einen der Quarz, der nach dem Verlöten mit zwei &amp;quot;Löthügeln&amp;quot; auf der Unterseite das Befestigen des Mikrocontrollers stören könnte.&lt;br /&gt;
Zum anderen handelt es sich um das GPS-Modul. Man kann es eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Aus diesem Grund habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Lötzinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Zinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Ein Beispiel dafür findet sich in der Abbildung (die 22pF Kondensatoren in der Nähe des Quarzes).&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren zum Verlöten bei beiden Teilen sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontroller besteht aus mehreren einzelnen Modulen, die in der Hauptdatei zusammengesetzt und abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.3&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Der jeweils aktuelle Quellcode + Makefile kann auf GitHub (siehe Downloads) abgerufen werden.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
In Version 1.2 wurde ein Fehler behoben, der allerdings nur sehr sporadisch aufgetreten ist. In seltenen Fällen kam es dazu, dass das Abschlusssymbol (0x03) nicht geschrieben wurde, sodass der Logger beim nächsten Start in einer Endlosschleife hing (da das Zeichen nicht gefunden werden kann). Dies kann nun nicht mehr passieren.&lt;br /&gt;
&lt;br /&gt;
In Version 1.3 wurden zwei Fehler behoben. Zum einen war das GPS-Modul entegen des Kommentars auf 2 Hertz Aktualisierungsrate gestellt, zum anderen hat die UART Bibliothek regelmäßig versucht, über die Arraygrenzen des Eingabebuffers zu schreiben. Per Glück oder Zufall hatte dies davor keine schwerwiegenden Konsequenzen, ist aber jetzt behoben.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Hierfür kann man das Tool &amp;quot;RawRead&amp;quot; verwenden, welches das Erstellen, Auslesen und Leeren von &#039;&#039;NoFS&#039;&#039;-Medien stark vereinfacht. Das Tool ist mittlerweile in Version &#039;&#039;&#039;2.0&#039;&#039;&#039; und nun als Python-Skript realisiert, sodass es auf allen Plattformen (Windows, Mac, Linux) problemlos eingesetzt werden kann. Zum Ausführen des Skripts benötigt man Python, für Windows werde ich noch eine vorkompilierte *.exe-Datei erstellen, sodass diese Voraussetzung entfällt. Weiterhin muss das Tool auf allen Plattformen mit Administrationsrechnen ausgeführt werden, da direkt auf das Laufwerk geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Gesteuert wird das das Programm ausschließlich über Kommandozeilenparameter. Für eine Übersicht an verfügbaren Befehlen kann man das Programm mit &amp;quot;python rawread.py --help&amp;quot; ausführen.&lt;br /&gt;
&lt;br /&gt;
RawRead besitzt einen Mechanismus, der automatisch das richtige Laufwerk auswählt, sodass man den Pfad nicht manuell spezifizieren muss. Auch, wenn man eine neue Karte erstmalig mit einem &#039;&#039;NoFS&#039;&#039; beschreiben möchte (Parameter &amp;quot;-c&amp;quot;), wird über ein bestimmtes Verfahren sichergestellt, dass ausschließlich auf die Speicherkarte (und nicht etwa auf die Systemfestplatte) geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
Hier mal der Weg, den ich für den Einsatz am Mac nutze, denn der Martin hat ja mit seinem RawRead.exe den Windows-Pfad beschritten.&lt;br /&gt;
&lt;br /&gt;
Um die Daten von der Karte zu lutschen, nutze ich &#039;&#039;/bin/dd&#039;&#039;, also ein Bordmittel am Mac. Die übliche Warnung, &#039;&#039;&#039;if&#039;&#039;&#039; und &#039;&#039;&#039;of&#039;&#039;&#039; nicht zu vertauschen, und das richtige Device zu nehmen, erwähne ich hiermit nur der Vollständigkeit halber. Evtl. Fahrlässigkeit kann fantastische Folgen haben.&lt;br /&gt;
 $ dd if=/dev/disk1 of=~/Desktop/dump.bin&lt;br /&gt;
Das File ist bei mir 2 GB groß -- je nach Karte halt. Das dauert ne Weile. Man kann ein Gefühl dafür entwickeln (oder es berechnen), wie lang der letzte Track war und wie viele Blöcke dazu von der Karte geholt werden müssen und dafür das Kommando mit &amp;lt;code&amp;gt;count=xyz&amp;lt;/code&amp;gt; verkürzen. Die Angabe des Device &amp;lt;code&amp;gt;/dev/disk1&amp;lt;/code&amp;gt; variiert natürlich je nach Bestückung mit Geräten am USB. Das richtige zu finden klappt mit &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; oder klicki-bunti mit dem &#039;&#039;System-Profiler&#039;&#039; (Snow Leo) oder &#039;&#039;Systeminformationen&#039;&#039; (Lion). Das File &amp;lt;code&amp;gt;dump.bin&amp;lt;/code&amp;gt; kann man dann dem Java-Programm &#039;&#039;NMEA-Toolbox&#039;&#039; zum Konvertieren vorwerfen. Java-Programme laufen auf dem Mac unter Snow Leo sofort und auch unter Lion direkt nach Installation der JRE ohne Mucken. So weit, so gut. Nun der zweite Teil:&lt;br /&gt;
&lt;br /&gt;
Das Präparieren der Karte für den nächsten Aufzeichnungslauf (vgl. Karte leeren im Abschnitt für PC) mache ich mit einem nachinstallierten Progrämmchen namens &#039;&#039;hexedit&#039;&#039;. Das kann genau das, was es im Namen trägt. Und es kann es auch auf Devices, nicht nur auf Files. Installiert habe ich es aus dem Debian-Package-Fundus, der für Mac-Nutzer über eins der Projekte [http://www.macports.org/ MacPorts] oder [http://www.finkproject.org/ Fink] Einzug findet. Das ist am Anfang etwas mühsam, lohnt sich aber insgesamt, speziell wenn man z.B. eine Toolchain für AVR oder ARM oder ähnliches installieren möchte. Mühsam ist es auch deshalb, weil es wird das Developer-Package (&#039;&#039;Xcode&#039;&#039;) von Apple als Voraussetzung verlangt. Ist z.B. MacPorts installiert, kann mit&lt;br /&gt;
 # port install hexedit&lt;br /&gt;
das Paket installiert werden. Wenn der &#039;&#039;hexedit&#039;&#039; läuft, macht man schnell noch das Device beschreibbar mit&lt;br /&gt;
 # chmod 666 /dev/disk1&lt;br /&gt;
und dann läßt sich mit &lt;br /&gt;
 # hexedit /dev/disk1&lt;br /&gt;
der Editor starten und die ersten Bytes der SD-Karte mit den 8 Bytes &#039;&#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039;&#039; beschreiben. Danach ist die Karte bereit für den neuen Einsatz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1p01_avr.zip|AVR-Studio Projektordner V1.1p01 Bugfix (*.zip, 19KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/GPS-Logger AVR-Quellcodes (V1.2+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/RawRead RawRead (V2.0+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59768</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59768"/>
		<updated>2011-08-23T20:28:10Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* PC */ Neue Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.martin-matysiak.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Ich habe ein doppelseitiges Layout erstellt, bei dem fast ausschließlich SMD-Bauteile zum Einsatz kommen, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, halte ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist lediglich meine Vorgehensweise beim zusammenbau des Geräts. Es besteht kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage hinweisen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit den beiden größten Bauteilen sollte man noch warten.&lt;br /&gt;
Dies wäre zum einen der Quarz, der nach dem Verlöten mit zwei &amp;quot;Löthügeln&amp;quot; auf der Unterseite das Befestigen des Mikrocontrollers stören könnte.&lt;br /&gt;
Zum anderen handelt es sich um das GPS-Modul. Man kann es eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Aus diesem Grund habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Lötzinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Zinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Ein Beispiel dafür findet sich in der Abbildung (die 22pF Kondensatoren in der Nähe des Quarzes).&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren zum Verlöten bei beiden Teilen sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontroller besteht aus mehreren einzelnen Modulen, die in der Hauptdatei zusammengesetzt und abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.2&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
In Version 1.2 wurde ein Fehler behoben, der allerdings nur sehr sporadisch aufgetreten ist. In seltenen Fällen kam es dazu, dass das Abschlusssymbol (0x03) nicht geschrieben wurde, sodass der Logger beim nächsten Start in einer Endlosschleife hing (da das Zeichen nicht gefunden werden kann). Dies kann nun nicht mehr passieren.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Hierfür kann man das Tool &amp;quot;RawRead&amp;quot; verwenden, welches das Erstellen, Auslesen und Leeren von &#039;&#039;NoFS&#039;&#039;-Medien stark vereinfacht. Das Tool ist mittlerweile in Version &#039;&#039;&#039;2.0&#039;&#039;&#039; und nun als Python-Skript realisiert, sodass es auf allen Plattformen (Windows, Mac, Linux) problemlos eingesetzt werden kann. Zum Ausführen des Skripts benötigt man Python, für Windows werde ich noch eine vorkompilierte *.exe-Datei erstellen, sodass diese Voraussetzung entfällt. Weiterhin muss das Tool auf allen Plattformen mit Administrationsrechnen ausgeführt werden, da direkt auf das Laufwerk geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Gesteuert wird das das Programm ausschließlich über Kommandozeilenparameter. Für eine Übersicht an verfügbaren Befehlen kann man das Programm mit &amp;quot;python rawread.py --help&amp;quot; ausführen.&lt;br /&gt;
&lt;br /&gt;
RawRead besitzt einen Mechanismus, der automatisch das richtige Laufwerk auswählt, sodass man den Pfad nicht manuell spezifizieren muss. Auch, wenn man eine neue Karte erstmalig mit einem &#039;&#039;NoFS&#039;&#039; beschreiben möchte (Parameter &amp;quot;-c&amp;quot;), wird über ein bestimmtes Verfahren sichergestellt, dass ausschließlich auf die Speicherkarte (und nicht etwa auf die Systemfestplatte) geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
Hier mal der Weg, den ich für den Einsatz am Mac nutze, denn der Martin hat ja mit seinem RawRead.exe den Windows-Pfad beschritten.&lt;br /&gt;
&lt;br /&gt;
Um die Daten von der Karte zu lutschen, nutze ich &#039;&#039;/bin/dd&#039;&#039;, also ein Bordmittel am Mac. Die übliche Warnung, &#039;&#039;&#039;if&#039;&#039;&#039; und &#039;&#039;&#039;of&#039;&#039;&#039; nicht zu vertauschen, und das richtige Device zu nehmen, erwähne ich hiermit nur der Vollständigkeit halber. Evtl. Fahrlässigkeit kann fantastische Folgen haben.&lt;br /&gt;
 $ dd if=/dev/disk1 of=~/Desktop/dump.bin&lt;br /&gt;
Das File ist bei mir 2 GB groß -- je nach Karte halt. Das dauert ne Weile. Man kann ein Gefühl dafür entwickeln (oder es berechnen), wie lang der letzte Track war und wie viele Blöcke dazu von der Karte geholt werden müssen und dafür das Kommando mit &amp;lt;code&amp;gt;count=xyz&amp;lt;/code&amp;gt; verkürzen. Die Angabe des Device &amp;lt;code&amp;gt;/dev/disk1&amp;lt;/code&amp;gt; variiert natürlich je nach Bestückung mit Geräten am USB. Das richtige zu finden klappt mit &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; oder klicki-bunti mit dem &#039;&#039;System-Profiler&#039;&#039; (Snow Leo) oder &#039;&#039;Systeminformationen&#039;&#039; (Lion). Das File &amp;lt;code&amp;gt;dump.bin&amp;lt;/code&amp;gt; kann man dann dem Java-Programm &#039;&#039;NMEA-Toolbox&#039;&#039; zum Konvertieren vorwerfen. Java-Programme laufen auf dem Mac unter Snow Leo sofort und auch unter Lion direkt nach Installation der JRE ohne Mucken. So weit, so gut. Nun der zweite Teil:&lt;br /&gt;
&lt;br /&gt;
Das Präparieren der Karte für den nächsten Aufzeichnungslauf (vgl. Karte leeren im Abschnitt für PC) mache ich mit einem nachinstallierten Progrämmchen namens &#039;&#039;hexedit&#039;&#039;. Das kann genau das, was es im Namen trägt. Und es kann es auch auf Devices, nicht nur auf Files. Installiert habe ich es aus dem Debian-Package-Fundus, der für Mac-Nutzer über eins der Projekte [http://www.macports.org/ MacPorts] oder [http://www.finkproject.org/ Fink] Einzug findet. Das ist am Anfang etwas mühsam, lohnt sich aber insgesamt, speziell wenn man z.B. eine Toolchain für AVR oder ARM oder ähnliches installieren möchte. Mühsam ist es auch deshalb, weil es wird das Developer-Package (&#039;&#039;Xcode&#039;&#039;) von Apple als Voraussetzung verlangt. Ist z.B. MacPorts installiert, kann mit&lt;br /&gt;
 # port install hexedit&lt;br /&gt;
das Paket installiert werden. Wenn der &#039;&#039;hexedit&#039;&#039; läuft, macht man schnell noch das Device beschreibbar mit&lt;br /&gt;
 # chmod 666 /dev/disk1&lt;br /&gt;
und dann läßt sich mit &lt;br /&gt;
 # hexedit /dev/disk1&lt;br /&gt;
der Editor starten und die ersten Bytes der SD-Karte mit den 8 Bytes &#039;&#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039;&#039; beschreiben. Danach ist die Karte bereit für den neuen Einsatz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1p01_avr.zip|AVR-Studio Projektordner V1.1p01 Bugfix (*.zip, 19KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/GPS-Logger AVR-Quellcodes (V1.2+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/RawRead RawRead (V2.0+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59767</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59767"/>
		<updated>2011-08-23T20:18:10Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* AVR */ Neue Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.martin-matysiak.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Ich habe ein doppelseitiges Layout erstellt, bei dem fast ausschließlich SMD-Bauteile zum Einsatz kommen, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, halte ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist lediglich meine Vorgehensweise beim zusammenbau des Geräts. Es besteht kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage hinweisen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit den beiden größten Bauteilen sollte man noch warten.&lt;br /&gt;
Dies wäre zum einen der Quarz, der nach dem Verlöten mit zwei &amp;quot;Löthügeln&amp;quot; auf der Unterseite das Befestigen des Mikrocontrollers stören könnte.&lt;br /&gt;
Zum anderen handelt es sich um das GPS-Modul. Man kann es eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Aus diesem Grund habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Lötzinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Zinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Ein Beispiel dafür findet sich in der Abbildung (die 22pF Kondensatoren in der Nähe des Quarzes).&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren zum Verlöten bei beiden Teilen sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontroller besteht aus mehreren einzelnen Modulen, die in der Hauptdatei zusammengesetzt und abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.2&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
In Version 1.2 wurde ein Fehler behoben, der allerdings nur sehr sporadisch aufgetreten ist. In seltenen Fällen kam es dazu, dass das Abschlusssymbol (0x03) nicht geschrieben wurde, sodass der Logger beim nächsten Start in einer Endlosschleife hing (da das Zeichen nicht gefunden werden kann). Dies kann nun nicht mehr passieren.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
Hier mal der Weg, den ich für den Einsatz am Mac nutze, denn der Martin hat ja mit seinem RawRead.exe den Windows-Pfad beschritten.&lt;br /&gt;
&lt;br /&gt;
Um die Daten von der Karte zu lutschen, nutze ich &#039;&#039;/bin/dd&#039;&#039;, also ein Bordmittel am Mac. Die übliche Warnung, &#039;&#039;&#039;if&#039;&#039;&#039; und &#039;&#039;&#039;of&#039;&#039;&#039; nicht zu vertauschen, und das richtige Device zu nehmen, erwähne ich hiermit nur der Vollständigkeit halber. Evtl. Fahrlässigkeit kann fantastische Folgen haben.&lt;br /&gt;
 $ dd if=/dev/disk1 of=~/Desktop/dump.bin&lt;br /&gt;
Das File ist bei mir 2 GB groß -- je nach Karte halt. Das dauert ne Weile. Man kann ein Gefühl dafür entwickeln (oder es berechnen), wie lang der letzte Track war und wie viele Blöcke dazu von der Karte geholt werden müssen und dafür das Kommando mit &amp;lt;code&amp;gt;count=xyz&amp;lt;/code&amp;gt; verkürzen. Die Angabe des Device &amp;lt;code&amp;gt;/dev/disk1&amp;lt;/code&amp;gt; variiert natürlich je nach Bestückung mit Geräten am USB. Das richtige zu finden klappt mit &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; oder klicki-bunti mit dem &#039;&#039;System-Profiler&#039;&#039; (Snow Leo) oder &#039;&#039;Systeminformationen&#039;&#039; (Lion). Das File &amp;lt;code&amp;gt;dump.bin&amp;lt;/code&amp;gt; kann man dann dem Java-Programm &#039;&#039;NMEA-Toolbox&#039;&#039; zum Konvertieren vorwerfen. Java-Programme laufen auf dem Mac unter Snow Leo sofort und auch unter Lion direkt nach Installation der JRE ohne Mucken. So weit, so gut. Nun der zweite Teil:&lt;br /&gt;
&lt;br /&gt;
Das Präparieren der Karte für den nächsten Aufzeichnungslauf (vgl. Karte leeren im Abschnitt für PC) mache ich mit einem nachinstallierten Progrämmchen namens &#039;&#039;hexedit&#039;&#039;. Das kann genau das, was es im Namen trägt. Und es kann es auch auf Devices, nicht nur auf Files. Installiert habe ich es aus dem Debian-Package-Fundus, der für Mac-Nutzer über eins der Projekte [http://www.macports.org/ MacPorts] oder [http://www.finkproject.org/ Fink] Einzug findet. Das ist am Anfang etwas mühsam, lohnt sich aber insgesamt, speziell wenn man z.B. eine Toolchain für AVR oder ARM oder ähnliches installieren möchte. Mühsam ist es auch deshalb, weil es wird das Developer-Package (&#039;&#039;Xcode&#039;&#039;) von Apple als Voraussetzung verlangt. Ist z.B. MacPorts installiert, kann mit&lt;br /&gt;
 # port install hexedit&lt;br /&gt;
das Paket installiert werden. Wenn der &#039;&#039;hexedit&#039;&#039; läuft, macht man schnell noch das Device beschreibbar mit&lt;br /&gt;
 # chmod 666 /dev/disk1&lt;br /&gt;
und dann läßt sich mit &lt;br /&gt;
 # hexedit /dev/disk1&lt;br /&gt;
der Editor starten und die ersten Bytes der SD-Karte mit den 8 Bytes &#039;&#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039;&#039; beschreiben. Danach ist die Karte bereit für den neuen Einsatz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1p01_avr.zip|AVR-Studio Projektordner V1.1p01 Bugfix (*.zip, 19KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/GPS-Logger AVR-Quellcodes (V1.2+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/RawRead RawRead (V2.0+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59766</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=59766"/>
		<updated>2011-08-23T20:15:40Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Downloads */ ab jetzt werden neue Versionen auf GitHub veröffentlicht&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.martin-matysiak.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Ich habe ein doppelseitiges Layout erstellt, bei dem fast ausschließlich SMD-Bauteile zum Einsatz kommen, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, halte ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist lediglich meine Vorgehensweise beim zusammenbau des Geräts. Es besteht kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage hinweisen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit den beiden größten Bauteilen sollte man noch warten.&lt;br /&gt;
Dies wäre zum einen der Quarz, der nach dem Verlöten mit zwei &amp;quot;Löthügeln&amp;quot; auf der Unterseite das Befestigen des Mikrocontrollers stören könnte.&lt;br /&gt;
Zum anderen handelt es sich um das GPS-Modul. Man kann es eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Aus diesem Grund habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Lötzinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Zinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Ein Beispiel dafür findet sich in der Abbildung (die 22pF Kondensatoren in der Nähe des Quarzes).&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren zum Verlöten bei beiden Teilen sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontroller besteht aus mehreren einzelnen Modulen, die in der Hauptdatei zusammengesetzt und abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
Hier mal der Weg, den ich für den Einsatz am Mac nutze, denn der Martin hat ja mit seinem RawRead.exe den Windows-Pfad beschritten.&lt;br /&gt;
&lt;br /&gt;
Um die Daten von der Karte zu lutschen, nutze ich &#039;&#039;/bin/dd&#039;&#039;, also ein Bordmittel am Mac. Die übliche Warnung, &#039;&#039;&#039;if&#039;&#039;&#039; und &#039;&#039;&#039;of&#039;&#039;&#039; nicht zu vertauschen, und das richtige Device zu nehmen, erwähne ich hiermit nur der Vollständigkeit halber. Evtl. Fahrlässigkeit kann fantastische Folgen haben.&lt;br /&gt;
 $ dd if=/dev/disk1 of=~/Desktop/dump.bin&lt;br /&gt;
Das File ist bei mir 2 GB groß -- je nach Karte halt. Das dauert ne Weile. Man kann ein Gefühl dafür entwickeln (oder es berechnen), wie lang der letzte Track war und wie viele Blöcke dazu von der Karte geholt werden müssen und dafür das Kommando mit &amp;lt;code&amp;gt;count=xyz&amp;lt;/code&amp;gt; verkürzen. Die Angabe des Device &amp;lt;code&amp;gt;/dev/disk1&amp;lt;/code&amp;gt; variiert natürlich je nach Bestückung mit Geräten am USB. Das richtige zu finden klappt mit &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; oder klicki-bunti mit dem &#039;&#039;System-Profiler&#039;&#039; (Snow Leo) oder &#039;&#039;Systeminformationen&#039;&#039; (Lion). Das File &amp;lt;code&amp;gt;dump.bin&amp;lt;/code&amp;gt; kann man dann dem Java-Programm &#039;&#039;NMEA-Toolbox&#039;&#039; zum Konvertieren vorwerfen. Java-Programme laufen auf dem Mac unter Snow Leo sofort und auch unter Lion direkt nach Installation der JRE ohne Mucken. So weit, so gut. Nun der zweite Teil:&lt;br /&gt;
&lt;br /&gt;
Das Präparieren der Karte für den nächsten Aufzeichnungslauf (vgl. Karte leeren im Abschnitt für PC) mache ich mit einem nachinstallierten Progrämmchen namens &#039;&#039;hexedit&#039;&#039;. Das kann genau das, was es im Namen trägt. Und es kann es auch auf Devices, nicht nur auf Files. Installiert habe ich es aus dem Debian-Package-Fundus, der für Mac-Nutzer über eins der Projekte [http://www.macports.org/ MacPorts] oder [http://www.finkproject.org/ Fink] Einzug findet. Das ist am Anfang etwas mühsam, lohnt sich aber insgesamt, speziell wenn man z.B. eine Toolchain für AVR oder ARM oder ähnliches installieren möchte. Mühsam ist es auch deshalb, weil es wird das Developer-Package (&#039;&#039;Xcode&#039;&#039;) von Apple als Voraussetzung verlangt. Ist z.B. MacPorts installiert, kann mit&lt;br /&gt;
 # port install hexedit&lt;br /&gt;
das Paket installiert werden. Wenn der &#039;&#039;hexedit&#039;&#039; läuft, macht man schnell noch das Device beschreibbar mit&lt;br /&gt;
 # chmod 666 /dev/disk1&lt;br /&gt;
und dann läßt sich mit &lt;br /&gt;
 # hexedit /dev/disk1&lt;br /&gt;
der Editor starten und die ersten Bytes der SD-Karte mit den 8 Bytes &#039;&#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039;&#039; beschreiben. Danach ist die Karte bereit für den neuen Einsatz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1p01_avr.zip|AVR-Studio Projektordner V1.1p01 Bugfix (*.zip, 19KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/GPS-Logger AVR-Quellcodes (V1.2+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [https://github.com/kaktus621/RawRead RawRead (V2.0+) auf GitHub &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=52465</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=52465"/>
		<updated>2010-11-01T21:36:53Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: Kleine Änderungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.martin-matysiak.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Ich habe ein doppelseitiges Layout erstellt, bei dem fast ausschließlich SMD-Bauteile zum Einsatz kommen, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, halte ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist lediglich meine Vorgehensweise beim zusammenbau des Geräts. Es besteht kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage hinweisen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit den beiden größten Bauteilen sollte man noch warten.&lt;br /&gt;
Dies wäre zum einen der Quarz, der nach dem Verlöten mit zwei &amp;quot;Löthügeln&amp;quot; auf der Unterseite das Befestigen des Mikrocontrollers stören könnte.&lt;br /&gt;
Zum anderen handelt es sich um das GPS-Modul. Man kann es eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Aus diesem Grund habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Lötzinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Zinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Ein Beispiel dafür findet sich in der Abbildung (die 22pF Kondensatoren in der Nähe des Quarzes).&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren zum Verlöten bei beiden Teilen sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontroller besteht aus mehreren einzelnen Modulen, die in der Hauptdatei zusammengesetzt und abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1p01_avr.zip|AVR-Studio Projektordner V1.1p01 Bugfix (*.zip, 19KB) &#039;&#039;&#039;(NEU, gepatchtes makefile, bitte für Win bestätigen)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1_avr.zip|AVR-Studio Projektordner V1.1 (*.zip, 19KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kaktus621&amp;diff=52230</id>
		<title>Benutzer:Kaktus621</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kaktus621&amp;diff=52230"/>
		<updated>2010-10-24T20:41:09Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: Neue Domain&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Herzlich Willkommen auf meiner Benutzerseite!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mein Name ist Martin Matysiak, ich bin 19 Jahre alt und habe seit kurzem meine Schullaufbahn am Kaiser-Karls-Gymnasium Aachen abgeschlossen. &lt;br /&gt;
Mein Interesse an der Elektronik habe ich wohl von meinem Vater geerbt :) und durch mein Interesse für die Informatik bin ich so zu Mikrocontrollern gekommen. Seitdem mache ich immer mal ein paar kleine Sachen, um den Umgang mit µCs zu erlernen.&lt;br /&gt;
&lt;br /&gt;
Mein erstes großes Projekt ist ein [[GPS Logger]], mit dem man ganz leicht seine eigene Route aufzeichnen und am PC darstellen kann.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen kleineren Nachfolger, den [[GPS Logger Mini]]. Dieser ist so entworfen, dass ein Nachbau ohne große Probleme möglich ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin habe ich einige Bauteile für die Software Eagle gezeichnet, welche ich euch zur Verfügung stellen möchte:&lt;br /&gt;
&lt;br /&gt;
*[[Media:con-memcard.zip|con-memcard]] - Diverse Speicherkartenslots von verschiedenen Anbietern (Siehe Description der Devices)&lt;br /&gt;
*[[Media:selfmade.zip|selfmade]] - Alle Möglichen Bauteile, die in der Form noch nicht in Eagle vertreten waren. Wird immer mal wieder aktualisiert ;-)&lt;br /&gt;
&lt;br /&gt;
Wenn du mehr über mich erfahren willst, besuche doch bitte meine Homepage unter [http://martin-matysiak.de/ martin-matysiak.de]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51526</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51526"/>
		<updated>2010-10-18T19:09:18Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Downloads */ Alte Version auch noch da gelassen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1_avr.zip|AVR-Studio Projektordner V1.1 (*.zip, 19KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51525</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51525"/>
		<updated>2010-10-18T19:08:38Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Downloads */ &amp;quot;NEU&amp;quot; Marker aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1_avr.zip|AVR-Studio Projektordner V1.1 (*.zip, 19KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_1_1_avr.zip&amp;diff=51524</id>
		<title>Datei:GLoggerMini 1 1 avr.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_1_1_avr.zip&amp;diff=51524"/>
		<updated>2010-10-18T19:07:53Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51522</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51522"/>
		<updated>2010-10-18T19:07:30Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_1_1_avr.zip|AVR-Studio Projektordner V1.1 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51521</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51521"/>
		<updated>2010-10-18T19:05:47Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* AVR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung. In der Regel sind LiIon Akkus durch eine interne Schaltung vor Tiefentladung geschützt. Sollte dies nicht der Fall sein bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Als Farnell-Alternative sei hbe-shop.de genannt, bei dem auch von Privat bestellt werden kann. Der Shop nutzt die Farnell-Bestellnummern.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.1&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
In Version 1.1 wurde ein Fehler behoben, durch den vorher das Schreiben immer nur bei Sektor 1 angefangen hat. Dadurch würden bereits existente Pfade allerdings überschrieben werden. Vielen Dank an [mailto:FischerRalf@gmx.net Ralf Fischer] für die Erkennung und gleichzeitige Lösung des Problems!&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51200</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=51200"/>
		<updated>2010-10-07T20:37:28Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* PC */ Update von RawRead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner [[GPS_Logger#Computer|NMEA-Toolbox]] zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich. &lt;br /&gt;
&lt;br /&gt;
In der neuen Version des Programms (1.1) werden nun die vergangenen Daten nach Abfrage (&amp;quot;Karte leeren?&amp;quot;) wirklich komplett gelöscht. Davor wurde lediglich der erste Sektor überschrieben. Es hat sich allerdings herausgestellt, dass es dadurch manchmal dazu kommen kann, dass beim Auslesen Teile von älteren Routen an das Ende der aktuellen Route angehängt werden. Dies ist nun nicht mehr möglich. Weiterhin bin ich von der &amp;quot;Dev-C++&amp;quot; auf die &amp;quot;MS Visual C++ 2010 Express&amp;quot; IDE umgestiegen, da Dev-C++ scheinbar nicht mehr ganz so gut gepflegt wird und die IDE teilweise recht fehlerbehaftet ist.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_exe.zip|RawRead V1.1 (*.zip, 5KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_1_1_msvcpp.zip|MS Visual C++ 2010 Express Projektordner für RawRead V1.1 (*.zip, 349KB) &#039;&#039;&#039;(NEU)&#039;&#039;&#039;]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_1_1_msvcpp.zip&amp;diff=51199</id>
		<title>Datei:GLoggerMini rawread 1 1 msvcpp.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_1_1_msvcpp.zip&amp;diff=51199"/>
		<updated>2010-10-07T20:28:32Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: Änderungen:

Bei &amp;quot;Karte leeren&amp;quot; werden alle gelesenen Sektoren überschrieben, anstelle nur des ersten. Dadurch können bei einem Auslesevorgang keine Daten einer vergangenen Aufzeichnung erscheinen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Änderungen:&lt;br /&gt;
&lt;br /&gt;
Bei &amp;quot;Karte leeren&amp;quot; werden alle gelesenen Sektoren überschrieben, anstelle nur des ersten. Dadurch können bei einem Auslesevorgang keine Daten einer vergangenen Aufzeichnung erscheinen&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_1_1_exe.zip&amp;diff=51198</id>
		<title>Datei:GLoggerMini rawread 1 1 exe.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_1_1_exe.zip&amp;diff=51198"/>
		<updated>2010-10-07T20:26:10Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:GPS_Logger_Mini&amp;diff=48745</id>
		<title>Diskussion:GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:GPS_Logger_Mini&amp;diff=48745"/>
		<updated>2010-06-25T15:07:43Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;und für 2 Widerstände + einen Verbindung zu einem AnalogIn war kein Platz mehr? VCC prüfen -&amp;gt; wenn zu klein -&amp;gt; SLEEP mode&lt;br /&gt;
&lt;br /&gt;
Ich denke der µC ist das kleinere Übel. Eher müsste man das GPS-Modul als Hauptverbraucher abschalten. Außerdem müsste man doch VBAT und nicht VCC kontrollieren? VCC müsste durch den Lowdrop-Regler relativ Konstant sein. Muss mal schauen wie das platz-mäßig hinkommt. --[[Benutzer:Kaktus621|Kaktus621]] 15:07, 25. Jun. 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48733</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48733"/>
		<updated>2010-06-25T11:17:05Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &amp;quot;Baustellennotiz&amp;quot; entfernt, Forenthreads hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Forendiskussionen==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181622 Verkaufsthread Platinen]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48680</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48680"/>
		<updated>2010-06-23T15:08:50Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Einleitung */ Weblink zu einem Beispiel ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
Eine Beispielroute, die mit dem gLogger Mini aufgezeichnet wurde, kann [http://maps.google.com/maps/ms?ie=UTF&amp;amp;msa=0&amp;amp;msid=102721812355516657756.000489127e67aca05a27f auf Google Maps] betrachtet werden. Einige Kurven sind dort sehr geschnitten, das liegt an der maximal möglichen Anzahl an Koordinaten bei Google Maps, weswegen der Pfad dementsprechend vereinfacht werden musste.&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48660</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48660"/>
		<updated>2010-06-22T08:09:08Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Anleitung */ Inhalt ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion. Es gilt folgende Pinbelegung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Avr-isp-pinout.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 7:&#039;&#039;&#039; Sobald der Akku geladen und der Programmieradapter verbunden ist, wird es Zeit, das Gerät zu programmieren. Damit das Gerät Strom bekommt, muss während dieses Vorgangs eine MicroSD-Karte eingelegt sein. Neben dem Programm müssen auch die Fuses richtig eingestellt werden. Ich verwende hierfür das Programm &amp;quot;avrdude&amp;quot; mit folgenden Parametern&amp;lt;ref name=&amp;quot;fuses&amp;quot;&amp;gt;Änderungen im Vergleich zu den Standardfuses: CKDIV8 abgeschaltet, Clock Source = Ext. Crystal Osc., 3-8Mhz, 258/14CK + 65ms Startup Time&amp;lt;/ref&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-U lfuse:w:0xdc:m -U hfuse:w:0xdf:m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das Gerät richtig programmiert, dürfe die grüne LED nach einem Initialisierungsvorgang mit einer Frequenz von 1Hz aufblitzen (wenn man nichts an den eingehenden NMEA-Kommandos verändert hat). Sollte dies der Fall sein, kann man nun den Programmieradapter wieder entfernen und die Platine im Gehäuse verschrauben.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 8:&#039;&#039;&#039; Leider liefert das Gehäuse nur Schrauben mit, um den Deckel zu befestigen, nicht aber für die inneren zwei Gewinde zur Befestigung der Platine. Diese muss man entweder zu Hause oder im nächsten Baumarkt suchen. Bei meinem Prototypen habe ich 2x12-Holzschrauben verwendet. Diese waren minimal zu lang! Ich würde also &#039;&#039;&#039;2x10 oder 2x8&#039;&#039;&#039; Schrauben empfehlen. Wichtig ist, dass sowohl die äußeren als auch die inneren Schrauben &#039;&#039;&#039;nicht zu fest&#039;&#039;&#039; angeschraubt werden dürfen. Ansonsten herrscht ein zu großer Druck auf den Kartenslot und die Karte verklemmt sich beim Einlegen oder Herausnehmen. Nach dem Anschrauben also immer prüfen, ob die Karte noch gut passt. Auf einer Seite des Gehäuses muss man etwas vom Plastik wegschneiden, damit Zugang zum USB-Port und zum Speicherkarten-Slot gegeben ist.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48656</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48656"/>
		<updated>2010-06-21T20:22:09Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Anleitung */ Anleitung ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 2:&#039;&#039;&#039; Nun sind SD-Slot und Mikrocontroller dran. Da beide sehr geringe Pinabstände besitzen, ist das Verfahren sehr ähnlich. Ich verwende die Methode mit einer Entlötlitze, welche im nachfolgenden Bild dargestellt ist. Das Verfahren ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
a) Bevor das Bauteil platziert wird, zunächst die Pads mit etwas Lötpaste bedecken, sodass der Lötvorgang später vereinfacht wird (optional). Anschließend wird das Bauteil ausgerichtet und an zwei Pads (am besten gegenüberliegend) fixiert&lt;br /&gt;
&lt;br /&gt;
b) Eine Kante wird großzügig mit Zinn bedeckt und verlötet&lt;br /&gt;
&lt;br /&gt;
c) Mit einer Entlötlitze wird so lange überschüssiges Zinn wieder entfernt, bis keine Zinnbrücken mehr vorhanden sind&lt;br /&gt;
&lt;br /&gt;
d) Wiederholung von Schritt b und c bei den verbleibenden Kanten&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist eine sehr gut aussehende Lötstelle mit optimalem Kontakt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_tqfp.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 3:&#039;&#039;&#039; Die kritischsten Bauteile befinden sich nun auf der Platine. Was noch fehlt, sind einige Kondesatoren, ein Widerstand sowie (falls vorhin weggelassen) der Quarz und das GPS-Modul. Nach dem erfolgreichen Löten sollte die Platine wie beim nebenstehenden Bild aussehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_fin.jpg|150px|thumb|Fast fertige Platine]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 4:&#039;&#039;&#039; Nun muss noch der Akkumulator mit der Platine verbunden werden. Ausgeliefert wird er mit einem Stecker - eigentlich war eine passende Buchse geplant, leider haben wenige Millimeter für diesen Plan gefehlt. Aus diesem Grund muss der Stecker behutsam entfernt werden (die Kabel nicht davor abschneiden, sonst sind sie zu kurz!). Schaut man auf die Unterseite der Platine (die Seite mit µC und SD-Slot), so sollten die Kabel von links an die Vias herangeführt werden, damit alles gut in das Gehäuse passt. Hierbei muss man ein wenig probieren, bis es passt. Fotos zur Positionierung des Gerätes folgen noch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 5:&#039;&#039;&#039; Bevor der Mikrocontroller programmiert wird, sollte man zunächst den Akkumulator vollständig aufladen (wer weiß, in welchem Zustand er ankommt..). Hierfür einfach das Gerät per USB entweder an den Computer oder an ein Netzteil mit USB-Buchsen-Ausgang stecken. Wenn alles geklappt hat, leuchtet jetzt die rote LED, die anzeigt, dass der Akku geladen wird. Zeit für eine kleine Pause :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 6:&#039;&#039;&#039; In der Zwischenzeit kann man sich natürlich auch den Programmieradapter basteln. Ich habe hierfür einen 2x3-Pin Stecker auf eine Lochraster Platine gebracht und anschließend an jeden Pin ein Stück Draht angelötet, welcher nachher mit den entsprechenden Pads auf der Platine verbunden werden muss. Das nebenstehende Foto zeigt meine Konstruktion.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_isp.jpg|150px|thumb|ISP-Programmieradapter]]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Glm_isp.jpg&amp;diff=48655</id>
		<title>Datei:Glm isp.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Glm_isp.jpg&amp;diff=48655"/>
		<updated>2010-06-21T20:19:30Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Glm_fin.jpg&amp;diff=48654</id>
		<title>Datei:Glm fin.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Glm_fin.jpg&amp;diff=48654"/>
		<updated>2010-06-21T20:19:03Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Glm_tqfp.jpg&amp;diff=48653</id>
		<title>Datei:Glm tqfp.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Glm_tqfp.jpg&amp;diff=48653"/>
		<updated>2010-06-21T20:18:53Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48644</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48644"/>
		<updated>2010-06-21T16:39:24Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Anleitung */ Tipps ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_eins.jpg|150px|thumb|Ausgangslage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Bei Bauteilen mit vielen Pins (z. B. die USB-Buchse) kann man ruhig viel Zinn verwenden, auch wenn Lötbrücken entstehen. Das überschüssige Lötzinn kann man dann mit einer Entlötlitze entfernen, anschließend hat man sehr gut aussehende Lötstellen. Das verfahren erläutere ich allerdings gleich noch einmal mit Bildern beim Mikrocontroller.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Wenn man nur SMD-1206-Bauteile auf Lager haben sollte, bekommt man diese auch ganz gut auf die 0805er Pads. Siehe zum Beispiel die 22pF Kondensatoren in der Nähe des Quarzes.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48643</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48643"/>
		<updated>2010-06-21T16:34:08Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Anleitung */ Mehr kommt bald&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
Da fast ausschließlich SMD-Bauteile verwendet werden, sollten generelle Lötkenntnisse vorhanden sein. Diese Anleitung ist die Vorgehensweise wie ich das Gerät zusammengebaut habe. Es besteht durchaus kein Zwang, die selbe Reihenfolge einzuhalten. Mit dieser Anleitung möchte ich lediglich auf ein paar Feinheiten bei der Montage eingehen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_eins.jpg|150px|thumb|Ausgangslage]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Schritt 1:&#039;&#039;&#039; Fangen wir mit der Oberseite der Platine an. Diese ist relativ unkritisch, alle SMD Bauteile können schon aufgelötet werden. Lediglich mit dem Quarz und dem GPS-Modul sollte man vielleicht noch warten. Der Quarz deswegen, weil man dadurch auf der Unterseite zwei &amp;quot;Löthügel&amp;quot; auf der Unterseite weniger hat, die beim verlöten des Mikrocontrollers unter Umständen stören könnten.&lt;br /&gt;
Das GPS-Modul kann man eigentlich auch jetzt schon auflöten, wenn man allerdings nachher noch selber am Programm für den Mikrocontroller arbeiten möchte, sind freie UART-Leitungen zwecks Debugging sehr hilfreich. Deswegen habe ich mir das Modul für den Schluss aufgespart.&lt;br /&gt;
&lt;br /&gt;
[[Datei:glm_zwei.jpg|150px|thumb|Platine nach Schritt Eins]]&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Glm_zwei.jpg&amp;diff=48642</id>
		<title>Datei:Glm zwei.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Glm_zwei.jpg&amp;diff=48642"/>
		<updated>2010-06-21T16:31:58Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Glm_eins.jpg&amp;diff=48641</id>
		<title>Datei:Glm eins.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Glm_eins.jpg&amp;diff=48641"/>
		<updated>2010-06-21T16:31:44Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Kaktus621&amp;diff=48595</id>
		<title>Benutzer:Kaktus621</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Kaktus621&amp;diff=48595"/>
		<updated>2010-06-19T20:47:51Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: Update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Herzlich Willkommen auf meiner Benutzerseite!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mein Name ist Martin Matysiak, ich bin 19 Jahre alt und habe seit kurzem meine Schullaufbahn am Kaiser-Karls-Gymnasium Aachen abgeschlossen. &lt;br /&gt;
Mein Interesse an der Elektronik habe ich wohl von meinem Vater geerbt :) und durch mein Interesse für die Informatik bin ich so zu Mikrocontrollern gekommen. Seitdem mache ich immer mal ein paar kleine Sachen, um den Umgang mit µCs zu erlernen.&lt;br /&gt;
&lt;br /&gt;
Mein erstes großes Projekt ist ein [[GPS Logger]], mit dem man ganz leicht seine eigene Route aufzeichnen und am PC darstellen kann.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile gibt es einen kleineren Nachfolger, den [[GPS Logger Mini]]. Dieser ist so entworfen, dass ein Nachbau ohne große Probleme möglich ist.&lt;br /&gt;
&lt;br /&gt;
Weiterhin habe ich einige Bauteile für die Software Eagle gezeichnet, welche ich euch zur Verfügung stellen möchte:&lt;br /&gt;
&lt;br /&gt;
*[[Media:con-memcard.zip|con-memcard]] - Diverse Speicherkartenslots von verschiedenen Anbietern (Siehe Description der Devices)&lt;br /&gt;
*[[Media:selfmade.zip|selfmade]] - Alle Möglichen Bauteile, die in der Form noch nicht in Eagle vertreten waren. Wird immer mal wieder aktualisiert ;-)&lt;br /&gt;
&lt;br /&gt;
Wenn du mehr über mich erfahren willst, besuche doch bitte meine Homepage unter [http://www.k621.de/ www.k621.de]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48594</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48594"/>
		<updated>2010-06-19T20:43:41Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Benötigte Bauteile */ Link zum Verkaufsthread gesetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || [http://www.mikrocontroller.net/topic/181622 Ich!] || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48591</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48591"/>
		<updated>2010-06-19T20:07:50Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* AVR */ Bild hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || * || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[*]: In kürze werde ich professionell gefertigte Platinen anbieten. Dazu folgt bald ein Foren-Thread. Ansonsten kann man die Platinen natürlich auch selber fertigen, was für Personen mit entsprechendem Equipment günstiger sein dürfte.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
[[Bild:gLoggerMini_offenLaden.jpg|thumb|150px|Geöffneter gLogger Mini während des Ladevorgangs]]&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_offenLaden.jpg&amp;diff=48590</id>
		<title>Datei:GLoggerMini offenLaden.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_offenLaden.jpg&amp;diff=48590"/>
		<updated>2010-06-19T20:07:15Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48589</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48589"/>
		<updated>2010-06-19T19:56:13Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Downloads */ Neuer Download&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || * || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[*]: In kürze werde ich professionell gefertigte Platinen anbieten. Dazu folgt bald ein Foren-Thread. Ansonsten kann man die Platinen natürlich auch selber fertigen, was für Personen mit entsprechendem Equipment günstiger sein dürfte.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_avr.zip|AVR-Studio Projektordner V1.0 (*.zip, 19KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead V1.0 (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead V1.0 (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_avr.zip&amp;diff=48588</id>
		<title>Datei:GLoggerMini avr.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_avr.zip&amp;diff=48588"/>
		<updated>2010-06-19T19:56:02Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: AVR-Studio Projektordner, V1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AVR-Studio Projektordner, V1.0&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48586</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48586"/>
		<updated>2010-06-19T19:52:44Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Einzelnachweise */ hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || * || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[*]: In kürze werde ich professionell gefertigte Platinen anbieten. Dazu folgt bald ein Foren-Thread. Ansonsten kann man die Platinen natürlich auch selber fertigen, was für Personen mit entsprechendem Equipment günstiger sein dürfte.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf AN0003 (*.PDF)]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
==Einzelnachweise==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48584</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48584"/>
		<updated>2010-06-19T19:51:29Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* AVR */ Mit Inhalt gefüllt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || * || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[*]: In kürze werde ich professionell gefertigte Platinen anbieten. Dazu folgt bald ein Foren-Thread. Ansonsten kann man die Platinen natürlich auch selber fertigen, was für Personen mit entsprechendem Equipment günstiger sein dürfte.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
&lt;br /&gt;
Die Software für den Mikrocontrollern besteht aus mehreren Einzelnen Modulen, die in der Hauptdatei zusammengesetzt in der Hauptschleife abgefragt werden. Der generelle Ablauf des Programms sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
* NMEA-String vom GPS-Modul holen&lt;br /&gt;
* Wenn GPS Fix, dann NMEA-String auf SD-Karte schreiben&lt;br /&gt;
* Einmal als optisches Feedback die LED aufblitzen lassen&lt;br /&gt;
* Schlafen legen, auf den nächsten Datenempfang per UART warten&lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass die LED bei jedem eingehenden NMEA-Kommando blinkt, und nicht etwa bei jedem Schreibvorgang. Sollte die SD-Karte also trotz mehrfachen Blinkens leer sein, so hatte das Modul höchstwahrscheinlich keinen GPS-Fix. Während der Initialisierung der Module leuchtet die grüne LED dauerhaft. Wenn sie anschließend mit einer relativ hohen Frequenz blinkt (um genau zu sein 5Hz), so konnte entweder die SD-Karte oder das GPS-Modul nicht initialisiert werden. Die rote LED ist nicht mit dem Mikrocontroller verbunden und dient nur zum Anzeigen des Ladevorgangs (leuchtet sie bei eingestecktem USB-Kabel, so wird der Akku momentan geladen. Sobald die LED erlischt, ist der Ladevorgang beendet und der Akku aufgeladen).&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden nur $GPGGA-Meldungen aufgezeichnet. In der Datei &#039;&#039;modules/gps.c&#039;&#039; lässt sich dies in der Funktion &#039;&#039;gps_init()&#039;&#039; allerdings leicht verändern. Man muss lediglich die Werte der Variable &#039;&#039;commands&#039;&#039; (Z. 31) ändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
  unsigned char commands[8] = {&lt;br /&gt;
    0x01, //GGA 1Hz&lt;br /&gt;
    0x00, //Keine GSA&lt;br /&gt;
    0x00, //Keine GSV&lt;br /&gt;
    0x00, //Keine GLL&lt;br /&gt;
    0x00, //Keine RMC&lt;br /&gt;
    0x00, //Keine VTG&lt;br /&gt;
    0x00, //Keine ZDA&lt;br /&gt;
    0x00}; //In SRAM&amp;amp;FLASH&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Wert gibt an, in welchem Zeitintervall (in Sekunden) das Kommando vom GPS-Modul ausgegeben werden soll. Der Wert 0 deaktiviert die jeweilige Meldung. &lt;br /&gt;
&lt;br /&gt;
Sollten andere Kommandos gewünscht sein, so ist es ratsam bzw. &#039;&#039;&#039;notwendig&#039;&#039;&#039;, die Prüfung nach einer validen Positionsmeldung abzuschalten. Hierfür muss man folgende Codezeilen in der Hauptschleife (&#039;&#039;gLogger.c&#039;&#039;, Z. 95-97)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    if(gps_getNmeaSentence(nmeaBuf, 128)) {&lt;br /&gt;
      nofs_writeString(nmeaBuf);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
auf folgende abändern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    gps_getNmeaSentence(nmeaBuf, 128);&lt;br /&gt;
    nofs_writeString(nmeaBuf);&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und schon wird jegliches eingehende NMEA-Kommando auf die Speicherkarte geschrieben. Es gibt noch einige andere Konfigurationsoptionen für das ST22 GPS-Modul. Diese sind in der Application Note AN0003 des Skytraq Venus6 Chipsatzes&amp;lt;ref name=&amp;quot;AN0003&amp;quot;&amp;gt;[http://www.perthold.de/BINARY/AN0003_Binary_Messages_SkyTraq_Venus6.pdf]&amp;lt;/ref&amp;gt; aufgelistet.&lt;br /&gt;
&lt;br /&gt;
Die Befehlsbebliothek für das &#039;&#039;NoFS&#039;&#039; ist sehr begrenzt - von Außen handelt es sich um eine Art WOM&amp;lt;ref name=&amp;quot;WOM&amp;quot;&amp;gt;[http://de.wikipedia.org/wiki/Write-Only-Memory Write-Only-Memory]&amp;lt;/ref&amp;gt;, ohne jegliche Lesefunktion. Da ich zum derzeitigen Zeitpunkt keine Verwendung für selbige Methode hatte, wurde erst einmal auf sie verzichtet. In zukünftigen Versionen wird eine Methode zum Lesen allerdings höchstwahrscheinlich noch folgen. Beim Schreiben von Zeichenketten (Funktion &#039;&#039;nofs_writeString&#039;&#039;) werden diese zunächst in einen Buffer zwischengelagert, der die Größe eines Datensektors auf der Speicherkarte besitzt. Um die Schreibzugriffe auf die Speicherkarte gering zu halten und trotzdem keinen großen Datenverlust zu riskieren, wird der Buffer nur dann auf die Karte geschrieben, wenn selbiger voll ist, oder  es sich um den &#039;&#039;n&#039;&#039;-ten Funktionsaufruf handelt. Die Anzahl &#039;&#039;n&#039;&#039; kann in der Datei &#039;&#039;modules/nofs.h&#039;&#039; variiert werden (Konstante &#039;&#039;NOFS_WRITE_BUFER_AFTER_NTH_COMMAND&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version der Software ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Aktualisierungen werden hier aufgeführt. Das AVR-Studio Projektverzeichnis kann man im Downloads-Bereich abrufen.&lt;br /&gt;
&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48583</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48583"/>
		<updated>2010-06-19T14:55:14Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || * || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[*]: In kürze werde ich professionell gefertigte Platinen anbieten. Dazu folgt bald ein Foren-Thread. Ansonsten kann man die Platinen natürlich auch selber fertigen, was für Personen mit entsprechendem Equipment günstiger sein dürfte.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_exe.zip|RawRead (*.zip, 304KB)]]&lt;br /&gt;
* [[Media:gLoggerMini_rawread_devcpp.zip|Dev-C++ Projektordner für RawRead (*.zip, 5KB)]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_devcpp.zip&amp;diff=48582</id>
		<title>Datei:GLoggerMini rawread devcpp.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_devcpp.zip&amp;diff=48582"/>
		<updated>2010-06-19T14:55:02Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: RawRead Sources V1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RawRead Sources V1.0&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_exe.zip&amp;diff=48581</id>
		<title>Datei:GLoggerMini rawread exe.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:GLoggerMini_rawread_exe.zip&amp;diff=48581"/>
		<updated>2010-06-19T14:54:20Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: RawRead V1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RawRead V1.0&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48580</id>
		<title>GPS Logger Mini</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=GPS_Logger_Mini&amp;diff=48580"/>
		<updated>2010-06-19T14:48:30Z</updated>

		<summary type="html">&lt;p&gt;Kaktus621: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:new_gLogger_logo.svg|right]]&lt;br /&gt;
&#039;&#039;Von [http://www.k621.de Martin Matysiak]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;- Dieser Artikel befindet sich im Aufbau -&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vorab: ich habe mich entschieden, einen gänzlich neuen Artikel für diesen GPS-Logger anzulegen, da im Grunde genommen der Name die einzige Gemeinsamkeit der beiden ist. Ansonsten handelt es sich mehr oder weniger um einen kompletten Neuaufbau.&lt;br /&gt;
&lt;br /&gt;
==Einleitung==&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mit meinem [[GPS Logger]] nun schon seit zwei Jahren erfolgreich diverse Strecken und Touren aufzeichne, wurde es Zeit für eine Neuauflage des Gerätes. Vor allem die Größe war auf Radfahrten eher hinderlich, hinzu kam die störanfällige Kabelverbindung des GPS-Moduls, die den alltäglichen Belastungen nicht immer stand hielt. Ein weiterer Aspekt beim Entwurf der zweiten Version, der mir wichtig war, ist eine leichte Nachbaumöglichkeit des Loggers. Aus diesem Grund verwende ich nur Bauteile, die bei den bekannten Distributoren erhältlich sind. Die Platine ist exakt auf das Gehäuse abgestimmt, sodass eine stabile Konstruktion gewährleistet ist.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend eine Auflistung der wichtigsten Änderungen im Vergleich zum Vorgänger:&lt;br /&gt;
* Deutlich kleiner (Außenmaße: 5cm x 5cm x 2cm)&lt;br /&gt;
* Integrierte Ladeschaltung&lt;br /&gt;
* Keine Schalter/Tasten - einlegen der SD-Karte schaltet das Gerät ein, herausnehmen schaltet es aus&lt;br /&gt;
* Aus Platzgründen verzicht auf ein FAT-Dateisystem auf der SD-Karte - Stattdessen Einsatz des selbstentwickelten &amp;quot;NoFS&amp;quot; (&#039;&#039;&#039;No&#039;&#039;&#039; &#039;&#039;&#039;F&#039;&#039;&#039;ile&#039;&#039;&#039;S&#039;&#039;&#039;ystem)&lt;br /&gt;
* Kein Schutz vor Tiefentladung - bitte den Akku regelmäßig laden&lt;br /&gt;
* Geschätzte Akkulaufzeit: 10 bis 15 Stunden&lt;br /&gt;
* Doppelseitiges Layout, GPS-Modul befindet sich direkt auf der Platine (höhere Stabilität)&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
[[Bild:gLoggerMini_top.jpg|thumb|150px|Oberseite der Platine]]&lt;br /&gt;
[[Bild:gLoggerMini_bottom.jpg|thumb|150px|Unterseite der Platine]]&lt;br /&gt;
Die Platine ist von den Maßen her nach den Vorgaben des Gehäuses gestaltet. Mit Hilfe der zwei Bohrungen lässt es sich somit passgenau montieren. Beim Layout handelt es sich um ein Doppelseitiges, bei dem fast ausschließlich SMD-Bauteile verwendet worden sind, um möglichst viel Platz zu sparen. Das GPS-Modul ist fest auf der Platine angebracht, lediglich der Akku wird über ein kurzes Kabel zur Platine herangeführt. Alle Bauteile passen ohne große Probleme in das Gehäuse, näheres dazu in den folgenden Abschnitten.&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan sowie das Layout wurde mit Eagle erstellt, der Projektordner kann im &amp;quot;Downloads&amp;quot;-Bereich abgerufen werden. Ober- und Unterseite der Platine sind auf den beiden Fotos dargestellt, nachfolgend noch der Schaltplan des gLogger Mini:&lt;br /&gt;
&lt;br /&gt;
[[Datei:gLoggerMini_schaltplan.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Aus Platzgründen wurde auf viele Extras des vorherigen [[GPS Logger]]s verzichtet, so wird die Akkumulatorspannung nicht mehr kontrolliert und die unverbundenen Pins sind auch nicht mehr zu Steckern herausgeführt. Auch auf einen klassischen ISP-Programmierstecker habe ich verzichtet. Auf der Unterseite der Platine sind allerdings alle 6 notwendigen Kontakte als große Lötpads freigelegt, an denen man Kabel zu einem passenden Stecker anlöten kann (siehe Bauanleitung). Da der Mikrocontroller in der Regel nur einmalig oder nur sehr selten umprogrammiert werden muss, hielt ich diesen Mehraufwand für vertretbar.&lt;br /&gt;
&lt;br /&gt;
==Zusammenbau==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt möchte ich eine Schritt für Schritt Anleitung zum Zusammenbau des &amp;quot;gLogger Mini&amp;quot; anbieten, sodass jeder einen Nachbau schafft. Im Abschnitt &amp;quot;Benötigte Bauteile&amp;quot; befinden sich nicht nur die Bauteile für die Platine, sondern auch alle anderen Bauteile, die für den Zusammenbau notwendig sind. Der dort aufgeführte Gesamtpreis entspricht somit ziemlich genau dem, was für einen Nachbau ausgegeben werden muss (zzgl. Versandkosten und MwSt. bei Farnell). Das Einzige, was dort nicht aufgelistet ist, sind zwei Schrauben zum fixieren der Platine im Gehäuse. Diese sollten sich allerdings im Haushalt oder aber im nächsten Baumarkt kostengünstig auftreiben lassen. Näheres dazu in der Anleitung.&lt;br /&gt;
&lt;br /&gt;
===Benötigte Bauteile===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Beschreibung || Wert || Bauform || Distributor || Preis&lt;br /&gt;
|-&lt;br /&gt;
| C1 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C2 || Keramik-Kondensator || 1µF || 0805 || Alle || 0,07€&lt;br /&gt;
|-&lt;br /&gt;
| C3 || Keramik-Kondensator || 10nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C4 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| C5 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C6 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C7 || Keramik-Kondensator || 22pF || 0805 || Alle || 0,05€&lt;br /&gt;
|-&lt;br /&gt;
| C8 || Keramik-Kondensator || 100nF || 0805 || Alle || 0,05€ &lt;br /&gt;
|-&lt;br /&gt;
| IC1 || Low-Drop Spannungsregler 3.3V || LP2985 || SOT23-5L || [http://de.farnell.com/national-semiconductor/lp2985aim5-3-3-nopb/v-reg-linear-3-3v-smd/dp/1469134 F] || 0,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC2 || Laderegler || MAX1555 || SOT23-5L || [http://de.farnell.com/maxim-integrated-products/max1555ezk-t/usb-ac-adapter-1-cell-li-sot23/dp/1628222?Ntt=MAX1555 F] || 2,41€&lt;br /&gt;
|-&lt;br /&gt;
| IC3 || Mikrocontroller || ATMega88 || TQFP32 || [http://de.farnell.com/atmel/atmega88pa-au/mcu-8bit-avr-8k-flash-32tqfp/dp/1715490 F] || 3,56€&lt;br /&gt;
|-&lt;br /&gt;
| IC4 || MicroSD-Kartenslot || Hirose DM3B || SMD || [http://de.farnell.com/hrs-hirose/dm3bt-dsf-pejs/steckverbinder-micro-sd-push-push/dp/1764375 F] || 2,23€&lt;br /&gt;
|-&lt;br /&gt;
| IC5 || GPS-Modul || ST22 || - || [http://www.mikrocontroller.net/topic/151330 P] || 20€&lt;br /&gt;
|-&lt;br /&gt;
| LED1 || SMD Leuchtdiode || ROT || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| LED2 || SMD Leuchtdiode || GRÜN || 1206 || Alle || 0,08€&lt;br /&gt;
|-&lt;br /&gt;
| Q1 || Quarz || 7,3728MHz || HC49/S || Alle || 0,18€&lt;br /&gt;
|-&lt;br /&gt;
| R1 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R2 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R3 || Widerstand || 10k&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| R4 || Widerstand || 470&amp;amp;Omega; || 0805 || Alle || 0,10€&lt;br /&gt;
|-&lt;br /&gt;
| X1 || USB Buchse || Mini-B 5 pol. || SMD || [http://www.reichelt.de/?ACTION=3;ARTICLE=52003;PROVID=2402 R] || 0,24€&lt;br /&gt;
|-&lt;br /&gt;
| - || Akku || 600mAh || iPod Mini || [http://www.reichelt.de/?ACTION=3;ARTICLE=90643;PROVID=2402 R] || 5,30€&lt;br /&gt;
|-&lt;br /&gt;
| - || Gehäuse || Hammond 1551R || 5x5x2cm³ || [http://www.conrad.de/ce/de/product/534299/UNIVERSALGEHAeUSE-1551RBK-50X50X20-SCHW C] || 1,67€&lt;br /&gt;
|-&lt;br /&gt;
| - || Platine || || || * || 10€&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Gesamtpreis&#039;&#039;&#039; || || || || &#039;&#039;&#039;47,15€&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[*]: In kürze werde ich professionell gefertigte Platinen anbieten. Dazu folgt bald ein Foren-Thread. Ansonsten kann man die Platinen natürlich auch selber fertigen, was für Personen mit entsprechendem Equipment günstiger sein dürfte.&lt;br /&gt;
&lt;br /&gt;
===Anleitung===&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===AVR===&lt;br /&gt;
===PC===&lt;br /&gt;
Da beim Beschreiben der Karte auf ein Dateisystem verzichtet wurde, ist das Auslesen der Karte am PC nicht komplett ohne Zusatzsoftware möglich. Unter Linux kann man eingebaute Tools verwenden (z. B. &#039;&#039;dd&#039;&#039;), für Windows-PCs habe ich eine kleine Software zum Auslesen und Leeren der Karte geschrieben. Ich nenne das Tool &amp;quot;RawRead&amp;quot;. Es handelt sich hierbei um eine Kommandozeilen-Applikation, geschrieben in C++. Das Tool hat bestimmte Erkennungsmechanismen eingebaut, die das Auslesen und Leeren lediglich bei Wechselmedien erlauben. Durch einen bestimmten Header, der sich am Beginn eines NoFS-Laufwerkes befindet, wird zudem zusätzlich gewarnt, wenn man ein Nicht-NoFS-Laufwerk leeren möchte.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version des Programms ist &#039;&#039;&#039;1.0&#039;&#039;&#039;. Momentan muss man Eingaben wie Zielverzeichnis oder Laufwerkswahl (falls mehrere Wechselmedien angeschlossen) zur Laufzeit tätigen, geplant ist für die nächste Version ein Akzeptieren von Parametern, wodurch man ein Wechselmedium dann mit einem Klick auslesen und leeren kann.&lt;br /&gt;
&lt;br /&gt;
Das &#039;&#039;NoFS&#039;&#039; besitzt eine recht lineare Struktur und ist nach folgendem Schema aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&amp;lt;Header&amp;gt;&amp;lt;Daten&amp;gt;&amp;lt;0x03&amp;gt;&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Header besteht aus der Zeichenfolge &#039;&#039;k621.de&#039;&#039; (einfallslos, ich weiß). Danach folgen fortlaufend die Daten (wobei diese kein 0x03 enthalten dürfen). Abschlusscharakter ist ein 0x03 (== ETX, &#039;&#039;&#039;E&#039;&#039;&#039;nd &#039;&#039;&#039;o&#039;&#039;&#039;f &#039;&#039;&#039;T&#039;&#039;&#039;ext). Nachfolgende Daten werden ignoriert. Um eine Karte zu leeren genügt es, in den Ersten Sektor ein &#039;&#039;k621.de&amp;lt;0x03&amp;gt;&#039;&#039; zu schreiben. Der gLogger Mini sucht immer das erste Auftreten eines 0x03 und beginnt an dessen Stelle den Schreibvorgang. Das Dateisystem (wobei es eigentlich gar keines ist) besitzt durchaus seine Schwächen, ist jedoch für die Zwecke des GPS-Loggings komplett ausreichend und mit Mikrocontrollern deutlich leichter zu Handhaben als das FAT-Dateisystem.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Auslesevorgangs ist eine Datei, die die aufgezeichneten NMEA-Kommandos beinhaltet. Diese kann man nun beispielsweise mit meiner &amp;quot;NMEA-Toolbox&amp;quot; zu Google-Maps Daten konvertieren. Das &amp;quot;RawRead&amp;quot; Tool inklusive Quellcode befindet sich im Downloads-Bereich.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [[Media:gLoggerMini_eagle.zip|Eagle Projektordner (*.zip, 53KB)]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GPS]]&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Kaktus621</name></author>
	</entry>
</feed>