Go Down

Topic: TinyGPS and hardware serial? (Read 22326 times) previous topic - next topic

RudiAhlers


There is another issue it can take up to 10 minutes depending on location, GPS doesn't work indoors as well as outside with a clear view of the sky. It can take as much as 10 minutes to update the ephemeris in the GPS receiver so seeing no data usually means not enough data yet for a position fix . I use GPS receivers for time standards in several of my projects along with the Time Library... The TimeGPS sketch doesn't work though. I had a friend re-write it so that it works
Mikal Harts TinyGPS12 has a sketch called test_with_gps_device.pde and I've attached it. I didn't make the changes for a Mega's serial ports however. It is really trivial. The sketch works well and was a big part of the re-written TimeGPS sketch. I know the sketch works, I've used it many times in learning about GPS receivers. I also added a windows program that will display GPS data from a GPS receiver connected to a computer via an USB to TTL serial adapter.
The U-Center software is available as a free download from the U-Blox website and it's data display is really interesting. Also to give you an idea of how well your device is working.

Doc


I ran the attached sketch, modified to use Pins 10 & 11 (with Softserial) for about 40 minutes now and still don't get any GPS data on the Serial Monitor.
The "Fix" LED blinks very slowly, which means it has a fix (according to the documentation).

This is the output on the Serial Monitor:

Quote

**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   90138 0         3003     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   90197 0         3091     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   90255 0         3179     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   90313 0         3255     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   90372 0         3325     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   90430 0         3401     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   90489 0         3494     


PaulS

Quote
I ran the attached sketch, modified to use Pins 10 & 11 (with Softserial) for about 40 minutes now and still don't get any GPS data on the Serial Monitor.

Post a picture of how the GPS IS connected.

Stop using SoftwareSerial when you have 4 hardware serial ports on the Mega.
The art of getting good answers lies in asking good questions.

Docedison

#17
Jun 28, 2013, 02:02 pm Last Edit: Jun 29, 2013, 05:35 am by Docedison Reason: 1
SoftwareSerial was also a cause for consternation in my project as well as it Will drop or mangle a character once in a while. When I switched to a Mega most problems went away. Is it possible that you have RX connected to RX and TX connected to...? That will also give you the results you report. GPS_RX must connect to Mega_TX and GPS_TX must connect to Mega_RX. Where Mega_RX is serial1,2,3 same for TX.
There is a serial0 but that is also the data connection to the usb converter and as such restricted to talking to the serial monitor or programming via the bootloader.
If you need it I can modify the two or three places where serial is mentioned in the sketch I did and enclosed it. It's untested both my Mega's are busy but the changes are just to assign serial data to a specific hardware port instead of an object.
One last thing, Verify both GPS connections and speed. The Ucenter thing comes with instructions, You can get them from the U-Blox webpage.

Doc
--> WA7EMS <--
"The solution of every problem is another problem." -Johann Wolfgang von Goethe
I do answer technical questions PM'd to me with whatever is in my clipboard

RudiAhlers


Quote
I ran the attached sketch, modified to use Pins 10 & 11 (with Softserial) for about 40 minutes now and still don't get any GPS data on the Serial Monitor.

Post a picture of how the GPS IS connected.

Stop using SoftwareSerial when you have 4 hardware serial ports on the Mega.


I'm trying to simplify things to make sure the GPS is working and responding properly. Right now I have the GPS connected to a NANO, with the GPS's RX going to D3 and TX going to D2, using the following sketch:

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).
*/

TinyGPS gps;
SoftwareSerial nss(2, 3);

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(4800);

  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;
}




The output is still the same:

Quote

**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4374  0         715     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4455  0         728     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4536  0         741     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4617  0         753     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4698  0         767     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4779  0         781     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4860  0         795     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   4941  0         810     
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   5022  0         825     



Swapping the RX & TX pins around doesn't help either.

PaulS

Quote
I'm trying to simplify things to make sure the GPS is working and responding properly. Right now I have the GPS connected to a NANO, with the GPS's RX going to D3 and TX going to D2, using the following sketch:

Possibly a dumb question, but you also connected ground, right?
The art of getting good answers lies in asking good questions.

RudiAhlers


Quote
I'm trying to simplify things to make sure the GPS is working and responding properly. Right now I have the GPS connected to a NANO, with the GPS's RX going to D3 and TX going to D2, using the following sketch:

Possibly a dumb question, but you also connected ground, right?


Yes, it's grounded.

The NANO is in a breaboard and "share" the side power rails with the GPS. i.e. there's a black cable coming from GND on the GPS to the blue line in the breadboard, and a jumper to the nano's GND pin. A red wire is connected from the GPS's VIN pin to the red line in the breadboard, and a jumper to the NANO's 5V pin.
Then I have a black wire coming from the GPS's RX pin, into the NANO's D3 pin, and a green wire from the GPS's TX pin to the Nano's D2 pin

Sembazuru

Another dumb question, you have verified that your sketches are using the correct baud rate for how your GPS module is configured?
http://www.catb.org/jargon/html/I/I-didn-t-change-anything-.html

RudiAhlers


Another dumb question, you have verified that your sketches are using the correct baud rate for how your GPS module is configured?


Thanx, this solved the puzzle!
I honestly didn't look into that, since most examples use 115200. This GPS's baud rate is 9600 (took some google searching to find it). And it's working fine now, thank you :)

akku_123

hai
  I am using arduino mega.. I downloaded and paste the tinygps library in arduino library folder.but when programming the tinygps header file is not highlighted...is there any way...??

PaulS

Quote
is there any way
The syntax color means nothing. It is what the compiler says that matters.
The art of getting good answers lies in asking good questions.

akku_123

thanq for the reply

but it shows "tinygps. .there is no file or directory "like errors

PaulS

Quote
but it shows "tinygps. .there is no file or directory "like errors
We don't deal with paraphrased error messages. They are text. Text can be copied and pasted, really easily.

It sounds, though, like you have not downloaded and properly installed the TinyGPS (or TinyGPS++) library.
The art of getting good answers lies in asking good questions.

akku_123

thanq for ur reply..
  After i reinstalled the library its shows an error that"no known conversion for arguments 1 from  <unresolved overloaded function type > to char..

ramstvl

Thanx, this solved the puzzle!
I honestly didn't look into that, since most examples use 115200. This GPS's baud rate is 9600 (took some google searching to find it). And it's working fine now, thank you :)
Hi i have similar issue of what you encountered, so far there is no luck in resolving.

I'm using a GPS Module Sklab skg13bl + Arduino Uno board

skg13bl has a TTL pins i'm using those to get the TX and RX and connected to D2 & D3 of Arduino uno also the 3rd pin on GND is connected to Arudino GND.

i could see the gps receiver receiving signals, green lights starts blinking after the gps fix.


but i get the same data,

Quote
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   74253 0         16      
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   74645 0         16      
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   74922 0         16      
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   75147 0         16      
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   75542 0         16      
**** **** *******  *******   **** *******    *******    **** ******* ****** ***** ***   0        0.00   ***   75822 0         16      



PaulS

thanq for ur reply..
  After i reinstalled the library its shows an error that"no known conversion for arguments 1 from  <unresolved overloaded function type > to char..
It shows the line number in the code that you didn't post that generated the error, too.

Show ALL of your code and ALL of the error message(s).
The art of getting good answers lies in asking good questions.

Go Up