Einfacher GPS-Decoder auf Arduino-Basis
7. April 2016

Mit der Decodierung und Displaydarstellung von GPS-Navigationsdaten, so wie sie z.B. von kleinen Empfangsmoduln bereitgestellt werden, hatte ich mich auch früher schon mehrfach [1],[2] beschäftigt. Nachdem einige Jahre inzwischen vergangen sind und sich durch mittlerweile neu herausgekommene Bauteile auch weitere interessante Möglichkeiten ergeben haben, lag es nahe, sich mit diesem Thema erneut zu beschäftigen.
Bestandteil einer kompletten Decodereinheit sind neben dem eigentlichen GPS-Empfangsmodul eine Mikrocontrollereinheit zur Signalaufbereitung und ein Display zur Datenausgabe ( Abb.1 ).


Abb.1  Gesamtansicht einer GPS-Decodereinheit ( Musteraufbau )

Geeignete GPS-Empfängerbausteine werden von verschiedensten Firmen angeboten und können preiswert z.B. auch über die bekannten Auktionsplatformen bezogen werden. Üblicherweise basieren sie auf der Verwendung von Chip-Bausätzen nur ganz weniger Hersteller, so dass sich ihre technischen Parameter in der Regel auch nur wenig voneinander unterscheiden. Somit kann man an dieser Stelle durchaus auch zu preiswerten Produkten greifen, wobei man allerdings darauf achten sollte, dass sie dem aktuellen technologischen Stand entsprechen. Typische Betriebsparameter sind dabei Versorgungsspannungen im Bereich von etwa 3-5V und einem Strombedarf von ca. 25mA.
In der Regel erfolgt der Empfang von GPS-Navigationssatelliten über kleine integrierte Patchantennen. Nach Weiterverarbeitung der Signale in den GPS-Empfängerbausteinen erfolgt die   Bereitstellung der Ausgangsdaten üblicherweise
im sog. NMEA-Protokollformat über einen seriellen Datenausgang mit TTL-Pegel. Die einzelnen Navigationsdaten erscheinen dabei als durch Kommata getrennte Folgen von ASCII-Zeichen mit Abschluss durch eine Prüfsumme. Besonders zu beachten sind an dieser Stelle die Protokolltypen "RMC" und "GGA", nachdem zu ihrem Datenumfang u.a. auch geographische Positionsdaten ( Werte vom jeweiligen Breiten- und Längengraden ) gehören. Während RMC-Protokolle dabei zusätzlich auch noch Daten von Bewegungsgeschwindigkeit und -richtung enthalten, zeichnet sich "GGA" besonders auch durch die hierbei bereitgestellten Höhendaten aus. Standard-Datenrate ist jeweils 9600bps.
Alle Moduln besitzen darüberhinaus auch noch einen seriellen Dateneingang. Bei Bedarf lassen sich hierüber Änderungen der Konfigurationseinstellungen vornehmen. In den meisten Fällen dürfte es allerdings ausreichend sein, sich mit den im Lieferzustand ( defaultmäßig ) bereitgestellten Einstellungen zu begnügen. Zur Anschaltung von GPS-Moduln werden dann lediglich drei Verbindungsleitungen ( Masse, Versorgungsspannung und für den Moduln ausgehenden Daten ) benötigt.
Als Mikrocontrollerbaustein habe ich die ARDUINO "Pro Mini's" in der 3.3V-Version verwendet. Sie nutzen den gleichen Prozesssorbaustein ( ATMEL 328P ), wie wir ihn auch schon von den sehr weit verbreiteten Typen "UNO" und "NANO" kennen.  Mehr zu den "Pro Minis" siehe auch weiter unten im Abschnitt "Programmierung".
Aus fernöstlichen Quellen gibt es diese Bausteine schon für wenige Euros. Das Gleiche gilt auch für die 0.96"-OLED-Displays, so wie sie von mir für die vorliegende Anwendung verwendet wurden.  Besonders einfach einsetzbar sind sie in der über nur vier Pins anschliessbaren Version mit I2C-Schnittstelle und Treiber "SSD1306". Ihr Versorgungsspannungsbereich beträgt 3-5V.
Unter Verwendung einer frei verfügbaren Library erlauben sie eine m.E. sehr ansprechende Zeichendarstellung. Die verwendeten Displayvarianten zeichnen sich ausserdem noch dadurch aus, dass sich in ihnen oberen Bereich eine gelbe und darunter eine hellblaue Zeichendarstellung ergibt, wobei diese Festlegung m.W. vom Anwender nicht verändert werden kann.



