gps_254x191

 

 

 

Introducing the I2C GPS Shield, an Arduino based shield that gives the user the ability to access most of the commonly used GPS data using the I2C protocol.  The shield features an ultra high sensitive -165dBm GPS receiver.  The shield is directly compatible with the Diecimila, Duemilanove and Uno.  The shield can also be modified to work with the Arduino Mega by removing two solder jumpers and soldering external wires to the SDA and SCL lines.

Standard GPS modules output NEMA 0183 data in serial format which then need to be read and parsed.  While there are several libraries out there that will parse the data some users still have trouble incorporating the overall code into their designs.

The I2C GPS Shield frees the user from most of the programming required to extract GPS data, instead it gives them the ability to get the data they want when they want it.  The shield can also be switched to Serial Mode which will output the raw serial data from the GPS to the serial port or a set of digital IO pins configured to Software Serial ports.

One status register and thirty one data registers give the user access to most of the commonly used GPS data including:

  • · Latitude
  • · Longitude
  • · Date
  • · Time
  • · Speed
  • · Course
  • · Altitude
  • · PDOP
  • · HDOP
  • · VDOP
  • · 3D Fix
  • · Satellites Used
  • · Position Fix Indicator
  • · RMC Valid Status

The GPS comes set to a default update rate of 1 Hz but can be set to any update rate up to 10Hz.  Typical access time to retrieve all available data is roughly 335 microseconds which is roughly 1500 times faster than reading the data serially when configured at a standard 9600 baud rate and over 4000 times faster when using High Speed Mode I2C.

Besides accessing data using I2C, the user also has the ability to configure the GPS via the control registers for such functions as baud rate, update rate, sentence configuration (only applicable to Serial Mode) and Hot\Warm\Cold Start.

The board features a 3D Fix indicator status LED, a 3V lithium battery holder on the underside of the board for an optional CR2025 battery and stackable shield headers so other shields can be stacked on top.

By default, Digital pins 7(Rx) and 8(Tx) are connected through a level translator circuit and give the user access to the raw serial data from the GPS engine.  These pins are set to a high impedance mode at startup and can be switched on by accessing one of the control registers and setting the unit to Serial Mode.  There are two 3-way solder jumpers that give the user the ability to switch the serial pins from D7 and D8 to the standard Arduino serial port on pins D1 and D0.

 

Original HERE

Rev 2.0 HERE


Sample Sketch  (1.0 compatible here)
Datasheet (PRELIMINARY)
GPS Engine Datasheet
Schematic
Register Map

Comments   

# scruss 2011-05-21 15:10
Ooh, nice ... any plans to bring the PPS signal out? It's really handy for precise timing.
# Wayne Truchsess 2011-05-21 15:25
I thought about bringing the PPS signal out then decided against it. I tied the PPS signal into the on-board microcontroller so I might be able to set it up as a pass through to one of the interrupt pins. For now there is a New Data interrupt available so if the unit is running at 1Hz it should generate a pulse pretty close to the PPS signal (assuming you read the new data each time it becomes available).
# RIUM+ 2011-05-24 23:54
What GPS chip are you using? Might be handy to know so people can check its datasheet :)
# Wayne Truchsess 2011-05-25 00:10
Thanks. I new I forgot something! I posted a link to the datasheet...it' s a Gms-u1LP GPS engine using the MediaTek chipset.
# chmurli 2011-05-25 15:34
U$3 it's a level converter I assume? Could you tell what integrated circuit it is exactly?
# Wayne Truchsess 2011-05-25 16:23
Quoting chmurli:
U$3 it's a level converter I assume? Could you tell what integrated circuit it is exactly?

Sure. Both U3 and U4 are TXS0102 chips. They are the same chips used on my I2C Logic Level Converter board that is for sale.
# Paul 2011-07-28 12:31
Quoting Wayne Truchsess:
I thought about bringing the PPS signal out then decided against it. I tied the PPS signal into the on-board microcontroller so I might be able to set it up as a pass through to one of the interrupt pins.

Wayne,
What "on-board microcontroller " does it use?.
Is it flashable to implement s/w changes like the one you mentioned?.
If so, how would this be done?.
# Wayne Truchsess 2011-07-28 13:11
Quoting Paul:
Quoting Wayne Truchsess:
I thought about bringing the PPS signal out then decided against it. I tied the PPS signal into the on-board microcontroller so I might be able to set it up as a pass through to one of the interrupt pins.

Wayne,
What "on-board microcontroller" does it use?.
Is it flashable to implement s/w changes like the one you mentioned?.
If so, how would this be done?.

It uses the ATmega328 coded on an Arduino IDE. I'm actually going to post the code when I get back from vacation. I've been "cleaning it up" a little to make it better readable. I purposely populated an ICSP header on the board so people could play around with the firmware assuming you have the proper ISP programmer hardware.
# Brian 2011-08-27 15:24
ChipKit has an arduino clone (80mhz with 8 times the memory of the UNO and 32 bit) but is a 3.3v board. While the digital pins are 5v tolerant, the analog ones are not.

Is there a way to use this GPS shield where the I2C is level shifted to 3.3v instead of 5?
# Wayne Truchsess 2011-08-27 21:15
Quoting Brian:
ChipKit has an arduino clone (80mhz with 8 times the memory of the UNO and 32 bit) but is a 3.3v board. While the digital pins are 5v tolerant, the analog ones are not.

Is there a way to use this GPS shield where the I2C is level shifted to 3.3v instead of 5?

It can be modified but it would involve cutting a circuit trace and soldering a wire from one resistor to another.

I took a quick look through the ChipKit wiki and it says the analog pins are not 5V tolerant (like you said) but it also says they added diodes to the analog pins along with series resistors to make the I2C pins 5 volt tolerant.