RS-232: Dreidrahtverbindung mit Garmin Geko 201

Aus ConeleK-Wiki
Wechseln zu: Navigation, Suche

Diese Seite beschreibt, wie man unter Linux mit Hilfe des Programms gpsbabel und über eine Dreidrahtverbindung (3-wire connection) Daten aus dem GPS-Empfänger Garmin Geko 201 ausliest.

Inhaltsverzeichnis

Aufgabenstellung

Inhalt

Motivation für dieses Tutorial war folgende Situation: Der Geko 201 besitzt einen Anschluss für einen flachen NMEA-Stecker, um über die serielle Schnittstelle mit einem PC zu kommunizieren. Man kann den Geko unter Linux recht einfach mit dem Kommandozeilenprogramm gpsbabel auslesen. Dabei trat die folgende Fehlermeldung auf:

$ gpsbabel -i garmin -f /dev/ttyUSB0 -o gpx -F
[ERROR] GPS_Packet_Read: Timeout.  No data received.
GARMIN:Can't init /dev/ttyUSB0

(Das $ am Anfang steht für die Eingabezeile. Mein PC besitzt keine serielle Schnittstelle und daher wurde ein USB auf seriell-Adapter genutzt, der unter Linux die Kennung /dev/ttyUSBx erhält.)

Dieses Problem kann vielfache Ursachen haben. In diesem Artikel gehen wir darauf ein, dass das GPS-Gerät einen sogenannten Hardware-Handshake (RTS/CTS) erwartet, den der PC aber nicht anbietet. Grob gesagt geht es darum, dass vor einem Sendevorgang seitens des GPS ein "OK" von Seiten des PCs erwartet wird, was dieser aber nicht liefert.

Wir zeigen nun, wie man dieses Problem mithilfe der CEK-Interfacemodule [11] für den Anschluss von D-Sub 9-Kabeln (Stecker/Buchse) [12] mit wenig Aufwand löst.

Lösung

Inhalt
Übersicht des Versuchsaufbaus mit CEK-Modul DSUB9 Buchse [1] und CEK-Modul DSUB9 Stecker [2] auf Steckplatine GL10 [3] und GL5D [4], Verbindungen mit Drahtbrücken [5]

Wie bereits erwähnt, liegt der Fehler möglicherweise an einer nicht ankommenden Sendeerlaubnis des PCs an das GPS-Endgerät. Genauer gesagt handelt es sich bei der Verbindung von GPS und PC um eine Dreidrahtverbindung: Es existieren nur eine Sende-(Rx-) und eine Empfangs-(Tx-)Leitung sowie die Masse (GND). Die Lösung besteht in diesem Fall darin, dass wir die nötigen Zusagen dauerhaft auf "OK" schalten: Wir brücken daher:

  1. Data Terminal Ready-(DTR-)Leitung mit Data Set Ready-(DSR-)Leitung und Carrier Detect-(CD-)Leitung (Pins 1, 4 und 6) und
  2. Request to Send-(RTS-)Leitung mit der Clear to Send-(CTS-)Leitung (Pins 7 und 8)

Dazu führen wir einen sogenannten Break Out durch - wir verschaffen uns Zugriff auf die einzelnen Leitungen des seriellen Kabels.


Aufbau

Inhalt
Detailierter Versuchsaufbau mit CEK-Modul DSUB9 Buchse [6] und CEK-Modul DSUB9 Stecker [7] auf Steckplatine GL10 [8] und GL5D [9], Verbindungen mit Drahtbrücken [10]

An dieser Stelle kommen je ein

  • DSUB9 Buchse CEK Prototypen Interface Modul [13]
  • DSUB9 Stecker CEK Prototypen Interface Modul [14]

zum Einsatz.

Das Folgende beschreibt den Aufbau, wie er auch auf nebenstehendem Bild zu sehen ist:

  1. Zunächst werden beide Module an den Rand einer Steckplatine [15] montiert.
  2. Anschließend verbindet man die Pins 1:1 miteinander, das heißt man verbindet Pin 1 der Buchse mit Pin 1 des Steckers, Pin 2 der Buchse mit Pin 2 des Steckers, usw. (Achtung: Beachten Sie, dass die Reihenfolge der Anschlüsse auf der Rückseite der Module nicht unbedingt mit der Reihenfolge der Anschlüsse des RS-232-Steckers übereinstimmen!)
  3. Nun werden folgende Pin-Paare gebrückt:
    • Pin 1 und 4
    • Pin 4 und 6
    • Pin 7 und 8

Nun sind wir bereits fertig und können unseren Aufbau testen.



Verbindung mittels Loopback überprüfen

Inhalt

Verbinden Sie den PC mit der D-Sub 9-Buchse. Wir werden jetzt eine sogenannte Rückkopplung (Loopback) durchführen, was der noble Ausdruck dafür ist, dass wir genau das empfangen, was wir auch senden. Für diesen einfachen Test reichen die Bordmittel von Linux vollständig aus. Beim D-Sub 9-Kabel wird auf Leitung 3 gesendet (Tx) und auf Leitung 2 empfangen (Rx). Wir überbrücken daher Pin 2 und 3 auf der Seite des Stecker-Moduls. Damit können wir auch gleich testen, ob wir auf der Steckplatine alles richtig verkabelt haben.

Ich gehe hier davon aus, dass Sie einen USB-auf-RS232-Adapter im Einsatz haben. Sobald der Adapter im USB-Port steckt, müsste das Gerät /dev/ttyUSB0 in Ihrem Dateisystem verfügbar sein. Falls Sie im Besitz einer nativen seriellen Schnittstelle sind, dann müssen Sie fortan /dev/ttyUSB0 durch den Namen ihrer Schnittstelle ersetzen, welcher meist von der Form /dev/ttySx ist. Öffnen Sie nun zwei Konsolenfenster: In einem werden wir Daten einspeisen und in dem anderen werden wir diese Daten aus der Schnittstelle auslesen.

Im ersten Konsolenfenster geben Sie folgenden Befehl ein, der die serielle Schnittstelle ausliest:

$ cat /dev/ttyUSB0

Zunächst passiert nichts. Danach wechseln Sie zur zweiten Konsole und füttern die Schnittestelle mit einem beliebigen String:

$ echo "loopback test" > /dev/ttyUSB0

Wechseln Sie nun wieder zur ersten Konsole. Es sollte nun eine weitere Zeile erschienen sein:

$ cat /dev/ttyUSB0
loopback test

Damit wissen wir, dass unsere Schaltung korrekt aufgebaut ist.

Auslesen der aktuellen Position

Inhalt

Falls Sie den Loopback-Test durchgeführt haben, dann entfernen Sie jetzt wieder die Brücke zwischen Pin 2 und Pin 3.

Wir werden in diesem und den folgenden beiden Abschnitten verschiedene Informationen aus dem GPS-Endgerät auslesen. Beginnen wollen wir damit, dass wir laufend die aktuelle Position des Geko ermitteln wollen. Falls Sie innerhalb eines Gebäudes sind, ist dies kein Problem - der Geko wird trotzdem Informationen senden.

Einstellungen am GPS-Gerät

Aktivieren Sie die Ausgabe im NMEA-Format wie folgt:

  1. Menü->Setup->Interface
  2. Aus der Dropdown-Liste NMEA auswählen.
  3. Es erscheint ein Feld, welches die Baud-Rate angibt (bei mir: 4800 Baud).
  4. Verlassen Sie das Menü über die Page-Taste.

Einstellungen am PC

Der Geko 201 gibt eine feste Kommunikationsgeschwindigkeit mit dem PC vor (4800 Baud). Mit dem Kommandozeilenprogramm stty, welches zumindest unter Ubuntu zum Lieferumfang gehört, kann man diese Geschwindigkeit (Baud-Rate) einstellen:

stty -F /dev/ttyUSB0 4800

Eventuell müssen Sie den Befehl als root ausführen. Kontrollieren Sie die Einstellung mittels

stty -F /dev/ttyUSB0 -a

Wenn Sie nun das Adapterkabel des GPS an das D-Sub 9-Stecker-Frontmodul anschließen und folgenden Befehl aufrufen:

cat /dev/ttyUSB0,

dann müssten auf ihrem Bildschirm fortwährend neue Zeilen von der folgenden Form erscheinen:

...
$GPGLL,,,,,,V,N*64
$GPBOD,,T,,M,,*47
$PGRME,,M,,M,,M*00
$PGRMZ,,f,1*29
...

Sehen Sie hingegen nur ein wirres Durcheinander kryptischer Zeichen, dann ist die Baudrate falsch eingestellt! Sie können diese Informationen direkt abspeichern und mit einem Programm, welches das NMEA-Format lesen kann, abspeichern:

cat /dev/ttyUSB0 > gps_test.nmea

Auslesen von Wegpunkten

Inhalt

Falls Sie den Loopback-Test durchgeführt haben, dann entfernen Sie jetzt wieder die Brücke zwischen Pin 2 und Pin 3.

Mit dem sogenannten Garmin-Protokoll können Sie aus Ihrem Gerät die gespeicherten Wegpunkte und den Tracklog abfragen. Dazu benötigen Sie zusätzlich zu den bisher erwähnten Programmen das Tool gpsbabel, welches im Paketmanagement Ihrer Distribution zu finden ist.

Ubuntu:

sudo apt-get install gpsbabel

Einstellungen am GPS-Gerät

Aktivieren Sie die Ausgabe im Garmin-Format wie folgt:

  1. Menü->Setup->Interface
  2. Aus der Dropdown-Liste Garmin auswählen.
  3. Verlassen Sie das Menü über die Page-Taste.

Einstellungen am PC

Wie beim vorigen Test setzen wir zunächst die Baud-Rate, die beim Garmin-Protokoll 9600 Baud beträgt:

stty -F /dev/ttyUSB0 9600

und überprüfen dies anschließend

stty -F /dev/ttyUSB0 -a

Die Wegpunkte können Sie in eine Datei auslesen oder direkt auf die Standardausgabe (Konsole) ausgeben lassen:

gpsbabel -i garmin -f /dev/ttyUSB0 -o gpx -F waypoint_test.gpx
gpsbabel -i garmin -f /dev/ttyUSB0 -o gpx -F - # standard output

Die Option "-o" gibt an, welches Ausgabeformat gewählt wird. Das gpx-Format ist XML-basiert und weit verbreitet, aber Sie können natürlich auch das nun bekannte NMEA-Format nutzen (-o nmea).

Auslesen von Tracks

Inhalt

Zum Auslesen Ihrer gespeicherten Tracks verfahren Sie genauso wie zuvor, außer dass der Aufruf an gpsbabel wie folgt aussieht:

gpsbabel -t -i garmin -f /dev/ttyUSB0 -o gpx -F track_test.gpx

Der Schalter "-t" weist weist den Geko an, dass er die Trackdaten statt der Wegpunkte liefern soll.

Siehe auch

Bezugsquelle

  • CEK-Prototypen-Module [16]
    • CEK Interface-Module [17]
      • D-Sub 9-Buchsenmodul [18]
      • D-Sub 9-Steckermodul [19]
  • Drahtbrücken [20]
    • beliebt: Drahtbrückenset KS350 [21]
  • Steckplatinen der Profi-Line GL [22]
    • Steckplatine GL10 [23]
    • Adapter GL5D [24]
  • Kabel-Leitungen-Drähte [25]
    • DSUB9 Serielles Verlängerungskabel / RS232 Kabel Buchse - Buchse 1:1 9polig [26]
    • DSUB9 Serielles Verlängerungskabel / RS232 Kabel Buchse - Stecker 1:1 9polig [27]

Weblinks

Software:

  • Projektseite des Programms gpsbabel [28]
  • gebabbel: Grafische Oberfläche (GUI) für gpsbabel [29]
  • NMEA 0183-Format zur Kommunikation mit GPS-Endgeräten (Wikipedia) [30]

Hardware:

  • RS-232 (Wikipedia) [31]
  • Herstellerseite des Geko 201 [32]
  • Ein Garmin eTrex-/Geko-Datenkabel selbstgebaut [33]
  • Eigenbau Stecker/Datenkabel Garmin eTrex GPS [34]
  • Stecker für Garmin GPS Kowoma [35]
  • Larrys Plugs [36]
  • Bezugsquelle für Garmin Kabel in Deutschland [37]