Abb.2  GPS-Decodereinheit  Schaltbild  ( Anklicken für Grossdarstellung )

Abb.2 zeigt das Schaltbild der realisierten Decodereinheit. Ihr Gesamtestrombedarf  liegt bei knapp 50mA. Dieser Wert setzt sich zusammen aus etwa 15mA für den ARDUINO-Baustein, 8mA für das OLED-Display und 25mA für das GPS-Modul.
Die vom GPS-Baustein mit TTL-Pegelwerten bereitgestellten NMEA-Datenprotokolle gelangen an den seriellen Eingang "RXI" des Boards ARDUINO "Pro Mini". Dabei muss die Brücke "JP1" für die Zeit des Hochladens von Ausführungsprogrammen allerdings jeweils geöffnet sein.
Die Funktionen der Schalter "S1" bis "S4" und des Tasters "Ta1" sind dem Schaltbild zu entnehmen. Ansonsten sind mit der gewählten Anordnung wenige Besonderheiten verbunden. Zu erwähnen ist aber dennoch die Nutzung des Analogeingangs "#A7". Hier wird die mithilfe einer 1:1-Widerstandskombination heruntergeteilte Gesamtversorgungsspannung zugeführt. Nach Betätigung der Taste "Ta1" oder des Schalters "S1" ist hierüber eine Verarbeitung und Anzeige der Spannungswerte angeschlossener Versorgungsquellen möglich. Nachdem der "Pro Mini" an seinem RAW-Eingang grundsätzlich auch Spannungswerte bis 12V zulässt, die gewählte Anordnung aber nur für Versorgungsspannungen bis etwa 6.6V geeignet ist, müsste in Fällen einer gewünschten Versorgung mit höheren  Spannungswerten sowohl der Widerstandsteiler, als auch das Ausführungsprogramm entsprechend geändert werden.

                
Abb.3a-d

Die Abb.3a-3d zeigen die unterschiedlichen Betriebszustände. Nach dem Einschalten und einer kurzen Begrüssungsmessage erscheint eine Anzeige nach Abb.3a. Schon ein minimaler GPS-Satellitenempfang  bewirkt dabei eine Zeitdarstellung. Werden gültige GPS-Daten empfangen ( GPS-FIX ), so wechselt die Anzeige selbständig in eine Darstellung entsprechend Abb.3b ( "S2" offen ) bzw. Abb.3c ( "S2" geschlossen ). Durch Betätigung der "Taste "Ta1" oder des Schalters "S1" kann danach auch auf eine Anzeige gem. Abb.3d umgeschaltet werden. Der Statuswert "1" signalisiert dabei gültigen GPS-Datenempfang und anstelle der Uhrzeit erfolgt eine Anzeige der Versorgungsspannung.
Die Schalter "S3" und "S4" ermöglichen eine Zeitanpassung an mitteleuropäische Verhältnisse. Gegenüber der Weltzeit "GMT" bewirken "S3" eine Zeitverschiebung um eine ( MEZ ) und "S4" eine solche um zwei Stunden ( MESZ ).

Programmierung von Boards des Typs "Pro Mini"

