ARDUDEC
im Aufbau
Nutzung von ARDUINO-Boards zur Auswertung der von
APRS-Transceivern und -Trackern gelieferten Positionsdaten empfangener Stationen

Version vom 17. August 2012

Stand-Alone-Decoder for "GPWPL" as well as "PKWDWPL"-Data as provided by APRS compatible KENWOOD-RADIOS ( via their data port ) and some APRS-Trackers; calculation of distances and bearings; using fix reference position data ( user storable within processor EEPROM ) or live reference data coming from attached GPS receiver; showing QTH Locator and other values; using cheap ready made ARDUINO-Hardware.
Here is automatic translation made by Google:
http://translate.google.com/translate?hl=en&sl=de&tl=en&u=http%3A%2F%2Fwww.kh-gps.de/ardudec.htm


Weitgehend unbeachtet blieben bisher die von vielen APRS-tauglichen Transceivern und APRS-Trackern an ihren Datenausgängen bereitgestellten Positionsdaten empfangener Stationen. So sind z.B. alle in Tabelle 1 genannten Geräte mit einer entsprechenden Datenschnittstelle ausgestattet, wobei diese allerdings ggf. erst noch mithilfe der Konfigurationseinstellungen ( siehe dazu jeweils das zugehörige Handbuch ) aktiviert werden muss.


Abb.1  Unter Verwendung von ARDUINO-Fertigbaugruppen aufgebauter Decoderbaustein
Anzeige von Rufzeichen, Maidenhead-Locator, Distanz und Richtungswinkel der zuletzt empfangenen
Gegenstation, sowie von "F" für Fix-Referenz- oder "G" für GPS-Referenzposition und einem Upcounter



GPWPL
PKWDWPL
Kenwood TH-D7
X

Kenwood TH-D72
X
X
Kenwood TM-D700
X

Kenwood TM-D710
X
X
Yaesu VX8-GE
X

Byonics TinyTrak4
X
X
ArgentData Opentracker+ (OT1+)
X

ArgentData Tracker2 (T2) 
X
X
Tabelle 1   APRS-Funkgereäte und -Tracker mit Datenausgang

Bei den Ausgangsdaten handelt es sich um üblicherweise mit RS232-kompatiblen Pegelwerten seriell ausgegebene ASCII-Textstrings. Dabei werden Datenformate nach NMEA benutzt. Standardmäßig handelt es sich hierbei um den Protokolltyp: "GPWPL". Neben dem Header enthalten sie allerdings lediglich die von der Gegenstation empfangenen Werte von Breitengrad, Längengrad, einem Wegpunktnamen und die CRC-Prüfsumme. Im Amateurfunkeinsatz entspricht der Wegpunktname dabei dem Rufzeichen der absendenden Station.


Beispiel für ein NMEA-Protokoll des Typs: "GPWPL"

Erweiterte Auswertmöglichkeiten ergben sich bei Verwendung der von einigen Geräten ( siehe Tabelle1 ) zusätzlich zu "GPWPL" auch noch bereitgestellten "PKWDWPL"-Protokolle. Hierbei handelt es sich um ein sog. propriertäres Format der Firma KENWOOD, welches auch noch spezielle auf die APRS-Belange abgestimmte Dateninhalte ( siehe Tabelle 2 ) einschliesst. Hinzugekommen sind dabei z.B. die Daten von Bewegungsgeschwindigkeit, und -richtung, sowie Höheangaben und nicht zuletzt auch APRS-Symbole zur Darstellung unterschiedlicher Icon's ( wie z.B.: Fahrzeug, Schiff, Haus usw. ).


Tabelle 2    Aufbau des propriertären KENWOOD-Formates: "PKWDWPL"

Beispiel für Protokoll: $PKWDWPL,180747,V,5201.75,N,00833.47,E.4.106,180808,000092,DK5ON,/>* 07

Wozu kann man diese Daten also zusammenfassend nutzen?

