If you are developing some GPS based applications maybe you know, GPS data protocol is serial and %90 of data is just garbage. You have to listen it every time, data parsing a headache and impossible to making other time critical applications in same time.
I'm glad to announce the Navigatron - I2C GPS solution :)
Navigatron is an Arduino based board with GPS and backup battery. It is including Atmega328, FTDI port and 16mHz clock and working with 3.3-5v (you must replace the backup battery charge diode with a blue led for 5v applications)
I wrote my own I2C codes and tried other I2C project since 1 years but they wasn't enough easy. Most of I2C GPS codes sending all values in a single stream. Then 2 month before a guy (EOS Bandit) from MultiWii forum find a simple and perfect solution. His code simulating a real I2C device and you can access each register address separately.
Navigatron is coming with EOS Bandit's firmware with MultiWii 2.0 support. It is an opensource and you can replace the firmware for your requirements.
It is also storing/calculating way points and giving the direction and distance for you. This is perfect solution for low speed microprocessor based UAV applications because just you need a magnetic compass value for finding the way to home(or waypoint)
Here is the current I2C register addresses of gps values:
I2C_GPS_STATUS 0x00 //(Read only)
---I2C_GPS_STATUS_WP_REACHED 0x08 //Active waypoint has been reached (not cleared until new waypoint is set)
I2C_GPS_COMMAND 0x01 //(write only)
---I2C_GPS_COMMAND_POSHOLD 0x01 //copy current position to internal target location register
---I2C_GPS_COMMAND_RESUME 0x02 //copy last active WP to internal target location register
---define I2C_GPS_COMMAND_SET_WP 0x04 //copy current position to given WP
---define I2C_GPS_COMMAND_ACTIVATE_WP 0x08 //copy given WP position to internal target location register
---define I2C_GPS_COMMAND_WP 0xF0 //Waypoint number
I2C_GPS_WP_REG 0x06 //Waypoint register (Read only)
---I2C_GPS_WP_REG_ACTIVE 0x0F //Active Waypoint
---define I2C_GPS_WP_REG_PERVIOUS 0xF0 //pervious Waypoint
=== Values ===
I2C_GPS_GROUND_SPEED 0x07 //GPS ground speed in m/s*100 (uint16_t) (Read Only)
I2C_GPS_ALTITUDE 0x09 //GPS altitude in meters (uint16_t) (Read Only)
I2C_GPS_TIME 0x0b //UTC Time from GPS in hhmmss.sss * 100 (uint32_t)(unneccesary precision) (Read Only)
I2C_GPS_DISTANCE 0x0f //Distance between current pos and internal target location register in meters (uint16_t) (Read Only)
I2C_GPS_DIRECTION 0x11 //direction towards interal target location reg from current position (+/- 180 degree) (read Only)
I2C_GPS_LOCATION 0x13 //current position (8 bytes, lat and lon, 1 degree = 10 000 000 (read only)
I2C_GPS_WP0 0x1B //Waypoint 0 used for RTH location (R/W)
I2C_GPS_WP_NAV_PAR1 0x9B //Waypoint navigation parameter 1
---I2C_GPS_WP_NAV_PAR1_REACH_LIMIT 0x0F //lover 4 bit, waypoint reached distance
I2C_GPS_GROUND_COURSE 0x9C //GPS ground course (uint16_t)
For Schematic/Sample Codes and other details: http://www.flytron.com/sensors/180-i2c-gps-for-multiwii-and-others....
Have a nice weekend