UNO Sketch for GPS does not run on Nano V3

hello Experts,

I triy to get an Sketch running on a NANO V3 (Clone) which runs perfect on UNO R3

This is a example scetch for reading GPS Data

GPS is working and delivering the right data has been verified with an other tool and shows the same results like running on the UNO.

running the same sketch on Nano deliveres no data
I used the same wiring and pins and changed the TX/RX Pins (Sketch and Hardware) already without success… changing baudrate(s) didnt help either…

I there anything different in SoftwareSerial behaviour on Nano compared to UNO ?
I also tried to run different Examples with the same result… UNO Works - Nano not :frowning:

Alos tried to “Google” any infos but after 2 Days searching and try & error I’m exhausted and like to ask the Forum here.

Thanks

This is the example Sketch:

This is the example Sketch:

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you
   GPS device hooked up on pins 5(rx) and 4(tx).
*/

#include <SoftwareSerial.h>
#include <TinyGPS.h>



TinyGPS gps;
SoftwareSerial ss(5, 4);

static void smartdelay(unsigned long ms);
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(9600);
 
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  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("-------------------------------------------------------------------------------------------------------------------------------------");

  ss.begin(9600);
}

void loop()
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const double 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, 10, 6);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  print_date(gps);
  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 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 ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), 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();
 
  smartdelay(1000);
}

static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void print_float(float val, float invalid, int len, int prec)
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartdelay(0);
}

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 = ' ';
  if (len > 0)
    sz[len-1] = ' ';
  Serial.print(sz);
  smartdelay(0);
}

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);
  smartdelay(0);
}

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 : ' ');
  smartdelay(0);
}

Read the how to use the forum stickey.

Did you tell the IDE that you are using a NANO?

Same 328P chip either way.
You could try rebootloading your Nano as an Uno.

123Splat:
Read the how to use the forum stickey.

Did you tell the IDE that you are using a NANO?

yes ...

CrossRoads:
Same 328P chip either way.
You could try rebootloading your Nano as an Uno.

Thanks will be worth a try...

Gerhard

Not sure how you're powering the Nano/GPS setup.

A Nano has a simple schottky backflow protection diode between USB socket and the 5volt pin.
Not a mosfet switch, like the Uno.
That results in ~4.6volt on the 5volt pin if you're powering the Nano from USB.
That changes things like I/O switch levels and Aref.

Another difference is the 3.3volt pin.
An Uno/Mega can provide ~150mA, while a Nano clone tops at ~20mA.
Leo..

PrCtrl:
yes …

No, you did not read the forum stickies :wink: If you had, we would not be looking at code in italic. Please use code tags when posting code on the forum.

Hi,
Welcome to the forum.

Please read the first post in any forum entitled how to use this forum.
http://forum.arduino.cc/index.php/topic,148850.0.html then look down to item #7 about how to post your code.
It will be formatted in a scrolling window that makes it easier to read.

Can you please post a copy of your circuit, in CAD or a picture of a hand drawn circuit in jpg, png?

Tom... :slight_smile:

Hello,

thank you for your responses - I made a “fly over” to the forum usage and changed my initial post :slight_smile:

Meanwhile I solved the “symptom” by using an other (similar) GPS Module.

I also used a extrenal power supply and USB - there is no difference - one is working with NANO and the other not…

The only thing I know is, that the receiving “GPS Sentence string” of the “not working device” looks totally different on the NANO than on the UNO…

BTW, I tried it on a “pro Micro” and it is the same than on NANO …

So I dont have a clue about the “root cause”

unfortunately I dont have the time to deep dive into this issue and find the reason why a 8 Euro device is not working.

I attached a photo of both GPS Modules.
The left one is working on NANO and UNO
The right one is working on UNO only

May help others somehow…

thanks and
best regards
Gerhard