* Auswertung von Rufzeichen, sowie Längen- und Breitengraddaten empfangener Gegenstationen.
* Ermittlung des zugehörigen Maidenhead-Locators
* Berechnung von Distanz und Winkel zu Gegenstationen; Referenz kann dabei entweder eine vom Anwender im EEPROM-Bereich des Prozessors
   ablegbare Fix-Position oder alternativ eine von angeschlossenem GPS-Empfänger stammende aktuelle Position sein.

Funktion und Nachbau

Bei Verwendung fertig erhältlicher ARDUINO-Boards gestaltet sich ein Nachbau besonders einfach. So wurde bei meinem Musteraufbau z.B. ein ARDUINO-UNO-Board [1] mit aufgestecktem HD44780 kompatiblen 2x16Zeichen-LCD-Shield [2] eingesetzt. Die zwischen beiden Einheiten benötigten Querverbindungen werden beim Aufstecken des Shields automatisch hergestellt. Um zu einer funktionsfähigen Decodereinheit zu gelangen, sind darüberhinaus dann nur noch ganz wenige zusätzliche Bauteile erforderlich ( siehe Abb.2 ). Alternativ zum dort eingezeichneten, der Pegelwandlung dienenden Transistor kann hier natürlich auch ein Pegelwandler-IC , wie beispielsweise ein MAX232 o.ä. verwendet werden. Entsprechende Komplettbausätze gibt es incl. Platinchen schon für wenige Euros z.B. hier [5],[6]. Zum Verbinden mit der Datenbuchse der Funkgeräte sind beispielsweise Fertigkabel nach [7] geeignet.
Beschränkt man sich nicht auf Nutzung der im EEPROM-Bereich des Prozessors ablegbaren festen Referenzdaten und will stattdessen ( z.B. für den Mobileinsatz an wechselnden Standorten ) mit aktuellen GPS-Livedaten arbeiten, so ist dazu ein zusätzlicher GPS-Empänger erforderlich. Dabei kommen an dieser Stelle nur Versionen mit serieller Datenschnittstelle und Ausgabe von NMEA-Daten mit Datenraten von 9600bps oder 4800bps infrage ( z.B. Abb.4 und [12] ), was die Nutzung von USB- oder Bluetoothversionen ausschliesst. Verarbeitet werden die Ausgangsdaten des GPS-Empfängers über den als Soft-UART benutzten Prozessoreingang "PD.3"  bzw. Arduino-Pin "JP4/4". Liegen sie bereits mit TTL-Pegel vor, so können sie hier direkt angeschaltet werden. Bei Einsatz von GPS-Empfängern mit RS232-Pegelausgang kann noch einmal eine Transistoranordnung verwendet werden, so wie sie auch schon zur Anpassung der vom APRS-Funkgerät kommenden Signale benutzt wird. Selbstverständlich bieten sich hier aber stattdessen auch wieder IC-Lösungen ( MAX232 o.ä. ) an. Denkbar ist an dieser Stelle auch eine Verteilung empfangener GPS-Signale an sowohl den zugehörigen Decodereingang als auch an den entsprechenden Dateneingang des Funkgerätes. 


"H" ( open )
"L" ( grounded )
A0/JP0/PC.0
jumper to PD.2

windows select by push button
A1/JP1/PC.1
distances in Km
distances in Miles
A2/JP2/PC.1
reference position: FIX
reference position: GPS receiver
A3/JP3/PC.3
radio data rate: 9600bps
radio data rate: 4800bps
A4/JP4/PC.4
spare

A5/JP5/PC.5
normal operation mode
configuration mode
Tabelle 3   Betriebsfunktionen


Abb.2  Schaltanordnung der Decodereinheit
Brücken an JP1-JP5 dienen zur Einstellung von Betriebsfunktionen gem. Tabelle3
( korrigierte Version am 17.August 2012 )


