NEO-7M Library for Proteus V1.1: two Arduino UNOs, the NEO-7M Advance pop-up with a 3D fix and the TEP Serial Monitor showing the TinyGPS++ output

NEO-7M Library for Proteus V1.1 (GPS + GLONASS, Arduino)

2.5K Views
40
700
60
25
60
PCBWay

Hello friends, I hope you all are doing great. Today, I am going to share the new NEO-7M GPS Library for Proteus V1.1. The u-blox NEO-7M is the next step after the famous NEO-6M: it is the same size and talks to your Arduino the same way, but it can also use the Russian GLONASS satellites instead of GPS. With this NEO-7M Library for Proteus, you can test your GPS sketches on your PC, switch between GPS and GLONASS with one click, and see for yourself which system works better where your project will live.

In this version, you get two devices: NEO-7M Simple, with a GPS screen drawn on the schematic, and NEO-7M Advance, with a pop-up window that holds the GPS screen and five measured GNSS test tools: time to first fix, accuracy, NMEA check, route and a new Constellations test that puts GPS and GLONASS side by side. The demo has two Arduino UNOs, one for each device, both reading the position with TinyGPS++.

NOTICE: Our NEO-7M model simulates two complete satellite systems: 30 GPS satellites and 24 GLONASS satellites moving over the sky, with signals, fixes and DOP values computed from their geometry. It took our team a lot of hard work, many test runs and many design changes, and this library is a tribute to that effort. Your feedback is the fuel that keeps us going, so please tell us what you think in the comments below or in the Proteus Libraries category of our forum. And if our free libraries help you in your studies or work, you can buy us a coffee (our donation page is coming soon). So, let's get started with the NEO-7M Library for Proteus:

NEO-7M Library for Proteus V1.1: two Arduino UNOs, the NEO-7M Advance pop-up with a 3D fix and the TEP Serial Monitor showing the TinyGPS++ output
Figure: The NEO-7M demo in Proteus 8.5: the circuit, the NEO-7M Advance pop-up and Serial Monitor U4.

What is the NEO-7M GPS Module?

The NEO-7M is a GNSS receiver module from u-blox, the 7th generation of the NEO family. It is sold on a small blue board with a square ceramic patch antenna, a micro-USB socket, a backup cell, a red power LED and a status LED. Like the NEO-6M, it sends NMEA sentences over a UART (TX / RX serial port) at 9600 baud and accepts u-blox UBX commands. If NMEA, fix, HDOP and TTFF are new words for you, our NEO-6M Library for Proteus article explains them step by step.

GPS or GLONASS: One at a Time

GLONASS is Russia's satellite navigation system. The NEO-7M can use GPS or GLONASS, but not both at the same time, because it has a single radio path. You choose the system with the UBX command CFG-GNSS. The NMEA sentences then start with a different talker ID:

NEO-7M systems and talkers
SystemTalkerExample sentenceSatellite numbers
GPS (default)$GP$GPGGA, $GPRMC, $GPGSA, $GPGSV1 - 32
GLONASS$GL$GLGGA, $GLRMC, $GLGSA, $GLGSV65 - 88

Here is how the NEO-7M compares with its older and younger brothers:

u-blox NEO generations
ModuleSystemsCold start (data sheet)NMEA
NEO-6MGPS only27 s2.3
NEO-7MGPS or GLONASS30 s GPS, 32 s GLONASS2.3
NEO-M8NGPS and GLONASS together26 s (both)4.0

What's New in NEO-7M Library for Proteus V1.1

  • Two devices: NEO-7M Simple (NEO7MTEP) and NEO-7M Advance (NEO7MADVTEP) in TEPNEO7M.LIB.
  • Its own library: v1.0 shipped the NEO-7M and NEO-M8N in one package; now each has its own download and article. Both use the same model file, TEPUBLOX.DLL, so installing both is safe.
  • Close and reopen the Simple GPS screen: a red X in its header, a PANEL button on the board.
  • Board: a red PWR LED, and the patch antenna glows amber while acquiring and green with a fix.
  • Five GNSS test tools in the Advance pop-up, including the new Constellations test.
  • Realistic TTFF per system: GLONASS takes 32 / 30 of the GPS time, like the data sheet.
  • TEP Serial Monitor in the demo: each monitor also shows the raw NMEA of its GPS on RX2.
  • Lighter package: about 1.6 MB, without the C++ source code.

