Skip to the content
PCBKitNew board
2 layers89.2 × 38.3 mmCanGNSS, the printed circuit board in 3D

NMEA2000 GNSS device using Neo M8N receiver and attiny3224 MCU.

Size
89.2 × 38.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
22
Nets
34
Pads
88
Tracks, vias
179, 2
Pours
4
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
17 Jun 2023
Updated
12 Jul 2026

Overview

CanGNSS is an open-source printed circuit board by ieb, from the ieb/CanGNSS repository on GitHub. It is a 2-layer board of 89.2 × 38.3 mm with 22 parts on 34 nets, routed with 179 tracks and 2 vias.

It is built around the ATTINY3224-SSU, MCP2515-I and TJA1050. Its parts include 9 capacitors, 5 ICs, 2 resistors, 2 diodes and 2 connectors. It belongs with the radio and wireless boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

3

README

README.md

NMEA2000 GNSS Receiver

A NMEA2000 device to provide rapid position and COG SOG update as well as other GNSS information including satelite data.

PGN messages and rates.

  • 129025L Position Rapid update 5Hz
  • 129026L COG/SOG Rapid Update 2.5Hz
  • 129029L Position data 1Hz
  • 126992L System Time, 1Hz
  • 129539L GNSS DOPs 1Hz
  • 129540L GNSS Satellites in View 0.5Hz
  • 127258L Magnetic Variation 1Hz

Magnetic variation is calculated every 60s from WMN2020 World model coefficients.

Hardware

  • Attiny3224 MCU
  • UBlox M8N module pre configured at 19200 Baud with UBX messages.
  • MCP 2515 CAN driver with TJ1050 Transceiver

Code

Starts up, establishes CAN connectivity then reads UBX messages as they are produced and transfers them directly onto the NMEA200 bus. There is a monitoring UART that runs at 115200 which can be used to see log messages and reboot. Press h to get a menu. The WNM2020 model takes 63ms to calculate which is long enough for a standard 64 byte UART buffer to overflow. This code requires a patched megaTinyCode code base with a 256 byte UART buffer.

Pins

text
                            ANT
  --------------------------------
  |          A B C D E           |
  | F                            |
  | G                            |
  | H                            |
  | I                            |
  |                     j k l m  |
  --------------------------------
  • A +5v

  • B 0v

  • C UDPI

  • D RX Console

  • E TX Console

  • F 12V - CAN

  • G 0V

  • H CAN-L

  • I CAN-H

  • j 0v

  • k TX Ublox

  • l RX Ublox

  • m 5v Ublox

Settings.

The MCU can program the device to its standard settings. press h to get the menu on the console. For more advanced settings u-center or pyGPSClient can be used, but first the MCU Uart connected to the Ublox module must be disabled.

Press u to disable the Uart, then without turning the device off, connect to the Ubloc TX and RX pins. The Uart will be re-enabled on reboot or power cycle.

I have found pyGPSClient to be much easier than u-center as Windows tends to grab the comp ports and GPS stream making it almost impossible to connect u-center. (tips welcome). So I use pyGPSClient on a Ubuntu VM running in OSX. First connect with screen to get the console

text
screen /dev/ttyUSB0 115200

pres h to get the menu and u to disconnect the UART. The Ctrl-a + k to exit screen.

Then connect pyGPSClient to the ublox via a serial and reconfigure as required.

Expected setup.

  • Baud 19200
  • UBX Messages only, no NMEA

The satelite setup blow gives about 1m 3D accuracy without SBAS corrections, and slightly less once the SBAS corrections are received. Should probably write this into code.

  • CFG-GNSS also set in code

  • msgVer 0, mumTrkChHw 32 (read only), mumTrkChUse 32, numConfigBlocks 7

  • gnssId 0 (GPS), res 4, max 16, enable 1, mask 1 eg L1C/A 1,575.42MHz

  • gnssId 1 (SBAS), res 2, max 4, enable 1, mask 1 eg L1C/A 1,575.42MHz

  • gnssId 2 (Galileo), res 4, max 8, enable 1, mask 1 eg E1 1,575.42MHz

  • gnssId 3 (BelDou) disabled 0,0,0,0

  • gnssId 4 (IMESS) diabled 0,0,0,0

  • gnssId 5 (QZSS) res 1, max 1, enable 1 mask 1, L1C/A 1,575.42MHz

  • gnssId 6 (GLonas) res 2, max 5 enable 1, mask 1 L1

  • CFG-ITMF,ection Jamming det enabled on active antena, all else defaults.

  • CFG_NAV5 set modes to sea

  • CFG-SBAS as default enable 1 (ignored), test 0, range 1, diffCorr 1, integrety 0, maxSBAS 3

  • PRN 120, 123, 127-129, 133, 135-138

  • Also set in code

  • CFG_RATE Solution interval 200ms, measurement ratio 5, UTC.

  • NAV setup all off except

  • NAV-DOP 6

  • NAV-POSLLH 1

  • NAV-PVT 5

  • NAV-SAT 9

  • NAV-VELNED 2

