Go Down

Topic: Ublox Neo 6m Probleme beim Daten auslesen (Read 517 times) previous topic - next topic

Pram

Feb 08, 2014, 01:00 pm Last Edit: Feb 08, 2014, 01:07 pm by Pram Reason: 1
Hallo Forum
Ich habe endlich mein lang ersehntes GPS Modul bekommen und wollte es gleich mal mit meinem Arduino Mega 2560 ausprobieren. Hier der link http://www.ebay.de/itm/310795438689?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Ich habe zum auslesen der Daten zwei Codes benutzt einmal einen selbst geschriebenen und einmal einen von tiny GPS.
Wenn ich den selbstgeschriebenen Code benutze bekomme ich Daten, aber wenn ich den Code von tiny GPS nutze bekomm ich keine Daten sondern nur das (siehe Foto)

Weiß da jemand den Fehler oder hat da jemand einen besseren Code?
Danke schon mal :)



Selbstgeschrieben
Code: [Select]
void setup()
{
   Serial.begin(9600);
   Serial1.begin(9600);
}

void loop()
{
   while ( Serial1.available() > 0 )
   {
        char ch = Serial1.read() ;
        Serial.print(ch );
   }
}


Tiny GPS
Code: [Select]


#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
  9600-baud serial GPS device hooked up on pins 19(rx) and 18(tx).
*/

TinyGPS gps;


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(115200);
 
 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("-------------------------------------------------------------------------------------------------------------------------------------");

 Serial1.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 (Serial1.available())
     gps.encode(Serial1.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[i] = ' ';
 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[i] : ' ');
 smartdelay(0);
}

Pram

Außerdem was mir gerade aufgefallen ist, ist das die LED auf dem GPS gar nicht leuchtet oder blinkt.
Ist das normal ?

jurs


Außerdem was mir gerade aufgefallen ist, ist das die LED auf dem GPS gar nicht leuchtet oder blinkt.
Ist das normal ?


Was "normal" oder "nicht normal" ist, ist ganz spezifisch für jede Hardware. Der auf der Platine verlötete GPS-Chip sagt nicht unbedingt etwas darüber aus, wann die LED auf der Platine leuchtet, auf die der Chip aufgelötet ist. Das kommt auf die konkrete Schaltung und die Firmware an, wenn eine LED an oder aus geht.

Bei handelsüblichen GPS-Modulen ist es oft zum Beispiel so:
- GPS-Modul sendet immer Daten, wenn es mit Strom versorgt wird
- LED am GPS-Modul blinkt aber nur dann, wenn auch ein GPS-Fixing mit gültigen GPS-Geodaten vorliegt

Anhand der Ausgabe von TinyGPS kannst Du nicht unterscheiden, ob ein GPS-Modul "keine Daten" oder "keine gültigen Geo-Koordinaten" empfängt, sondern nur leere Platzhalter-Datensätze.

Damit das GPS-Modul Empfang bekommt, mußt Du es unter freiem Himmel oder innerhalb von Räumen wenigstens "in Fensternähe" betreiben.

Das Prinzip ist dasselbe wie beim Empfang von Satelliten-Fernsehen: Zum Empfangen eines Signals muß eine freie Sichtverbindung zwischen Satellitenantenne und Satellit bestehen.

uwefed


sth77


Welches GPS Modul hast Du?

Ich tippe auf ein U-Blox Neo-6M. Steht ja so im Threadtitel...
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Pram

#5
Feb 08, 2014, 10:49 pm Last Edit: Feb 08, 2014, 10:58 pm by Pram Reason: 1
Außerdem habe ich auch den Link gepostet, aber das ist jetzt auch egal, weil ich es zum laufen bekommen habe.
Wie jurs schon gesagt hat
Damit das GPS-Modul Empfang bekommt, mußt Du es unter freiem Himmel oder innerhalb von Räumen wenigstens "in Fensternähe" betreiben.
, was ich nicht getan habe aus eigener Dummheit. Bin aber zum Glück selbst darauf gekommen es mal am Fenster auszuprobieren und siehe da ich bekomme die ersehnten Daten. Dazu blinkt auch die LED. :)
Aber Danke für eure Hilfe.

Go Up