GPS - Neo 6M V2 Supply & Logic Voltage Question

I'm considering switching an Arduino project over to use 3.3v Arduino Pro Minis. Currently I use the 5v variant.

I believe this will have a side benefit of eliminating 2 resistors, but I wanted to check wtih you guys first.

The Neo6m I am using specifies 3-5v supply voltage. Currently I have it hooked to 5v. And, I have 2 resistors hooked up to Neo's Rx pin (10k->GND, 4.7k->data). I saw a lot of examples this way, so that's why I did that.

Looking at example configurations online, I see:

  • 3.3v w/ resistors
  • 3.3v w/o resistors
  • 5v w/ resistors
  • 5v w/o resistors

I feel that people have been mixing and matching with no rhyme or reason. I assume the options really ought to be: 1) 5v w/ resistors, or 2) 3.3v w/o resistors.

TL;DR

Would it be a reasonable idea to connect this device to 3.3v supply, and straight up tx/rx rx/tx pins with no resistors? I feel that would simplify things considerably.

Would it be a reasonable idea to connect this device to 3.3v supply, and straight up tx/rx rx/tx pins with no resistors?

Yes.

Of course, since the documentation says that it is 5V tolerant, you could connect it to 5V without resistors, too.

the documentation says that it is 5V tolerant, you could connect it to 5V without resistors, too.

Well, the Amazon description says "3V-5V power supply Universal", which is a little loosey-goosey... :slight_smile:

That module (the PCB and all its components) has a voltage regulator than can take 5V and provide the specified 3.3V to the Neo-6M GPS chip: you can safely connect a 5V power supply to the module's Vcc pin.

However, the Neo-6M GPS chip uses 3.3V, so the GPS TX pin output voltage is about ~2.9V. This is slightly under the Arduino RX pin input voltage for a logic 1 (3.0V). A direct connection works for many people, but it could cause problems with the Arduino receiving the chars correctly.

And when connecting the Arduino TX pin to the GPS RX pin (for sending configuration commands), a logic one from the Arduino (4.2V minimum) exceeds the GPS input level (3.6V maximum). This can cause the GPS chip to overheat or even fail, or decrease the battery life of a mobile system. At the very least you should use some sort of level shifting on the GPS RX pin (e.g. a series resistor to limit current).

I feel that people have been mixing and matching with no rhyme or reason. I assume the options really ought to be: 1) 5v w/ resistors, or 2) 3.3v w/o resistors.

Yes. According to the specs, you should perform level shifting for the GPS's data pins if they are connected to a 5V Arduino. As you have seen, lots of people get away with direct connections. I think I've seen 2 or 3 cases here (i.e., posted questions) where it looks like the module got fried by a direct connection. It usually works well enough, for most people.

Personally, I prefer level-shifting modules, because they're cheap, low-power, reliable and will also work for high-speed interfaces like an SD card reader. Here's a do-it-yourself schematic for those modules. Or, for this (relatively) low-speed serial interface, here's my previous reply that uses a few resistors and a diode.

And I'd also like to mention my library, NeoGPS. It's smaller, faster and more accurate than all other libraries, and it can be configured to only parse the fields and sentences that you really use. The examples are properly structured and ready for you to modify. Many users have trouble adding features to other libraries' examples.

The Arduino pin options for connecting to the GPS are in this order:

  1. 0 & 1 (aka Serial) is absolute best, if you're not using it for debug messages or some other device.

  2. 8 & 9 with AltSoftSerial is next best. It is very efficient and reliable. Strongly recommended!

  3. Any two pins with NeoSWSerial, which is almost as efficient and reliable, but only supports 9600, 19200 and 38400. I maintain this library.

  4. Absolute worst is using SoftwareSerial on any two pins. It is very inefficient, because it blocks interrupts for long periods of time. This can interfere with other parts of your sketch or other libraries.

Cheers,
/dev

Very interesting.

Ok I'm going to refactor my project, and I'll use your library as a revision of that. This is the second time you recommended it to me, so I'll give it a try when I refactor the code to simplify things.

-dev:
And I'd also like to mention my library, NeoGPS. It's smaller, faster and more accurate than all other libraries, and it can be configured to only parse the fields and sentences that you really use. The examples are properly structured and ready for you to modify. Many users have trouble adding features to other libraries' examples.

Which example did you have in mind? All I'm concerned about is moving speed.

Which example did you have in mind? All I'm concerned about is moving speed.

NMEAsimple.ino is a good start. To print the speed, add this:

    Serial.print( F(", Speed: ") );
    if (fix.valid.speed)
      Serial.print( fix.speed_kph() ); // or fix.speed_mph()...

The speed is provided by the RMC sentence, so the default configuration files should work for you. If you want to do some tuning, we can talk about getting a minimal configuration.

Great, thank you.

Hi I have similar problem here.

I got GY-NEO6MV2 module, I see that people are connecting it to 5V, I did the same, but I think that I have burn it. The reason why I think that is the fact that the board is heating a lot. Not sure whether I have made a mistake or got already burned board.

EDIT:
The temperature is 44 degrees of Celsius when module is attached to 3.3V

And only data I got is in this picture:

What do you think?
Thanks