updated 2/1/2012 by Monica Bate and Peter Darche

.The datasheet can be found here.

.A reference manual can be found here.

.Where to buy it.

Summary

The EM-406A is a 20-channel GPS receiver with built in patch antenna available at Sparkfun for $60. It supports the NMEA 0183 protocol for GPS data over an RS-232 serial connection, making it easy for a microcontroller to communicate to it. The datasheet also contains examples of each supported command, which is helpful when dealing with an unfamiliar protocol. It also is WAAS-enabled, which allows for a higher level of accuracy than standard GPS alone. (Iíll explain WAAS further later.) Considering its high level of accuracy, small form factor, and easy setup, it seems like an excellent choice for GPS applications.

Relevant Features and Specs:

  • SiRF star! high performance GPS Chip Set*
  • Very high sensitivity (Tracking Sensitivity: -159 dBm)
  • Extremely fast TTFF (Time To First Fix) at low signal level
  • Support NMEA 0183 data protocol
  • Built-in SuperCap to reserve system data for rapid satellite acquisition (This isnít explained anywhere else in the datasheet.)
  • Built-in patch antenna
  • LED indicator for GPS fix or not fix

General

Chipset
SiRF Star!
Channels
20 channel all-in-view tracking. This allows the unit to acquire data from up to 20 satellites, which should be enough redundancy for city and indoor use (unverified).
Sensitivity
-159 dBm

Accuracy

Position
10 meters, 2D RMS, 5 meters, 2D RMS, WAAS enabled
Velocity
0.1 m/s
Time
1us synchronized to GPS time

Datum

Default
WGS-84

Acquisition Time

Reacquisition
0.1 sec., average
Hot start
1 sec., average
Warm start
38 sec., average
Cold start
42 sec., average

Power

Main power input
4.5V ~ 6.5V DC input
Power consumption
44mA

Protocol

Electrical level
TTL level, Output voltage level: 0V ~ 2.85V RS-232 level
Baud rate
4,800 bps
Output message
NMEA 0183 GGA, GSA, GSV, RMC, VTG, GLL

Physical Characteristics

Dimension
30mm*30mm*10.5mm "0.2mm (pretty freakin' small)

Theory of usage

From Wikipedia: Utilizing a constellation of at least 24 Medium Earth Orbit satellites that transmit precise microwave signals, the system enables a GPS receiver to determine its location, speed, direction, and time.

It is not necessary to understand the exact nature of these signals in order to use a GPS receiver. Like nearly all GPS receiver modules, the EM-406A decodes these signals, determines its position, and provides the developer with a means of acquiring this data.

Protocol

The EM-406A supports the NMEA 0183 protocol for GPS data over an RS-232 serial connection, making it easy to interface with a microcontroller. A typical command looks like this: $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18 This is an output command from the EM-406A. All commands start with a $, then the command itself, followed by any parameter data. All of the supported commands and the data fields are described in the data sheet. This command translates to:

NameExampleUnitsDescription
Message ID$GPGGAGGAprotocol header
UTC Time161229.487 hhmmss.sss
Latitude3723.2475 ddmm.mmmm
N/S IndicatorN N=north or S=south
Longitude12158.3416 dddmm.mmmm
E/W IndicatorW E=east or W=west
Position Fix Indicator1 See Table B-3
Satellites Used07 Range 0 to 12
HDOP1.0 Horizontal Dilution of Precision
MSL Altitude19.0 meters  
UnitsM meters
Geoid Separation1  meters
UnitsM meters
Age of Diff. Corr. secondNull fields when DGPS is not used
Diff. Ref. Station ID0000  
Checksum*18  
<CR><LF>  End of message termination

Pin Assignment

Another datasheet from Futurlec


(:source lang=arduino:)

Code example

This example was taken from an Arduino forum discussing the EM-406. The original post can be found here: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1166042147/

//Created August 15 2006 //Heather Dewey-Hagborg //http://www.arduino.cc //reworked to GPS reader //Dirk, december 2006

  1. include <ctype.h>
  2. include <string.h>
  3. define bit9600Delay 84
  4. define halfBit9600Delay 42
  5. define bit4800Delay 188
  6. define halfBit4800Delay 94

byte rx = 6; byte tx = 7; byte SWval; char dataformat[7] = "$GPRMC"; char messageline[80] = ""; int i= 0;

void setup() {

  pinMode(rx,INPUT);
  pinMode(tx,OUTPUT);
  digitalWrite(tx,HIGH);
  digitalWrite(13,HIGH); //turn on debugging LED
  SWprint('h');  //debugging hello
  SWprint('i');
  SWprint(10); //carriage return
  Serial.begin(9600);

}

void SWprint(int data) {

  byte mask;
  //startbit
  digitalWrite(tx,LOW);
  delayMicroseconds(bit4800Delay);
  for (mask = 0x01; mask>0; mask <<= 1) {
    if (data & mask){ // choose bit
	digitalWrite(tx,HIGH); // send 1
    }
    else{
	digitalWrite(tx,LOW); // send 0
    }
    delayMicroseconds(bit4800Delay);
  }
  //stop bit
  digitalWrite(tx, HIGH);
  delayMicroseconds(bit4800Delay);

}

char SWread() {

  byte val = 0;
  while (digitalRead(rx));
  //wait for start bit
  if (digitalRead(rx) == LOW) {
    delayMicroseconds(halfBit4800Delay);
    for (int offset = 0; offset < 8; offset++) {
	delayMicroseconds(bit4800Delay);
	val |= digitalRead(rx) << offset;
    }
    //wait for stop bit + extra
    delayMicroseconds(bit4800Delay);
    delayMicroseconds(bit4800Delay);
    return val;
  }

} void char2string() {

  i = 0;
  messageline[0] = SWread();
  if (messageline[0] == 36) //string starts with $
  {
    i++;
    messageline[i] = SWread();
    while(messageline[i] != 13 & i<80) //carriage return or max size
    {
	i++;
	messageline[i] = SWread();
    }
    messageline[i+1] = 0; //make end to string
  }

} void loop() {

  digitalWrite(13,HIGH);
 //only print string with the right dataformat
  char2string();
  if (strncmp(messageline, dataformat, 6) == 0 & i>4)
  {
    for (int i=0;i<strlen(messageline);i++)
    {
	Serial.print(messageline[i], BYTE);
    }
  }

  //Serial.print(SWread(),BYTE); //use this to get all GPS output, comment out from char2string till here

}

(: sourceend :)


The EM-406A also supports WAAS, which is a secondary network of satellites and ground stations used to provide higher resolution positioning data. This network was created by the U.S. FAA and DOT.