Abb.3  Über Taster "Window Select" ( Kennzeichnung: "RIGHT" ) anwählbare Alternativdarstellung
mit Anzeige von Rufzeichen, Breiten- und Längengrad der Gegenstation und der Upcounter

Die in Verbindung mit den ARDUINO-Boards benutzten Programme werden üblicherweise unter Verwendung der Sprache "JAVA" geschrieben. Meine Software wurde dagegen mithilfe des mir mehr vertrauten Compilers für "BASCOM-AVR" erstellt. Nachdem in beiden Fällen die gleichen AVR-Prozessoren von ATMEL zum Einsatz kommen, bot sich eine Verwendung der weit verbreiteten und preisgünstig erhältlichen ARDUINO-Boards aber zumindest als Hardwareplattform an. Zur Prozessorablage des zugehörigen, die Betriebssoftware bzw. Firmware enthaltenden  HEX-Files lässt sich dabei der auf dem Board befindliche ICSP-Anschluss nutzten. Zwar sind an dieser Stelle für die Zukunft auch Bootloaderlösungen denkbar, aber vorerst habe ich den angesprochenen Weg der "In-Circuit-Programmierung" gewählt und benutze dazu einen preiswert erhältlichen Programmierstick nach [8], wobei sich auch die dazu passende Windows-Programmiersoftware von der Homepageseite dieses Herstellers herunterladen lässt.
Das angesprochene HEX-File wird hier in Kürze verfügbar sein. Daneben beabsichtige ich, in kleinen Mengen auch bereits programmierte Prozessoren auf privater Basis anzubieten. Um sie auch später auch gegen den mit dem Board gelieferten Chip austauschen zu können, ist es dann allerdings erforderlich, dass nur die mit einer DIL-Fassung für den Prozessor ausgestattete Version des ARDUINO-UNO-Boards ( gemaess Abb.5 und 6 ) verwendet wird. Bei Programmierung über den ICSP-Anschluss ist die eingesetzte Boardversion dagegen ohne Belang.


Abb.4  verwendbares modernes GPS-Empängermodul: "NAVILOCK NL-621ETTL"  

Für zukünftige Softwareversionen geplant: 
* über Schalter in Stufen wählbare Maximaldistanzen für Positionsdatenauswertungen ( z.B.:  bis zu 1, 5,  25, 75 Km bzw. Meilen )
* Anzeige von Bewegungsgeschwindigkeit, Bewegungsrichtung, Höhe und ggf. Zusatztexten ( nur bei Auswertung von PKWDWPL-Protokollen )


Hinweis auf ähnliches Projekt mit Sprachausgabe

An dieser Stelle sein auch noch auf ein über [13] aufrufbares, sehr ähnliches Projekt mit Sprachausgabe hingewiesen.

