Using 3.3v GPS Serial signals on Arduino

Hello Guys!

I am creating a OSD for a remote control airplane and I had a little problem when connecting a ME-1000RW GPS Module on my arduino, because the signal was too low, when searching for a solution for this, I found out that people usually use MAX232 to level the signal. But I found out that using a transistor and two resistors do the trick.

here is my test circuit:

before level up the signal, I was getting only tresh on the serial port.

Hope this can be helpful to someone else.

Cheers,

Antonio Santos.

The pullup resistors in your circuit seems a bit excessive - I would swap the position of the 1K and 10k resistors.

The use of a single transistor for "level" conversion suggests you're interfacing to RS-232 (as opposed to logic level TTL). Since your GPS apparently supports both TTL and RS-232, you may benefit from interfacing direct to the GPS logic level interface.

Hi BenF!

this GPS module only suports LVTTL (Low voltage TTL) which is even worst from the signal level perspective.

Cheers!

Antonio Santos

this GPS module only suports LVTTL (Low voltage TTL)

This doesn't match with your circuit, the issues you report or the datasheet. When you use a single transistor, you invert the logic level and so signals would no longer be compatible with the Arduino USART. It may work however with RS-232 levels (despite the excessive pullups as I mentioned).

It seems to me you're not doing what you think you are and so it may not be a good idea for others to follow your example.

Check datasheet here:
http://res.trilha21.com/001000608/files/ME-1000RW.pdf

;D

yep I know I inverted the logic level also. and yes this is to work with RS232 levels. This is the code I am using, and its working like a charm know.

#include <AFSoftSerial.h>

AFSoftSerial mySerial =  AFSoftSerial(4, 5);

void setup()  {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("Goodnight moon!");
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
}

void loop()                     // run over and over again
{
  if (mySerial.available()) {
      Serial.print((char)mySerial.read());
  }

}

I have that datasheet you mentioned but its poorly written and it has a bunch of errors, even the PINOUTS are wrong. I placed this here because I've seen people that bought it having problems to communicate with are doing, and they just gave up.

Besides the voltage levels, there is a logic invertion. I would buy another module like EM-406 or locosys, but this was the only one available in Brazil.

Thanks for the comments,

Antonio Santos

Hi there!

I was browsing around and I found out that my GPS uses the same chipset used on the Sparkfun Venus GPS, the Venus634FLPX that I see many threads and none solved... If anyone is willing to try this please be careful, and try at your own risks, here is working great now.

and since I don't send anything to the GPS, I am only using the first portion of the schematic, a BC547 or BC548 and two resistors...

If this works with the Spark Fun Venus GPS, please post here...

Thanks,

Antonio Santos

Just looking at your schematic, it appears that you are connecting 5v to your 3.3v chip.

yes, my arduino nano is working at 5v. But you can also conect to a 3.3v if you use a chip that uses 3.3v logic levels. These Venus634FLPX based GPS are a pain. This was the only way mine worked... I only got trash from the serial before doing this... now I am getting real data:

$GPRMC,172117.995,A,2247.2299,S,04705.1322,W,001.0,140.8,120710,,,A*69
$GPVTG,140.8,T,,M,001.0,N,001.8,K,A*08
$GPGGA,172118.995,2247.2297,S,04705.1322,W,1,06,2.2,622.7,M,-2.0,M,,0000*4B
$GPGSA,A,3,03,18,24,19,06,22,,,,,,,3.4,2.2,2.7*32
$GPGSV,2,1,08,14,72,056,25,06,68,301,16,03,58,264,44,24,57,153,28*7C
$GPGSV,2,2,08,22,44,155,22,19,39,226,33,18,15,130,38,16,12,328,17*7B
$GPRMC,172118.995,A,2247.2297,S,04705.1322,W,001.3,144.3,120710,,,A*64
$GPVTG,144.3,T,,M,001.3,N,002.3,K,A*0C
$GPGGA,172119.995,2247.2297,S,04705.1320,W,1,06,2.2,622.8,M,-2.0,M,,0000*47
$GPGSA,A,3,03,18,24,19,06,22,,,,,,,3.4,2.2,2.7*32
$GPGSV,2,1,08,14,72,056,26,06,68,302,15,03,58,264,43,24,57,153,28*78
$GPGSV,2,2,08,22,44,155,24,19,39,226,34,18,15,130,37,16,12,328,16*74
$GPRMC,172119.995,A,2247.2297,S,04705.1320,W,000.0,144.3,120710,,,A*65
$GPVTG,144.3,T,,M,000.0,N,000.0,K,A*0F
$GPGGA,172120.995,2247.2294,S,04705.1321,W,1,06,2.2,623.3,M,-2.0,M,,0000*45
$GPGSA,A,3,03,18,24,19,06,22,,,,,,,3.4,2.2,2.7*32
$GPGSV,2,1,08,14,72,056,26,06,68,302,15,03,58,264,41,24,57,153,28*7A
$GPGSV,2,2,08,22,44,155,23,19,39,226,34,18,15,130,39,16,12,328,15*7E
$GPRMC,172120.995,A,2247.2294,S,04705.1321,W,000.0,144.3,120710,,,A*6D
$GPVTG,144.3,T,,M,000.0,N,000.0,K,A*0F
$GPGGA,172121.995,2247.2286,S,04705.1314,W,1,06,2.2,623.0,M,-2.0,M,,0000*42
$GPGSA,A,3,03,18,24,19,06,22,,,,,,,3.4,2.2,2.7*32
$GPGSV,2,1,08,14,72,057,26,06,68,302,16,03,58,264,42,24,57,153,27*74
$GPGSV,2,2,08,22,44,155,23,19,39,226,33,18,15,130,38,16,12,328,15*78
$GPRMC,172121.995,A,2247.2286,S,04705.1314,W,000.0,144.3,120710,,,A*69
$GPVTG,144.3,T,,M,000.0,N,000.0,K,A*0F