Go Down

Topic: NMEA 2000 Shield (Read 300633 times) previous topic - next topic


Timo, thank you for new information.
For me PGN 129284 is sufficient.

I have a Lowrance HDS9, and I checkt how PGN´s 129284,  129285,  130074 are working:

129284: HDS is sending this, as far as I navigate to a waypoint. A route is not necessary.

130074: is send automatically, as far as I save a new waypoint.

129285: is send automatically, as far a route is active.


Hey Timo,

do you have tested the Teensy3.x together with the SN65HVD234?

I have a couple of them and since they are not that cheap and due to the readme of the FlexCAN library the SN65HVD´s seems to be a bit more stable or at least support higher bandwidth at 3.3v ( I know that the NMEA2K library just use 500K) I would like to use them.
They also just need 3.3v and not both 5&3.3v like the MCP2562.

So is there anything against using them instead the MCP2562 in combination of teensy boards?



That is on the hw side and library does not known anything about it. So if you think it ise better, just use it.

And NMEA 2000 runs 250 kb/s NOT 500 kb/s



even if I am already afraid to ask, is there somebody so nice to explain me what that with SID - Sequencial ID is about?
I am workign on the battery monitor right now and found this for the SID in the N2kMessages.h at DC detailed status:

"Sequence ID. If your device is e.g. boat speed and heading at same time, you can set same SID for different messages to indicate that they are measured at same time."

Thank you!


The explanation for SID has been just copied, but the meaning is same. On Maretron document they write:
Code: [Select]
SID - The sequence identifier field is used to tie related PGNs together. For example, the GPS200 will transmit identical SIDs for 126992 (System Time), 128259 (Speed), 129026 (COG and SOG, Rapid Update), 129029 (GNSS Position Data), 129539 (GNSS DOPs), and 129540 (GNSS Satellites in View) to indicate that the readings are linked together (i.e., the data from each PGN was taken at the same time although they are reported at slightly different times).

Will that explain it better?

So it could be same for DC information. You can provide DC status and battery status information with same SID, if they are measured at same time. Due to transmission delay there will be small difference, when messages will be received, but for same SID receiver can then use same time for values e.g. for calculations.


I guess I got it now, thank you!

To clarify as example:

If I have now an device like GPS I could use the heading SID for a message which will show me the position on the map and could use the same SID and the value generated or measured by one sensor use at the same time in another message wich will be for example feedback for the autopilot.

If I see this right than the matter of this is to reduce the traffic on the bus or at least reduce the amount of times the values to be send needed to be generated or measured by the sensor system or in this case GPS.

So in case of the battery monitor which is for to batteries I could use several values/SID´s like the DCType for both batteries if the same generator is charging both of them.

Hopefully Right?


I did not understood your example. What you mean with "in another message wich will be for example feedback for the autopilot."? In bus system you just mostly provide messages to the bus and not to specific device. Also many PGNs messages can not be sent to specific destination. 

Also you can not use SID for reducing traffic. If your device is sending some message, it should send it in periodically with same defined period. With the complex group function it is possible to change period for specific message, but it should then be steady.

Either I did not understood the last sentence. Normally SID is incrementing value. So if you battery monitor measures 3 batteries and measures all voltages on same time and then start to send messages for each battery, you use for first period e.g. SID=1 for all 3 127508 PGNs - each will have different BatteryInstance. On next  period you set SID=2 for each message. But if you measure values just before sending each msg, you do not measure them at same time. Then you should in principle set SID=1 for first msg, SID=2 for second and SID=3 for last. Then on next period you set SID=4 for first  and so on. This is since they are not measured "at same time".


ok, than i thought completly wrong but understood it now. THX



I came now to the point to connect the MFD ( Raymarne Axiom 9RV ) to the bus of the teensy to test if I get communication to the MFD.

After I didn´t got shown anything from the extern teensy´s on the Axiom ( during the network scan nothing showed up ) I to the messagesender and the Datadisplay to test the communication on the bus. I can see all comming from the messagesender on the datadisplay, but again nothing seems to be available on the MFD.

I stuck now a bit and don´t know where to start to troubleshoot and locate the problem.

Is there any advise you have for me to get further?

Kindly regards..


- Again, do you have proper termination resistors on the bus?

- Instead of using DataDisplay, use ActisenseListener example and NMEA Reader. You should see both MessageSender messages and Axiom messages on the bus. If you do not see Axiom, have you crossed CAN L and CAN H.


Hello Timo,

termination is 100% ok. First just used the 120 ohm resistor parallel to H/L on each end one. Than after it didn´t worked I connected through an original cable and terminators.

I use the SN65HVD234 with Teensy 3.2 like shown one the picture ArduinoDue_CAN_with_SN65HVD234.jpg. To test I used the standart sketches, just added/modified to use with teensy.

The Actisence listener sketch and listening on the bus with Actisense NMEAReader wasn´t successfull. There is a lot of load during when opend the com port from the Teensy running the actisense listener sketch.

Like mentionedthe datadisplay was showing the data send from the second teensy running the messagesender sketch.

I´ll test from beginning one more time just to be sure..


I located the problem!

Even the Axiom is delivering 12V from the bus connector, I have to connect from extern 12 V to the bus wire. Now it seems to work!


Hello Timo,

I just found this document PGN NMEA Overview on nmea.org regarding the PGN´s and the temperatur PGN 130312 is deprecated.

Is that the reason why there are to PGN´s ( 130312 & 130316 ) for temperatur in the library?



Yes, but unfortunately old devices does not support 130316. So if you are making TemperatureMonitor like system for your boat, you have to check does your viewers support new PGN.


Feb 05, 2018, 10:59 am Last Edit: Feb 05, 2018, 01:42 pm by autopilotNOR
Hey Timo,

I have a question.

So first I have participate on some courses about Arduino programming and got much more used to the basics and do understand now as well the library you gave to the world! I hope that I don´t need to ask anymore a lot of stupid questions! :-)

//To 1. part. I just tested it out, looks to be working fine! The jumping around which happend with the internal reciever just disappeared and the position is more accurate now as well. I am not anymore on map at my neighbours house. So that worked perfect! It took some time until the MFD recognized the new signal but finnaly I could selet it.

So here to my my question:

I got this GPS module from Linx which is a lot better than the one I have in my MFD ( I think and hope so at least). So the Linx GPS outputs "NMEA" sentences to serial. I got so far know with the GPS it self so I know how to adjust the settings of the module like setting baud rate, wich sentences to output to serial, frequency and so on.

Now I´d like to use this device instead of the one which is onboard of the MFD. How to do that on the MFD is not a big deal. It is looking for GPS / GNSS devices on the bus.

My actual question is:

1. - already fixed (working fine)
The device outputs NMEA sentences through serial, not more detailed specified. Is that right that these sentences is the NMEA0183 protocol?

If so, can I than just simply use the NMEA0183ToNMEA2K sketch to translate all the information comming from the module to the NMEA2k bus or do I need to read every sentences and cut into the peaces to use the NMEA2000 library positioning / navigation part and forward it by this way to the 2K bus? I looked into the NMEA0183ToNMEA2K library and have seen there all the positioning information. That´s why I thought this can be the right start.

I am looking for some details if there exist any standart for the frequencies used for rapid data and longer periodly send data. What I mean is how many times per second is rapid and how ofteen is the rest of not so fast changing data to be send to the bus?

Go Up