Die EEPROM-Ablage von Referenzpositionen
Eine vom Anwender gewünschte Referenzposition lässt sich dauerhaft im EEPROM-Bereich des Prozessors ablegen, wobei sie bei Bedarf aber auch jederzeit wieder überschrieben werden kann. Zur Eingabe ist das Arduino-Board über seine USB-Buchse mit einem PC zu verbinden und hier ein handelsübliches Terminalprogramm wie z.B. TeraTerm [9],[10] zu starten. Vorher ist es jedoch erforderlich, den zum Board passenden USB-Treiber installiert zu haben, wobei er im Zweifelsfall hier [11] zu finden ist. Über den Windows-Gerätemanager ist anschliessend der bei Anschluss des Arduino-Boards belegte virtuelle Com-Port zu ermitteln. Die Schnittstelle des Terminalprogramms ist daraufhin entsprechend dieses Wertes einzustellen. Zudem ist hier auch noch die verwendete Datenrate ( default: 9600bps ) auszuwählen.
Nach erfolgter Verbindung des PC's mit dem Arduino-Board ist dieses im Konfigurations-Modus in Betrieb zu nehmen. Dazu ist sein Port-Eingang "A5" auf Masse zu legen und ein Programmneustart durchzuführen. Bei aktiviertem Terminalprogramm sollte daraufhin am PC-Bildschirm der in seine Richtung gesandte und auf den Konfigurationsmodus hinweisende Starttext erscheinen.
Über die PC-Tastatur lassen sich jetzt die zur Speicherung gewünschten Referenzwerte von Breitengrad und Längengrad eingeben (*) . Dabei ist das Format Gradzahl mit ggf. mehreren Nachkommastellen zu benutzen. Liegen die Werte nur in einem anderen Format, wie z.B. "[G]GG,MM,SS" oder "[G]GG,MM.mm" vor, so sind sie entsprechend umzurechnen, wozu auch die untenstehende Anleitung Hilfestellung leisten kann. Bei Progammen wie z.B. "GOOGLE EARTH" lässt sich die Cursor-Position aber auch schon direkt im benötigten Gradformat anzeigen.
Alle Werteingaben sind mit Zeichen "#" abzuschliessen. Es ermöglicht der Betriebssoftware die spätere Enderkennung.
Zur Kontrolle werden die Eingaben anschliessend noch einmal ausgelesen und angezeigt. Nach evtl. Fehleingaben ist der Arduino-Prozessor neu zu starten und die gesamte Eingabeprozedur zu wiederholen.
Nach erfolgreichem Abschluss aller Eingaben ist die Massebrücke an Port "A5" wieder aufzutrennen und die Verbindung mit dem PC zu kappen. Ein Neustart des Decoder-Betriebsprogrammes wird jetzt wieder im normalen Betriebsmodus erfolgen.