PCB

The PCM is designed in KiCad (ancient version), and milled on a CNC miller. The attiny3224 is underneath the ublox module, which has a ground plane on the bottom layer.

Parts

22
QtyValueFootprintReferences
410uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C103, C106, C107
3100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC104, C105, C108
222pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC101, C102
2DDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD1, D2
110KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR101
116MHzCrystal:Crystal_SMD_HC49-SDX101
1470RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR102
1ATTINY3224-SSPackage_SO:SO-14_3.9x8.65mm_P1.27mmIC101
1CANConnector_Wire:SolderWire-1.5sqmm_1x04_P6mm_D1.7mm_OD3mmP103
1DebugConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalP101
1MCP2515Package_SO:SOIC-18W_7.5x11.6mm_P1.27mmU101
1NCP1117ST50T3GPackage_TO_SOT_SMD:SOT-223-3_TabPin2U103
1Polyfuse_SmallFuse:Fuse_1812_4532Metric_Pad1.30x3.40mm_HandSolderF1
1TJA1050Package_SO:SO-8_3.9x4.9mm_P1.27mmU102
1neo-m8n-module-miniiebSpecials:neo-m8n-module-miniU1

Questions

How big is the CanGNSS PCB?

It measures 89.2 × 38.3 mm and has 2 copper layers, 1.6 mm thick.

What parts does the CanGNSS use?

22 parts, built around the ATTINY3224-SSU, MCP2515-I and TJA1050. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the CanGNSS KiCad files?

From the ieb/CanGNSS repository on GitHub, at the commit this page was made from: the board is pcb/CanGNSS.kicad_pcb and its schematic pcb/CanGNSS.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the CanGNSS design in my own project?

Its repository states no licence, so its author keeps all rights: ask ieb before reusing the design.

Similar boards

  • 2 layers66.4 × 28.1 mmCanPressure, the printed circuit board in 3D

    CanPressure

    ieb/CanPressure

    NMEA2000 Sensor based on ATTiny3224 for Pressure, Temperature, Humidity

    18 parts
  • 2 layers87.3 × 28.3 mmNMEA2000Shunt, the printed circuit board in 3D

    NMEA2000Shunt

    ieb/NMEA2000Shunt

    NMEA2000 Shunt for measuring current, voltage, temperature based on a INA219.

    26 parts
  • 2 layers150 × 100 mmEngineManagementSimpleWithMosfets, the printed circuit board in 3D

    EngineManagementSimpleWithMosfets

    ieb/EngineManagement

    Replacement engine electronics for a Volvo Penta D2-40 and other MDI based engines.

    151 parts1
  • 2 layers56.7 × 25.4 mmBatteryMonitorATTiny3224, the printed circuit board in 3D

    BatteryMonitorATTiny3224

    ieb/BatterySensor

    A Modbus RTU Battery Current and Voltage sensor board based Attiny3224, MAX485, MAX9918 chips.

    24 parts1
  • 2 layers21.1 × 19.6 mmSoic14-bb, the printed circuit board in 3D

    Soic14-bb

    jaco-pixeldump/attiny-soic-14-barebone-breakout-board

    A compact, breadboard-friendly breakout adapter PCB for 14-pin SOIC Microchip ATtiny microcontrollers (such as ATtiny3224, ATtiny1624, ATtiny824, ATtiny424, as well as 1-series and 0-series parts like ATtiny1614…

    5 parts1MIT
  • 2 layers79 × 80 mmDiy esc, the printed circuit board in 3D

    Diy esc

    Siddharth2308/esc

    79 parts1
  • 2 layers93 × 93 mmAMN TopPcb, the printed circuit board in 3D

    AMN TopPcb

    hschack/ANM_TOP_PCB

    31 parts