NEO-7M Library for Proteus: Simple vs Advance

NEO-7M Simple vs Advance
FeatureSimpleAdvance
Full NEO-7M model (NMEA, UBX commands, GPS and GLONASS skies, fix, HDOP)✔✔
Status and PWR LEDs, glowing patch antenna, animated waves✔✔
GPS screen drawn on the schematic✔✘
GPS screen in a pop-up window you can move and resize✘✔
Location, motion, sky, GNSS and cold start buttons✔✔
TTFF, Accuracy, NMEA check, Route and Constellations tests✘✔
TEP Dark / Light theme, text size, Help page with Copy diagnostics✘✔
Same device name as v1.0 (old designs keep working)✔✘

Download NEO-7M Library for Proteus

Click the button below to download NEO-7M-GPS-Library-for-Proteus-v1.1.zip:

NEO-7M GPS Library for Proteus V1.1
  • README.txt: a detailed guide to the files.
  • Proteus Library Files: TEPNEO7M.LIB (both devices), TEPSERIALMON.LIB and our Arduino UNO library ArduinoV3TEP.LIB / ArduinoV3TEP.IDX.
  • Proteus Model Files: TEPUBLOX.DLL and TEPSERIALMON.DLL.
  • Proteus Simulation: the demo project, the .hex file and copies of both DLLs.
  • Arduino Code: the demo sketch, TinyGPS++ 1.0.3a (LGPL-2.1) and AltSoftSerial 1.4 (MIT).

If you don't have Proteus yet, read How to Download and Install Proteus 7 and 8. New to libraries? Follow How to Install a New Library in Proteus.

How to Install NEO-7M Library for Proteus

  1. Close Proteus and extract the whole zip file.
  2. Copy the four files from Proteus Library Files into the LIBRARY folder, usually C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\LIBRARY.
  3. Copy TEPUBLOX.DLL and TEPSERIALMON.DLL into the MODELS folder.
  4. Start Proteus, press P and search for NEO-7M. You get the Simple and the Advance device (category Peripherals > Wireless).

Updating from v1.0? Replace TEPNEO7M.LIB and TEPUBLOX.DLL, and delete any TEPNEO7M.IDX from the LIBRARY folder. Tested in Proteus 8.5; Proteus 7 is not supported.

NEO-7M Module in Proteus

We designed the module as a clean TEP board in the blue of the real NEO-7M board: the ceramic patch antenna with "GPS / GLONASS" printed on it, the silver u-blox NEO-7M can, the micro-USB socket, the ML1220 backup cell, the status LED (PPS) and the red PWR LED. A small satellite floats above the antenna. Here is the NEO-7M Advance:

NEO-7M Advance board in the NEO-7M Library for Proteus with the patch antenna, PPS and PWR LEDs and the OPEN PANEL button
Figure: NEO-7M Advance with a fix: the patch is green, the waves too.

Pinout

NEO-7M pins (VCC GND TXD RXD PPS)
PinFunctionDemo connection
VCCPower supply (3.3 - 5 V on the board)+5 V
GNDGroundGND
TXDNMEA sentences and UBX repliesArduino D8
RXDUBX commands from the ArduinoArduino D9
PPSTime pulse: 100 ms high each second with a fixOpen

LEDs, Patch Antenna and Waves

Board animations
IndicatorWhat it shows
Status LED (PPS)Lit while searching; goes dark for 100 ms each second after the fix, like the real board
PWR LED (red)On while VCC and GND are powered
Patch antennaAmber (pulsing) while acquiring, green with a fix
WavesGreen with a fix, amber while acquiring, grey without a signal

Component Properties

NEO-7M properties
PropertyMeaningDefault
GPSLAT / GPSLONHome position (degrees)51.47788 / -0.00148 (Greenwich)
GPSALT / GPSGEOIDHome altitude / geoid separation (m)46 / 45.4
GPSTTFFCold start time to first fix with GPS (s)10 (real 30)
GPSUTCUTC at the start: PC or a fixed date and timePC
GPSBAUDUART baud rate at power-up9600
GPSGNSSSystem at power-up: GPS or GLONASSGPS

