Mediatek 3329 GPS connect to Duemilanove MTmega328

Hey guys!

Currently i’m working on a school project and im looking to get an output from the GPS.

Background:

GPS Module
https://store.diydrones.com/ProductDetails.asp?ProductCode=MT3329-01

GPS Adapter
http://store.diydrones.com/MediaTek_MT3229_Adapter_Basic_p/br-0014-02.htm

–Basically its already soldered when i bought it. i only added the pin headers to mount it on the breadboard.

Arduino Duemilanove MTmega328

Connection:

GPS MODULE’s 5V connected to Arduino’s 5V
GPS MODULE’s GND connected to Arduino’s GND
GPS MODULE’s EN left hanging
GPS MODULE’s OUT connected to Arduino’s RX
GPS MODULE’s IN connected to Arduino’s TX

after looking online, i was told that TX is not necessary but i’ll just leave it connected just in case.

CODE:

the following is included in the standard library for MTK_GPS and its the example code

#include <GPS_MTK.h> // UBLOX GPS Library

void setup()
{
Serial.begin(38400);
Serial.println(“GPS MTK library test”);
GPS.Init(); // GPS Initialization
delay(1000);
}
void loop()
{
GPS.Read();
if (GPS.NewData) // New GPS data?
{
Serial.print(“GPS:”);
Serial.print(" Lat:");
Serial.print(GPS.Lattitude);
Serial.print(" Lon:");
Serial.print(GPS.Longitude);
Serial.print(" Alt:");
Serial.print((float)GPS.Altitude/100.0);
Serial.print(" GSP:");
Serial.print((float)GPS.Ground_Speed/100.0);
Serial.print(" COG:");
Serial.print(GPS.Ground_Course/1000000);
Serial.print(" SAT:");
Serial.print((int)GPS.NumSats);
Serial.print(" FIX:");
Serial.print((int)GPS.Fix);
Serial.print(" TIM:");
Serial.print(GPS.Time);
Serial.println();
GPS.NewData = 0; // We have readed the data
}
delay(20);
}

the LED remains Blinking, which i think is searching for satellites… its been long after the cold start period. I’m in an open sky condition, but relatively close to a tall building. Could that be the cause?

also, once, the LED stopped blinking where i was in a different location. But there is no NMEA outputs shown on the serial monitor.

At that time i thought i should connect the EN to GND, since connecting it to 5V still doesnt produce any output.
den i realize it just stops the LED from blinking.

Can someone please enlighten me?
Help would be much appreciated! :slight_smile:

GPS MODULE's OUT connected to Arduino's RX GPS MODULE's IN connected to Arduino's TX

Which are the serial pins.

But there is no NMEA outputs shown on the serial monitor.

Do you want the RX/TX pins for the serial port or do you want them for the GPS? Both is not a possible answer.

You could have several issues going on.

The first being, leave the EN floating as it internally pulled high. If you connect it to GND it will disable the module.

Another issue is you should be careful when connecting the Arduino Tx pin to the GPS RX (IN) pin because that pin is not 5 volt tolerant. You really should use some form of level translation, even something like a resistor divider will work.

My best guess is your GPS is not configured to the proper protocol. Most GPS' out there output the standard NMEA protocol. The one's from DiyDrones have a custom firmware installed so they can be switched between standard NMEA output and single sentence binary output. The library you are using (from what I can see) was designed to parse data from the binary output. If that is the case you'll need to peruse the DIYD site to see what the command is to switch back.

The fact that the GPS is not locking onto satellites outside after sometime is also a little concerning. If you don't have a battery backup on board it can take up to 15 minutes to download all the necessary data.

Here's a quick way to check to see if the GPS is outputting data. Download the below sketch and then connect the OUT (TX) from the GPS to the Tx pin on the Arduino (yes I know it's backwards). The sketch puts the Arduino into a high impedance mode so any data on the Tx line will be sent straight to the serial monitor. Then open up serial monitor and cycle through the baud rate settings until you see correctly formatted data. If the sentences are in NMEA format (GPRMC, GPVTG, etc ) then you'll need to switch it to binary format to use that library or find another library that works with NMEA output.

As for not locking onto the satellite, here's a little trick to see if the antenna is the problem. Look at the streaming data on the screen and look at the date that is being reported. This particular GPS (and I think most others) will default to a date of January 6th, 1980 (when GPS was launched). Then the GPS will need to download the almanac information (time and date) and finally will lock onto satellites to calculate position. If after 15 minutes or so the time and date do not update then you probably have a problem with the antenna.

That should be enough to get you started.

void setup(){
  pinMode(0,INPUT);
  digitalWrite(0,LOW);
  pinMode(1,INPUT);
  digitalWrite(1,LOW);
}

void loop(){
  while(1);
}

Thanks Paul and wayneft!

@paul: what do you mean by serial port or GPS? hmm.. im thinking that the GPS should be sending in the NMEA outputs to the RX pin of the arduino and hence it will be shown on the serial monitor.. am i wrong? =(

@wayneft: thanks! thats very detailed! i'll try it out.. hopefully i didnt damage the GPS.