Go Down

Topic: GPS Shield Module Board V2.1 EB-5365 SD (Read 3799 times) previous topic - next topic

trljb

Mar 18, 2013, 12:48 pm Last Edit: Mar 19, 2013, 02:11 am by trljb Reason: 1
I have a GPS Shield Module Board V2.1 EB-5365 SD Interface on an UNO R3. The TinyGPS library uploads fine with the shield detached. I get       avrdude: stk500_getsync(): not in sync: resp=0x2a     when uploading with the shield attached. The serial monoitor puts out a bunch of giberish. I have no documentation on this shield.

I removed the two jumpers from the shield which permitted good uploads without the 'avrdue' message. I have had it outside but cannot get useful data. Same gibberish.

strykeroz

Hi,

Without knowing the specific shield it's going to be hard to debug.  What you're describing though is typical of a shield that uses the digital pins 0 & 1 for communication with the Arduino.  That's perfectly good, valid, and commonly done, but those pins are needed for communication with your PC for programming.

If this is the case, removing the jumpers allowed you to program the Arduino but you'll need to put them back to use the shield after the Arduino is programmed.  Or, just leave the jumpers in place but take the shield off the Arduino when you want to program it.

Cheers ! Geoff
"There is no problem so bad you can't make it worse" - retired astronaut Chris Hadfield

trljb

After three requests I received a pdf file with the specifications on this shield. I had to change the Tiny GPS sketch to 9600 baud and move the jumpers to 3 rx, 4 tx and it worked perfectly and quickly. I would like to have the header remain at the topof the screen and have the coordinates feed in and scroll down. Suggestions?

strykeroz

What screen are you using to display this info?
"There is no problem so bad you can't make it worse" - retired astronaut Chris Hadfield

trljb


strykeroz

Please post your sketch here in code tags
"There is no problem so bad you can't make it worse" - retired astronaut Chris Hadfield

trljb

This is my code. I would like to keep the void loop at the top of the screen in serial monitor and have the coordinates feed in below.
Code: [Select]
#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 3(rx) and 4(tx).
   
   I am using GPS shield module board V2.1 EB-5365 with SD interface
   using 9600-baud.
*/

TinyGPS gps;
SoftwareSerial nss(3, 4);

static void gpsdump(TinyGPS &gps);
static bool feedgps();
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
  Serial.begin(115200);
  nss.begin(9600);
 
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
  Serial.println();
  Serial.println("Sats HDOP Latitude Longitude Fix  Date       Time       Date Alt     Course Speed Card  Distance Course Card  Chars Sentences Checksum");
  Serial.println("          (deg)    (deg)     Age                        Age  (m)     --- from GPS ----  ---- to London  ----  RX    RX        Fail");
  Serial.println("--------------------------------------------------------------------------------------------------------------------------------------");
}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();
 
  // Every second we print an update
  while (millis() - start < 1000)
  {
    if (feedgps())
      newdata = true;
  }
 
  gpsdump(gps);
}

static void gpsdump(TinyGPS &gps)
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const float LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
 
  print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
  print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
  gps.f_get_position(&flat, &flon, &age);
  print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

  print_date(gps);

  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);
  print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
  print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
  print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

  gps.stats(&chars, &sentences, &failed);
  print_int(chars, 0xFFFFFFFF, 6);
  print_int(sentences, 0xFFFFFFFF, 10);
  print_int(failed, 0xFFFFFFFF, 9);
  Serial.println();
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
  char sz[32];
  if (val == invalid)
    strcpy(sz, "*******");
  else
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0)
    sz[len-1] = ' ';
  Serial.print(sz);
  feedgps();
}

static void print_float(float val, float invalid, int len, int prec)
{
  char sz[32];
  if (val == invalid)
  {
    strcpy(sz, "*******");
    sz[len] = 0;
        if (len > 0)
          sz[len-1] = ' ';
    for (int i=7; i<len; ++i)
        sz[i] = ' ';
    Serial.print(sz);
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1);
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(" ");
  }
  feedgps();
}

static void print_date(TinyGPS &gps)
{
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned long age;
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  if (age == TinyGPS::GPS_INVALID_AGE)
    Serial.print("*******    *******    ");
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d   ",
        month, day, year, hour, minute, second);
    Serial.print(sz);
  }
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  feedgps();
}

static void print_str(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  feedgps();
}

static bool feedgps()
{
  while (nss.available())
  {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}

strykeroz

Hi

If you mean that you'll be using the Serial monitor (as it appears your code does) then this is not possible.  Serial is a simple stream of data with no ability to relocate the cursor to specific locations on the display to overwrite just the headers, nor to freeze a portion for headings.

Since you already have a PC connected to your Arduino it will be possible to do this with a process running on that PC using the stream of data as it comes down the Serial (ie USB) line.  If you don't have a favourite PC programming environment, Processing is likely as good a place as any to start.  It's the language that inspired the Arduino environment so it should be halfway familiar.  There's a stack of helpful information at http://processing.org/ too.

All the best, Geoff
"There is no problem so bad you can't make it worse" - retired astronaut Chris Hadfield

rholt

trljb,
i know this is an old post - but if you're still around i would really appreciate any tech specs on the GPS EB-5365 you may have.
i've been looking on & off for a day now - didn't think it would be that difficult!
thanks in advance...

Russ in Coral Springs, Fl
Russ from Coral Springs, Fl, USA

Go Up