The GPS Screen: NEO-7M Simple

Beside the Simple module, we have drawn a GPS screen. A few seconds after Run, it shows 3D FIX - 10 GPS SATELLITES:

NEO-7M Simple GPS screen in Proteus: 3D FIX - 10 GPS SATELLITES, sky plot, position, HDOP 0.80 and signal bars
Figure: NEO-7M Simple: 3D fix with 10 GPS satellites, GLONASS off.

The screen shows 51.477876 N, 0.001474 W, 47.7 m, 10 used / 10 in view, "GPS 10/10 (GLONASS OFF)", HDOP 0.80 and PDOP 1.38, a sky plot, the signal bars in dB-Hz, and at the bottom the reply to the Arduino's UBX MON-VER poll: "1.00 (59842) / 00070000". The buttons:

GPS screen buttons
RowButtons
LOCATIONLONDON, NEW YORK, TOKYO, SYDNEY, LAHORE, HOME
MOTIONSTOP, WALK (5 km/h on a 100 m circle), CAR (50 km/h on a 500 m circle)
SKYOPEN SKY, CITY (buildings hide satellites below 25°), INDOOR (26 dB weaker)
GNSSGPS, GLONASS (does what UBX-CFG-GNSS does)
COLD STARTForget everything; the next fix takes GPSTTFF

Click the red X in the screen's header to close it; the board button then says PANEL: CLOSED. Click PANEL to bring the screen back:

NEO-7M Simple board in Proteus with the GPS screen closed and the PANEL CLOSED button
Figure: The screen closed: PANEL: CLOSED (PC render of the board).

NEO-7M Advance: The Pop-Up Panel

The Advance device keeps only the board on the schematic and opens a TEP pop-up window at Run, with the look of our TEP Serial Monitor. The header shows the part and its state (U2 · 3D FIX), the tabs GPS and Test, and the theme, Settings and Help icons. Here it is right after the first fix, with both Serial Monitors:

NEO-7M Advance pop-up GPS page in Proteus with sky plot, position and signal bars, and two TEP Serial Monitors with NMEA sentences
Figure: The GPS page after the first fix, with Serial Monitors U3 and U4.
  • Fix banner: 3D FIX - 10 GPS SATELLITES.
  • Sky plot: GPS satellites as blue circles, GLONASS as pink squares (solid = used, pale = tracked, outline = no signal). Here GLONASS is "off".
  • Position and time: 51.477875° N, 0.001472° W, 47.8 m, UTC 21:50:50, 10 used / 10 tracked / 10 in view, HDOP 0.79, PDOP 1.45, first fix 10.0 s after the start, NMEA 2.3 at 9600 bps, 1 Hz.
  • Signal strength: one bar per satellite, with a dashed line at 20 dB-Hz, the minimum to be used in the fix.

Switching to GLONASS

Click GLONASS in the GNSS row. Like the real chip, the receiver drops GPS and must find the GLONASS satellites first: for a few seconds the banner says "NO FIX - 0 OF 8 SATELLITES USABLE". Then it gets 3D FIX - 8 GLONASS SATELLITES, and Serial Monitor U4 shows the new $GL talkers:

NEO-7M Library for Proteus: GLONASS mode, 3D fix with 8 GLONASS satellites and $GLGSA, $GLRMC, $GLGGA sentences in the Serial Monitor
Figure: GLONASS mode: 8 GLONASS satellites (pink squares) and $GL sentences on U4.

The sky plot now has pink squares numbered 67 to 85, the HDOP is 1.04, and U4 shows lines like:

$GLRMC,215117.00,A,5128.67349,N,00000.08808,W,0.130,,051026,,,A*74
$GLGGA,215117.00,5128.67349,N,00000.08808,W,1,08,1.04,44.9,M,45.4,M,,*6B
$GLGSA,A,3,67,68,73,74,75,83,84,85,,,,,1.84,1.04,1.52*10