Der von mir favorisierte Arduino-Baustein ist der schon erwähnte kleine "Pro Mini", den es in einer 3,3V und einer 5V-Version gibt. Da hierbei der gleiche Prozessor  ( ATMEGA328P ) zum Einsatz kommt, so wie wir ihn z.B. auch von den Boards "UNO" und "NANO" kennen, gibt es zwischen ihnen hinsichtlich lauffähiger Software auch nur wenige Unterschiede. Wichtig ist allerdings zu wissen, dass die 3.3V-Versionen der "Pro Min's" im Gegensatz zur ansonsten bei den meisten Boards einheitlich benutzten Taktfrequenz von 16 MHz mit nur einem 8-MHz-Takt arbeiten. Das hat zur Folge,  dass im entsprechenden Menü der noch zu erwähnenden ARDUINO-IDE auch beide Versionen separat aufgeführt sind und hier eine entsprechende Anwahl zu erfolgen hat.
Das Hochladen von ARDUINO-Programmen ( auch "Sketches" genannt ) in Richtung der entsprechenden Boards erfolgt in der Regel durch Nutzung des ( kostenlos aus dem INTERNET herunterladbaren ) ARDUINO-Betriebsprogrammes, der sog. "IDE". PC und Prozessorboard werden dazu über ein USB-Kabel miteinander verbunden. Nun besitzen die"Pro Mini's" aber keine eigene USB-Schnittstelle und sind zum Hochladens von Programmen somit auf Fremdhilfe angewiesen. Was im ersten Moment als Nachteil erscheint, kann sich in der Praxis aber auch als  Vorteil erweisen. Der Grund dafür ist, dass wir auf den entsprechenden anderen ARDUINO Boards zunehmend auch "gefakte" USB-Chips aus fernöstlicher Produktion finden und diese ggf. nur nach erheblichen Klimmzügen oder überhaupt nicht zur Zusammenarbeit mit ihrer Gegenseite zu bewegen sind. Probleme mit Treiberprogrammen sind dabei an der Tagesordnung, so dass es bei Boards mit eigener  USB-Schnittstelle sogar dazu führen kann, dass diese völlig unbrauchbar werden. Nachdem wir zur Programmierung unserer "Pro Mini's" aber immer einen gleichen separaten USB-Adapter mit bekannter einwandfreier Funktion verwenden können,  gehen wir einer möglichen USB-Chip-Problematik damit weitgehend aus dem Wege.  


Abb.4   Zusammenschaltung von ARDUINO"Pro Mini" und ELV "UM2102" zur Programmierung
( zur Grossdarstellung anklicken )

Obwohl an dieser Stelle natürlich auch andere Adaptertypen einsetzbar sind, bevorzuge ich als externen USB-Adapter den für weniger als 6 Euro erhältlichen "UM2102" von ELV [5]. Dabei sind von der Seite dieser Firma auch die benötigten Treiber ( incl. Versionen bis zu Windows 10 ) verfügbar. Abb.4 zeigt nun die Zusammenschaltung des USB-Adapters mit den "Pro Mini's", so wie sie zum  Hochladen von Programmen vorzunehmen ist. Dabei ist auch die Umschaltmöglichkeit für die beiden unterschiedlichen Betriebsspannungsversionen erkennbar. 
Besonders erwähnt sei dabei auch noch die Verbindung zwischen dem DTR-Ausgang des USB-Adapters und dem mit "GRN" bezeichneten Pin des Arduino-Boards. Automatisch wird hierüber bei jedem Programmstart ein notwendiger Prozessor-Reset ausgelöst.
An dieser Stelle sei auch noch einmal auf die Notwendigkeit zum Auftrennen der Brücke "JP1" ( siehe Abb.2 ) während der Hochladevorgänge hingewiesen.

Nachbau


Hier kann das zugehörige ARDUINO-Sketch heruntergeladen werden


Linkliste

[1] http://www.kh-gps.de/gpsdec1.htm
[2] http://www.kh-gps.de/ardu_gps.htm
[3] http://blog.simtronyx.de/kurz-vorgestellt-096-zoll-oled-display-i²c-mit-128x64-pixel/
[4] http://blog.simtronyx.de/ein-096-zoll-oled-display-i²c-mit-128x64-pixel-und-ein-arduino/
[5] http://www.elv.de/mini-usb-modul-um2102-komplettbausatz.html
[6] http://eckstein-shop.de/navi.php?suchausdruck=pro+mini+3v&JTLSHOP=lsell5mq2jngjoubqjnejntkm6
[7] http://eckstein-shop.de/Ublox-NEO-6M-GPS-Modul-Flight-Controller-Flugregler-fuer-Arduino

E-Mail contact via: