NMEA

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

NMEA steht für National Marine Electronics Association, einer Vereinigung von Herstellern von Datenübertragungsgeräten und Messgeräten im Bereich Seefahrt/Wassersport die im Jahre 1957 gegründet wurde. Unter dem NMEA Standard versteht man einen im maritimen Bereich sehr vergreiteten Übertragungsstandard der die Einzelheiten der Datenübertragung vorschreibt. Es gibt mehrere dieser Standards, ursprünglich die Version 0180 von Februar 1980 mit 1200 Baud, danach Version 0182 März 1982, und schliesslich Version 0183 vom März 1983 mit 4800 Baud. Später gab es noch weitere Veränderungen 0183-1.5 Dezember 1987 und 0183-2.0 Januar 1992. Die aktuelleste Version der 0183 ist nun die 0183-2.3 vom Februar 1998. Leider beginnt die Norm sich hier in einigen Punkten von der ursprünglichen 0183 zu entfernen und es kann zu "Verständigungsproblemen" in Verbindung mit alter Hardware kommen. Die Versionen vor 0183 haben nur mehr historische Bedeutung. Neuerdings gibt es auch den NMEA-2000 Standard, der dem CAN-BUS entspricht, sich aber noch nicht durchgesetzt hat. Am verbreitesten ist immer noch NMEA 0183. Hier findet man einen NMEA2000 Protokoll Stack für die AVR Microcontroller.

Die nicht-busfähige NMEA 0183 ist aber hoffnungslos veraltet und entspricht schon lange nicht mehr dem Stand der Technik. Sie kann sich auch nicht mehr der heutigen Lage anpassen und wird eines Tages sozusagen aussterben. Folgen dieser überholten Technik sind verstopfte Multiplexer und Störungen durch fehlende Erkennung von Kollisionen oder Übertragungsfehlern. Dennoch hält sie sich hartnäckig dank ihrer weiten Verbreitung und der einfachen Technik.

Unterschieden wird zwischen "talker" und "listener".

Des weiteren wird zwischen einem asymmetrischen und einem symmetrischen Übertragungsweg unterschieden, je nachdem ob eine Masseverbindung vorhanden ist oder nicht. In englischer Sprache wird hier von differential (symmetrisch) und single-ended gesprochen.

Ein NMEA-Ausgang kann im Allgemeinen mehrere listener mit Daten versorgen, jedoch dürfen mehrere talker nicht zusammengeschaltet werden. In diesem Fall muss ein sogenannter NMEA-Multiplexer eingesetzt werden.

NMEA 0183 Datenübertragungsgeschwindigkeit mit 4800 Baud (bits/Sek.) 8 Datenbits no handshake 1 Stopbit, kein parity-bit Ruhepegel ist 0 Volt, Startbit hat +5 Volt Pegel

Hin- und wieder trifft man auch auf "high-speed" NMEA, zum Beispiel 0183-HS, dann wird meist mit 38400 Baud, manchmal jedoch auch mit 9600 Baud übertragen.

NMEA ähnelt, abgesehen von den Pegeln, RS232/V24. Ein NMEA Ausgang kann bei kurzer Kabellänge an einen seriellen (COM) Eingang eines PC angeschlossen werden. Dabei kann durch eine Diode in Sperrichtung verhindert werden, dass ein eventueller negativer Pegel den NMEA-Ausgang zerstört.

NMEA Datenübertragung findet sich fast immer bei GPS-Geräten.

Die Datenübertragung läuft in kleinen Dateneinheiten, den sogenannten "sentences", also Datensätzen. Jeder Datensatz darf maximal 80 Zeichen lang sein. Jeder sentence muss mit einem $-Zeichen (hex 0x24) beginnen und wird mit <CR><LF> (0x13, 0x10) beendet. Die ersten beiden Buchstaben nach dem $-Zeichen bezeichnen die

talker-ID, ein Kürzel für das sendende Gerät. Hier steht zum Beispiel GP für ein GPS-Gerät. Der talker-ID folgt die

sentence-ID, die aus drei Buchstaben besteht.

Danach folgen die eigentlichen Daten, die durch Kommata getrennt sind.

Für alle möglichen Zwecke sind von der NMEA bestimmte Datensätze festgelegt worden. Diese wurden und werden durch kommerzielle Anwender (z. B. Garmin) weiter erweitert. Eigene, also nicht NMEA-festgelegte Datensätze beginnen als "proprietary sentence" mit $P. Eine Aufstellung aller sentences findet sich im Internet.

NMEA2000

NMEA2000 basiert auf dem von Bosch und Intel entwickelten CAN-Bus. Die Übertragung aller Nachrichten erfolgt immer als Extended Data Frame

Bits in einem Extended CAN-Frame

ToDo: Genaue Informationen zum Aufbau des 29-bit CAN Identifiers und der Zelegung in das PDU-Format

Jeder Busteilnehmer benötigt eine Bus-ID, die ihn eindeutig identifiziert. Diese Bus-ID wird beim ersten Kontakt eines Gerätes zwischen dem neuen Endgerät und den schon am Bus vorhandenen Geräten ausgehandelt.

Wenn ein neues Gerät an einen NMEA2000-Bus angeschlossen wird, so sendet dieses Gerät zunächst die Nachricht "ISO Address Claim" (PGN:60928; 0xEE00). Damit wird versucht, eine

ToDo: Beschreiben, das die vom Endgerät gewünschte ID zunächt direkt während des Address Claim Prozesses eingefordert wird. Ist die ID schon vergeben wird an Hand der sogenannten "Name identification number" verglichen und arbitriert.

| 18EExxyy || 46 || b4 || 31 || 11 || 00 || 82 || 32 || C0


ISO Address Claim

Feld Feldname Beschreibung Bytefeld Bitfeld Datentype Datenbereich
1 ISO Identity Number Art Seriennummer 21 Bit
2 Herstellercode Fest vergebene Codes 11 Bit
3 Device Instance Lower 3 Bit
4 Device Instance Higher 5 Bit
5 Iso Function Gerätefunktion 8 Bit
6 reserviert 1 Bit
7 Device Class 7 Bit
8 System instance 4 Bit
9 Industry Group 3 Bit
10 ISO Self Configurable 1 Bit

Verwandte Bussysteme im maritimen Bereich:

  • Die von Raymarine verwendete Norm "Seatalk" ist der NMEA ähnlich und ebenfalls veraltet. Sie ist kein offener Standard, inzwischen durch reverse engineering aber ausreichend dokumentiert. Sie verwendet eine serielle 9-Bit Übertragung. Diese 9-Bit Übertragung kann in den UARTs von einigen Mikrocontrollern (8051 Familie, AVR Familie) direkt eingestellt werden. Bei normalen PC-UARTs kann hierfuer das Parity-Bit in die Datenübertragung miteinbezogen werden. Bei SeaTalk gibt es keinen Netz-Master. Alle Geräte können ohne Aufforderung auf den Bus senden. Deshalb beinhaltet das SeaTalk Protokoll eine Kollisionserkennung - die die UARTs von Microcontrollern normalerweise nicht unterstützen. Die UARTs der Microcontroller bzw. des PC können deshalb nur zum Lesen von SeaTalk Daten verwendet werden. Hier gibt es Informationen über SeaTalk, SeaTalk Anbindung an AT-Mega32, Schaltpläne, Open Source Software.
  • Furuno Navnet: entspricht Ethernet mit 10 MBit. Leider kein offener Standard.
  • Corus Navico: auch ein CAN-BUS System, das nicht offen ist.
  • Bluetooth und WLAN WiFi können hier noch genannt werden.

Web-Links