Meanwhile U3, the monitor of UNO 1, still shows $GP sentences, because U1 is still on GPS. This is a great way to see the difference between the two systems.

The Test Page: GNSS Test Tools

The Test page has five tools. Every number is measured on the running model, and your sketch sees everything the tool does (for example, the fix dropping during a restart).

1. TTFF: Time to First Fix

Choose Cold, Warm or Hot and 3, 5 or 10 runs. Each run restarts the receiver like the UBX command CFG-RST. I ran three cold starts while the NEO-7M was on GLONASS:

NEO-7M TTFF test in Proteus: GLONASS cold start x 3, 11.5, 11.6 and 11.3 s against the 32 s data sheet line
Figure: TTFF, GLONASS cold x 3: 11.5 / 11.6 / 11.3 s (average 11.5 s).

The model's GLONASS line is 10.7 s, because GLONASS takes 32 / 30 of GPSTTFF (10 s), just like the data sheet gives 32 s for GLONASS and 30 s for GPS. The amber dashed line is the real data sheet value, 32 s. Good for: knowing how long your sketch waits for a position after power-up.

2. Accuracy

The accuracy tool compares every reported position with the true one. In this PC render of 60 fixes on GPS in the open sky: CEP 1.37 m, 2DRMS 2.67 m, largest error 2.18 m, HDOP 1.07 with 10 satellites:

NEO-7M accuracy test: 60 fixes, CEP 1.37 m, 2DRMS 2.67 m, scatter plot around the true position
Figure: Accuracy, 60 fixes on GPS (PC render of the window).

CEP is the radius that holds half of the fixes; 2DRMS holds about 95 %. The NEO-7 data sheet gives 2.5 m CEP for GPS and 4.0 m for GLONASS.

3. NMEA Check

The NMEA check reads the TX bytes again: every sentence, its rate, its checksum and the UART load. On GPS, the NEO-7M sends 8.0 sentences per second, 475 bytes/s, a UART load of 49 % at 9600 bps, with every checksum OK:

NEO-7M NMEA check: $GPRMC, $GPVTG, $GPGGA, $GPGSA, $GPGSV, $GPGLL, UART load 49 percent, checksums OK
Figure: NMEA check on GPS (PC render of the window).

4. Route

The route tool drives (50 km/h) or walks (5 km/h) the model's circle and compares the GPS distance with the true one. One full lap: 3142.1 m by GPS against 3138.9 m (+0.1 %):

NEO-7M route test: one lap by car, GPS distance 3142.1 m against 3138.9 m
Figure: Route, one lap by car (PC render of the window).

5. Constellations: GPS vs GLONASS

This is the new tool. It switches the receiver to each system (like UBX-CFG-GNSS), cold starts it, times the first fix and records 20, 30 or 60 fixes. The system that was in use runs last, so the receiver ends where it started. I chose City and 20 fixes per mode:

NEO-7M Constellations test in Proteus, city: GPS 6 satellites, HDOP 1.27, CEP 1.53 m against GLONASS 5 satellites, HDOP 1.78, CEP 2.23 m
Figure: Constellations, City x 20: GPS against GLONASS.
Constellations results, City, 20 fixes per mode
SystemTTFFSatellites usedIn viewHDOPCEP2DRMS
GPS10.1 s6.010.01.271.53 m3.09 m
GLONASS12.0 s5.08.01.782.23 m4.30 m

In this city, GPS saw more satellites, so it had a better geometry and smaller errors. With a different location or time the result can change, and that is the point: the tool lets you test both systems where your project will be used. Good for: choosing GPS or GLONASS for your NEO-7M. If you need both at once, that is what the NEO-M8N does (our NEO-M8N Library for Proteus).

Settings and Help

The gear icon opens Settings: theme (TEP Dark or Light), text size, open the panel at Run and the window size, saved for your Windows user:

Settings page of the NEO-7M Advance pop-up: theme, text size, open the panel at Run and window size
Figure: The Settings page (PC render of the window).

The ? icon opens Help & Support with eight cards and Copy diagnostics, like our other Advance devices:

Help and Support page of the NEO-7M Advance with eight cards and Copy diagnostics
Figure: The Help page (PC render of the window).