* Sollten sich über die PC-Tastatur keine Eingaben vornehmen lassen, so kann die Ursache sein, dass am seriellen Dateneingang des Prozessors auf dem ARDUINO-Boards ( J4(1/ bzw. Port PD.0 ) parallel zum seriellen TTL-Ausgang des USB-Converters auch noch der Ausgang des RS232 zu TTL-Pegelwandlers anliegt. Das Problem tritt speziell dann auf, wenn zur Pegelwandlung nicht ( wie in Abb.2 eingezeichnet ) ein Transistor, sondern stattdessen ein IC ( z.B. MAX232 ) zur Pegelwandlung benutzt wird. In solchen Fällen ist diese Einheit für die Zeit der EEPROM-Ablage abzutrennen.


Beispiele der Umrechnung von Positionsdaten in das Gradformat ( [G]GG.ggg )

Was ist ARDUINO ?

Bei ARDUINO handelt es sich um eine aus Italien stammende, inzwischen sehr weit verbreitete Hard- und Softwareplattform für Microcontrolleranwendungen. Es kommen dabei Prozessoren der ATMEGA-AVR-Serie von Firma ATMEL zum Einsatz. Im Original erfolgt die Programmerstellung üblicherweise in der Sprache "JAVA", aber die erhältliche Hardware lässt sich auch sehr gut für Projekte verwenden, die unter Benutzung einer anderen Programmiersprache, wie z.B. "BASCOM-AVR" erstellt wurden.
Das aktuelle Basisboard ist der "ARDUINO-UNO REV.3" ( Abb.5 und 6 ). Sein Vorgänger war das ebenfalls noch verwendbare, inzwischen aber schon legendäre "DUEMILLANOVE"-Board ( italienisch für "2009" ). Darüber hinaus gibt es auch erweitere und abgespeckte Boardversionen, wobei diese für unsere Anwendung aber weniger oder garnicht geeignet sind.



Abb.5 und Abb.6 Board "ARDUINO-UNO" ( DIL-Version ) und "Proto Universal Shield" ( zur Grossdarstellung anklicken )

NEU:  Zum Thema:  "BASCOM unter ARDUINO" siehe auch meine neue Seite : http://www.kh-gps.de/bascom_arduino.htm  [17]

Einfache Alternativlösung ersetzt TNC:  SIMPLER-Decoder von Mike Berg, N0QBH

Wer kein WPL- bzw. PKWDWPL-Daten lieferndes Funkgerät oder einen geeigneten APRS-Tracker ( siehe Tabelle 1 ) besitzt und dennoch den ARDUDEC-Decoder betreiben möchte, der kann stattdessen auch den einfachen SIMPLER-Baustein nach N0QBH verwenden. Er verarbeitet die bei Empfang von APRS-Stationen am Hörerausgang fast aller geeigneten Funkempfänger verfügbaren AFSK-Tonsignale. Zum Aufbau ist lediglich ein handelsüblicher PIC-Prozessorchip mit etwas Peripherie erforderlich. Software für den SIMPLER-Decoder gibt es für die Prozessortypen "PIC16F627" und "PIC16F628" in jeweils einer Version mit Ausgangsdaten im APRS- oder im WPL-Format. In Verbindung mit dem ARDUDEC sind die auf  WPL-Datenausgabe eingerichteten Versionen "simpler_trk7.hex" ( PIC16F627 ) oder "simpler_trk8.hex ( PIC16F628 ) zu verwenden. Verfügbar sind sie über Mike's Internetseite [16]. 
Zum Aufbau ist im einfachsten Fall ein ARDUINO-Proto-PCB ( Abb.7 ) geeignet. Dabei kann das an Pin 8 des PIC-Prozessors mit einer Datenrate von 4800bps anliegende TTL-Ausgangssignal direkt dem seriellen UART-Eingang "D0" des ARDUINO -Boards zugeführt werden. Gemaess Tabelle 3 ist dabei auch noch eine Masseverbindung an ARDUINO-Port "A3" bzw. "JP3" herzustellen und dadurch eine serielle Eingangsdatenrate von 4800bps anzuwählen.  
Mehr zum SIMPLER-Projekt findet man auch auf meiner Seite [15], wobei die WPL-Versionen seinerzeit allerdings nicht speziell erwähnt wurden


Abb.7   WPL-Decoder nach N0QBH am ARDUINO-Board

Linkliste

[1] http://www.komputer.de/zen/index.php?main_page=index&cPath=21
[2] http://www.komputer.de/zen/index.php?main_page=product_info&cPath=32&products_id=170
[3] http://www.kh-gps.de/stardec3.htm
[4] http://www.watterott.com/de/Arduino?x17283=10944eced33fc473d69dc5c88ab737ac
[5] http://www.pollin.de/shop/dt/MzY5OTgxOTk-/Bausaetze_Module/Bausaetze/RS232_TTL_Wandler_Bausatz.html
[6] http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=6149&flv=1&bereich=&marke=
[7] http://www.reichelt.de/Klinkenstecker/NFKE-SW-25/3/index.html?;ACTION=3;LA=446;ARTICLE=109575;GROUPID=5170;artnr=NFKE+SW+25;
SID=10TzPrt38AAAIAAAvYHjge08347ef8944a04234f6ec56c70729c1

[
8] http://shop.myavr.de/index.php?sp=article.sp.php&artID=200006
[9] http://www.heise.de/download/teraterm-pro.html
[10] http://hp.vector.co.jp/authors/VA002416/teraterm.html
[11] http://www.arduino.cc/en/Main/Software
[12] http://www.ddcom24.de/shop/artikel_artikel_21958_name_GPS-Engine-Module-NL-621ETTL-Navilock-industry.html
[13] http://www.kh-gps.de/ardu_somo.htm
[14] http://www.kh-gps.de/wpl2kiss.htm
[15] http://www.kh-gps.de/n0qbh.htm
[16] http://www.ringolake.com/pic_proj/zcd/zcdmodem.html
[17] http://www.kh-gps.de/bascom_arduino.htm

E-Mail contact via: