NMEA0183 Datenaustausch mit Garmin-Geräten

Vorab ein paar wichtige Hinweise die sie unbedingt beachten sollten.

Abb.: Garmin GPSmap 526 (Garmin)

Ältere Garmin-Geräte der GPSmap Reihe haben je nach Modell ein bis zwei Schnittstellen für NMEA0183, um einen Datenaustausch mit anderen Geräten zu ermöglichen. In dem Artikel wird gezeigt, wie man ein Seriell/USB-Adapter in Verbindung mit einer Anpassschaltung an einem Raspberry Pi nutzen kann, um Daten mit einem Gramin-Gerät austauschen zu können.

Beispielhaft sind im nachfolgenden Bild die Schnittstellensignale für Geräte der Serie GPSmap 400/500 gezeigt.

Abb.: Anschlusskabel GPSmap 400/500 Serie (Garmin)

Die verbauten Schnittstellen entsprechen aber nicht dem RS422 Standard, so dass die Signale von Geräten anderer Hersteller nicht verarbeitet werden können. Die Schnittstellen basieren auf 5V-TTL-Signalen, die dazu noch invertiert sind. Damit kann natürlich keine Kommunikation mit üblichen Schnittstellen anderer Hersteller funktionieren. Durch Reengineering der Schnittstelle hat sich herausgestellt, dass die Schnittstellen folgende technische Spezifikation besitzen:

  • Kommunikationsart: Seriell, 8N1, RS232-ähnlich
  • Signalpegel: 5V TTL, invertiert
  • Uniplolare Datenübertragung
  • Bezugspotenzial: GND
  • Duplexbetrieb (senden und empfangen gleichzeitig)
  • Speed: 4800 Bd NMEA Standard (über NMEA High Speed auf 38400Bd umstellbar, wenn AIS-Signale verarbeitet werden sollen)

Daraus ergibt sich die Notwendigkeit die Signale zu invertieren. Das kann man mit einem einfachen Logikbaustein 74HC04 machen. Dieser Chip hat 6 Inverter, von denen wir zwei benötigen. Einen für das RX-Signal (Empfang) und einen für das TX-Signals (senden). Das war es dann auch schon.

Abb.: Pinbelegung und Funktionsbild 74HC04

USB-Seriell-Wandler für die Anbindung an den Raspberry Pi

Oft besteht der Wunsch einen Datenaustausch zwischen dem Garmin-Gerät und einem Raspberry Pi mit AVnav oder OpenPlotter zu ermöglichen. Dazu bieten sich einfache USB-Seriell-Wandler an, die man dafür nutzen kann. Nachfolgend ist die Beschaltung zu sehen.

Abb.: Schaltplan USB-Seriell-Wandler

Der USB-Seriell-Wandler wird als erstes auf 5V TTL Signale eingestellt. Dazu gibt es einen kleinen Jumper auf der rechten Seite in der Nähe der Stiftleiste. Die Funktion der Schaltung ist recht einfach. Die Versorgungsspannung für den 74HC04 erfolgt über die USB-Schnittstelle vom PC. Die Spannung wird dazu an die entsprechenden Pins 7 (GND) und 14 (+5V) angeschlossen. Das Sende-Signal TX Port1 vom Garmin kommt an Pin 13 des 74HC04 an und wird an Pin 12 invertiert wieder ausgegeben. Das Signalk kommt an den RX-Eingang des USB-Seriell-Wandler. In umgekehrter Form gilt das auch für die TX-Signale des USB-Seriell-Wandlers. Das TX-Ausgangssignal geht an Pin1 des 74HC04 und kommt invertiert an Pin2 heraus und wird an die Kontaktleiste geführt. Die Eingänge aller nicht benutzten Inverter werden auf GND gelegt, damit sie nicht undefinierte Signale annehmen können. Ein kleiner 100nF Kondensator dient zum Schutz der Versorgungsspannung des 74HC04.

Am USB-Seriell-Wandler kann ein USB-Kabel mit einem nicht mehr so üblichen Mini USB Stecker verwendet werden. Auf der Seite des Raspberry Pi muss die Schnittstellengeschwindigkeit auf 4800 Bd eingestellt werden. Im Garmin Gerät wird die Schnittstelle auf NMEA Standard gestellt. Bei Verwendung von NMEA High Speed für AIS wird eine höhere Geschwindigkeit mit 38400 Bd benötigt.

Achtung! Bei den niedrigen Geschwindigkeiten mit 4800 Bd muss man darauf achten, nicht zu viele Daten in zu kurzer Zeit zu senden, denn die Schnittstellengeschwindigkeit gibt das nicht in allen Fällen her. Ein Zeichen wird mit ca. 10 Bit übertragen. Mit 4800 Bd kann man also maximal 480 Zeichen pro Sekunde übertragen. Die sind recht schnell zusammen bei einigen längeren GPS-Telegrammenm, wenn noch einige andere Daten dazu kommen sollten.

Zum Empfang der Daten wird unter AVnav oder OpenPlotter ein NMEA-Datenkanal über die USB-Schnittstelle (/dev/ttyUSBx) aufgemacht. Danach könne die Daten dann benutzt werden.