NEO-7M with Arduino in Proteus

The demo project NEO7M-GPS-ArduinoUnoV3.pdsprj has two Arduino UNOs from our Arduino Library for Proteus V3.0, both running the same sketch: UNO 1 (ARD1) with the NEO-7M Simple (U1) and Serial Monitor U3, and UNO 2 (ARD2) with the NEO-7M Advance (U2) and Serial Monitor U4.

Wiring

Demo wiring (the same on both UNOs)
FromToWhy
NEO-7M VCC / GND+5 V / groundPower
NEO-7M TXDArduino D8AltSoftSerial RX: the NMEA sentences
NEO-7M RXDArduino D9AltSoftSerial TX: the UBX MON-VER poll
NEO-7M PPSOpenThe sketch does not need it
Serial Monitor RXD / TXDArduino D1 / D0The sketch's output and input
Serial Monitor RXD2NEO-7M TXD (junction)Shows the raw NMEA beside the TinyGPS++ output

The D9 -> RXD wire crosses the TXD -> D8 wire without a junction dot: they are not connected. Want to know more about these pins? Read our Introduction to Arduino UNO. As with every UART module in Proteus 8.5, the sketch uses AltSoftSerial, because SoftwareSerial cannot receive in Proteus (it needs pin-change interrupts).

The Arduino Code

NEO7M_TinyGPS.ino uses TinyGPS++. TinyGPS++ 1.0.3a decodes $GPRMC / $GPGGA but not the $GL sentences, so the sketch reads the GLONASS fields with TinyGPSCustom:

TinyGPSCustom glTime(gps, "GLRMC", 1), glSpeed(gps, "GLRMC", 7), glCourse(gps, "GLRMC", 8), glDate(gps, "GLRMC", 9);
TinyGPSCustom glLat(gps, "GLGGA", 2), glNS(gps, "GLGGA", 3), glLon(gps, "GLGGA", 4), glEW(gps, "GLGGA", 5);
TinyGPSCustom glQuality(gps, "GLGGA", 6), glSats(gps, "GLGGA", 7), glHdop(gps, "GLGGA", 8), glAlt(gps, "GLGGA", 9);

Every 2 seconds, it checks whether $GLRMC sentences are arriving and reads the right set of fields:

  const bool glonass = glTime.age() < 1500;       // $GLRMC arrives (every second): the receiver is in GLONASS mode
  if (glonass) readGlonass(r); else readTinyGps(r);
  TinyGPSCustom &inView = glonass ? gloInView : gpsInView;
  printReading(r, glonass ? "GLONASS" : "GPS", inView.age() < 1500 ? atoi(inView.value()) : 0);

At start-up, it also polls the module's firmware with the UBX command MON-VER. If you change the sketch, see How to get the HEX file from Arduino. New to Arduino? Start with our Arduino Tutorial for Beginners.

Simulation Results

Each monitor prints a status block every 2 seconds, with the raw NMEA in amber (RX2) in between:

NEO-7M + TinyGPS++
u-blox firmware: 1.00 (59842), hardware: 00070000
  PROTVER 14.00
  GPS;SBAS;GLO;QZSS
...
21:54:37 UTC 05/10/2026  GPS  fix, 10 satellites used, HDOP 0.79
  Lat 51.477878  Lon -0.001474  Alt 46.7 m

After switching to GLONASS, the system name changes to GLONASS and the satellites to 8. Read all about the monitor in TEP Serial Monitor Advance for Proteus.

How the NEO-7M Model Works

Knowing what happens inside the model helps you understand the numbers on the screen and in your sketch.

Start-up

0.4 s after power-up, the module prints seven $GPTXT lines, as captured from a real NEO-7M board: u-blox ag, HW UBX-G70xx 00070000, ROM CORE 1.00 (59842), PROTVER 14.00, ANTSUPERV, ANTSTATUS=DONTKNOW and LLC. Then it sends RMC, VTG, GGA, GSA, GSV and GLL every second. Without a fix, the fields are empty exactly like on a real module, for example $GPGGA,,,,,,0,00,99.99,,,,,,*48; time and date appear once satellites are tracked.

Satellites and the Fix

  • Two skies: 30 GPS satellites in 6 orbit planes (12 h orbits) and 24 GLONASS satellites, numbers 65 - 88, in 3 planes (11 h 15 min orbits). Their elevation, azimuth and signal come from the geometry, so the sky plot and the DOP values change slowly, like on a real receiver.
  • Thresholds: a satellite is acquired from 26 dB-Hz, tracked down to 14 dB-Hz and used in the fix from 20 dB-Hz (the dashed line on the signal chart).
  • Fix: 3 satellites give a 2D fix, 4 or more a 3D fix. HDOP and PDOP are computed from the satellites used, and the position wanders by about a metre per unit of HDOP.
  • Switching systems: after the GNSS button or a CFG-GNSS command, the new system needs the TTFF again before its satellites join the fix.

UBX Commands Supported

Send these on the module's RXD pin (frames start with B5 62; the checksum is checked):

UBX commands of the NEO-7M model
CommandWhat it does in the model
CFG-PRT (06 00)Poll, or set the UART speed 4800 - 115200 (ACK at the old speed, then switch)
CFG-RATE (06 08)Poll, or set the rate: down to 100 ms (10 Hz) with GPS, 1 s with GLONASS
CFG-MSG (06 01)Poll, or set the rate of GGA, GLL, GSA, GSV, RMC, VTG, NAV-POSLLH, NAV-STATUS
CFG-GNSS (06 3E)Choose GPS or GLONASS; both together gets a NAK (one radio path)
CFG-NMEA (06 17)NMEA 2.1 / 2.3 and the talker IDs (NMEA 4.x gets a NAK)
CFG-RST (06 04)Hot / warm / cold start, module restart, GNSS stop / start
CFG-CFG (06 09)Clear / save / load the configuration (kept for the run)
MON-VER (0A 04)"1.00 (59842)", "00070000", "PROTVER 14.00", "GPS;SBAS;GLO;QZSS"

UART load: if the rate and the sentences do not fit the baud rate (for example 5 Hz with all six sentences at 9600 bps), the model drops a whole epoch, like the real receiver, and the Simulation Log explains it. Raise the baud rate with CFG-PRT or turn sentences off with CFG-MSG.

Troubleshooting

  • No fix: wait GPSTTFF seconds of simulation time (GLONASS a little longer), check that SKY is not INDOOR, and after a GNSS button wait the TTFF again.
  • "NO POWER - CHECK VCC / GND": wire VCC to a +5 V terminal and GND to ground.
  • The monitor shows nothing from the GPS: TXD must go to D8, and the sketch must use AltSoftSerial.
  • "No reply to MON-VER": the Arduino's D9 must go to the module's RXD.
  • The NEO-7M will not use GPS and GLONASS together: correct, the real NEO-7M cannot either.
  • No screen or pop-up: TEPUBLOX.DLL is missing from MODELS and the project folder.

Things to Know Before Using a Real NEO-7M

  • Supply: the board takes 3.3 - 5 V on VCC and has a 3.3 V regulator.
  • Logic level: the UART is 3.3 V. A divider between D9 and RXD is the safe choice: 1 k from D9 to RXD and 2 k from RXD to GND.
  • Pin order: some NEO-7M boards print GND VCC TX RX PPS; check your board.
  • Sky view: a real module usually gets no fix indoors.

Limitations of the Simulation

  • The GPS and GLONASS skies are simplified constellations, realistic in kind but not the real satellites of that day. SBAS and QZSS are not simulated.
  • Not modelled: the micro-USB port, power save modes, the backup battery (every power-up is a cold start) and the supply current.
  • Tested in Proteus 8.5 (the demo and the Proteus screenshots in this article) and with 2,112 automatic checks on the PC; Proteus 7 is not supported.

Need GPS + GLONASS at the same time? Look for our NEO-M8N Library for Proteus. Need GSM too? Try our SIM800L Library for Proteus.

So, that was all about the NEO-7M GPS Library for Proteus V1.1. I hope switching between GPS and GLONASS and comparing them with the Constellations test helps you understand satellite navigation better. Please share your feedback in the comments or in our forum. Till the next tutorial, take care and have fun!


Comments

0

Join the conversation