GPS-Modul liefert keine Daten

Hallo,

habe mir zum rumtesten ein GPS-Modul bestellt (dieses hier). Dann natürlich die TinyGPSplus-Lib installiert und die Beispiele ausprobiert. Doch es funktioniert nichts. Angeschlossen ist das Modul richtig an der Soft-Serial. Bekomme auch keine Fehlermeldung, dass das Modul nicht gefunden wird. Kann ich also als Fehler ausschliessen. Doch Daten kommen keine :frowning:

DeviceExample: Immer die Meldung "INVALID INVALID"
FullExample: Viele viele Zeilen mit Sternchen

Empfang denke ich mal sollte das Modul haben, ca. 1-2 Minuten nach Start beginnt es nämlich auch im Sekundentakt zu blinken. Wenn ich einfach die Daten der Softserial auf die "richtige" umleite und mir diese Daten im Serialmonitor anschaue, ist das nur reiner Datenmüll. Sieht aus als ob die Baudrate falsch eingestellt wäre, was sie aber definitiv nicht ist und ich auch zur Sicherheit nochmal mit allen durchprobiert habe...

Die Software u-center erkennt das Modul auch nicht (auch hier bei Daten-Weiterleitung über den Arduino auf die USB-Serial...

Kennt jemand diesen Fehler? Habe ich was übersehen? Ist das Modul kaputt? Würde mich über Eure Hilfe freuen!

Gruss Daniel

DanielHD80:
Habe ich was übersehen? Ist das Modul kaputt?

Da die Module vor der Auslieferung üblicherweise einer Endkontrolle mit Funktionstest unterzogen werden, dürfte das Modul zumindest bei der Auslieferung noch nicht defekt gewesen sein.

Aber unter den Arduino-Bastlern gibt es echt gnadenlose Kurzschlußjäger, die alles um die Ecke biegen.

Der letzte, der hier im Forum mit Null Ahnung wegen eines möglicherweise defekten GPS-Moduls nachgefragt hatte, hatte zwei Fehler gemacht:

  1. Er hatte im Arduino-Sketch 4800 Baud als Baudrate eingestellt, weil das Beispielprogramm zur TinyGPS Library mit 4800 Baud im Quelltext ausgeliefert wird, aber sein Modul sendete tatsächlich mit 9600 Baud.

  2. Er hatte TX vom GPS-Modul mit TX vom Arduino verbunden, sowie RX vom GPS-Modul mit RX vom Arduino. Anstatt die Sende- und Empfangsleitungen über Kreuz zu verbinden, also TX an RX und RX an TX.

Nachdem er beide Fehler, also den Fehler in seinem Software-Sketch und den Fehler bei der Verkabelung des Moduls beseitigt hatte, lief es dann auch gleich.

Was Du möglicherweise für Fehler gemacht hast, keine Ahnung.
Vielleicht ja sogar dieselben beiden Fehler wie der letzte Fragesteller?

jurs:
Was Du möglicherweise für Fehler gemacht hast, keine Ahnung.
Vielleicht ja sogar dieselben beiden Fehler wie der letzte Fragesteller?

Hoffen wir nur an einen der aufgezeigten. Ansonsten bitte Beispielsketch, genaue Verdratung und Foto.
Grüße Uwe

jurs:

  1. Er hatte im Arduino-Sketch 4800 Baud als Baudrate eingestellt, weil das Beispielprogramm zur TinyGPS Library mit 4800 Baud im Quelltext ausgeliefert wird, aber sein Modul sendete tatsächlich mit 9600 Baud.

Ich danke Euch! Ich bin sooooooooooooooooooo doof... Alles tausend mal überprüft. Aber für mich war 100% klar, dass GPS-Module immer mit 4800 Baud senden. Jetzt weiss ich es besser... :slight_smile:

Hallo Uwe,
ich habe auch alles überprüft, auch die Baud Rate stimmt mit 9600.
Ich bekomme zwar gültiges available, aber das encoden klappt nicht. :stuck_out_tongue_closed_eyes:
Kannst du bitte den Code mal posten den du verwendest. Ich benutze das gleiche Modul wie du.
Danke im vorab, Gruß Reiner

Hallo,

bei mir hat dieser Code funktioniert.

/*
This Sketch will run with the SkyNav SKM53 GPS if.....
 RXD Arduino Pin 3
 TXD Arduino Pin 2
 RST Leave Open ? (Connect to a N/O momentary switch pulled low to reset?)
 NC Leave Open
 GND Ground
 VCC +5
 This is not a great program but it will tell you where you are in the world.
 Make sure you download and save to your Arduino/Libraries folder TinyGPS.h
 and SoftwareSerial.h files.
*/
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>

LiquidCrystal_I2C lcd(0x20,16,2);

unsigned long fix_age;

SoftwareSerial GPS(2,3);
TinyGPS gps;
void gpsdump(TinyGPS &gps);
bool feedgps();
void getGPS();
long lat, lon;
float LAT, LON;

void setup(){
  GPS.begin(9600);
  Serial.begin(9600);
  lcd.init();                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.backlight();
}

void loop(){
  long lat, lon;
  unsigned long fix_age, time, date, speed, course;
  unsigned long chars;
  unsigned short sentences, failed_checksum;

  // retrieves +/- lat/long in 100000ths of a degree
  gps.get_position(&lat, &lon, &fix_age);

  getGPS();
  lcd.setCursor(0,0);
  lcd.print("Lt: ");
  lcd.print(LAT/1000000,6);
  lcd.setCursor(0,1);
  lcd.print("Ln: ");
  lcd.print(LON/1000000,6);
  
  //Serial.print("Latitude : ");
  //Serial.print(LAT/100000,7);
  //Serial.print(" :: Longitude : ");
  //Serial.println(LON/100000,7);
  
  delay(1000);
  
}

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

bool feedgps(){
  while (GPS.available())
  {
    if (gps.encode(GPS.read()))
      return true;
  }
  return 0;
}

void gpsdump(TinyGPS &gps)
{
  //byte month, day, hour, minute, second, hundredths;
  gps.get_position(&lat, &lon);
  LAT = lat;
  LON = lon;
  {
    feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors
  }
}

Ich habe ihn mir zwar auf ein I2C LCD umgeändert, aber sonst quasi der Standard. 9600 Baud und dann bei der SoftwareSerial die 2 und die 3
Wenn das GPS Modul anfängt mit blinken, dann hat es schon mal Empfang. Dann kommt nur noch Baudrate und RX, TX vertauscht in Betracht. Einfach beide Kabel mal tauschen und am Arduino Reset drücken. Der Empfang war zwar nicht berauschend, da die Koordinaten ziemlich rumsparangen. Ich hatte mir im Netz mal eine Seite gesucht, wo man Anhand zweier Geokoordinaten die Entfernung beider Punkte ausrechnen konnte. Das waren bei mir ca. 80 Meter zwischen den Messungen. Drinnen hat er wohl nicht all zu viele Satelliten gesehen. Aber wenns blinkt, hast du schon mal gewonnen.
Werde demnächst mal ins Freie gehen und gucken, wie groß die Sprünge dort ausfallen. Warte nur noch auf die Platinen LiPo auf 5V Out vom Chinamann. Dann kann ich von den verblichenen Handys und Digicams die Lithiumakkus recyceln :wink:

Gruß Gerald

reiner_liebold:
ich habe auch alles überprüft, auch die Baud Rate stimmt mit 9600.
Ich bekomme zwar gültiges available, aber das encoden klappt nicht. :stuck_out_tongue_closed_eyes:

Ich verstehe zwar nicht genau, wo Dein Problem liegt.

Aber vermutlich verwendest Du auf einem Board mit nur einer seriellen Schnittstelle (UNO?) die "SoftwareSerial"-Library, um eine zweite serielle Schnittstelle per Software zu emulieren und über diese mit dem GPS-Modul zu kommunizieren und die USB-Serial Verbindung für ein Feedback über den seriellen Monitor zu nutzen?

Dann liegt das Problem an der SoftwareSerial-Library.

VERMEIDE die SoftwareSerial-Library zu verwenden!
Installiere Dir die AltSoftSerial-Library und verwende nur diese!

Vielen Dank für die schnellen Antworten,
inzwischen habe ich es soweit hin bekommen das ich Daten erhalte.
Mein Fehler lag in der zu kurzen Zeitspanne des Read, weil ich die Daten über ein TFT Diplay augeben will.
Ich habe einfach ein Scheleife um das read und encode gemacht, damit wird 5 Sekunden gelesen, bevor es angezeigt wird. Das klappt soweit.
Ich wundere mich nur das ich auch bei einer Ortsveränderung von ca. 1 m keine deutlichen Änderungen in den Werten erhalte.
Das muss ich morgen noch mal verifizieren.
Nur noch mal zum Verständnis, müssen denn nicht die gleichen Werte kommen, wenn ich keine Ortsveränderung vornehme?
Bei mir ändern sich die Werte ab der 5.Stelle auch wenn das Teil still liegt?
Danke schon mal, Gruß Reiner

So Punkt-genau ist GPS nicht. Rein theoretisch kannst du schon Fehler von mehreren Metern durch atmosphärische Einflüsse und die Elektronik haben.

Im zweiten Links ist bei "Overview" rechts eine Tabelle mit typischen Fehlerquellen. Die lassen sich zum Teil herausrechnen, aber eine gewissen Ungenauigkeit ist immer da.

Das GPS für jedermann gestattet bestenfalls nur 10m Auflösung. Das militärische GPS kann das auf 1 oder 10? cm genau. Der Unterschied ist nur, das die Decodierung des Signals nicht komplett offengelegt ist, so das das Militär mehr damit anstellen kann. Außerdem kann der zivile Teil auch komplett abgeschaltet werden (für Kriesenfälle). Außerdem wird ein Jitter über das Signal gelegt. Da sind die Sprünge. Außerdem schwankt die Genauigkeit, wieviel Sateliten gerade empfangbar sind.

Gruß Gerald

Wurde der Jitter nicht vor einigen Jahren abgeschaltet und so die Genaugikeit von 100m auf 10m erhöht.

Durch Versuche mit meinem GPS Recorder (Holux M241) bei ungünstigen Bedingungen (vergessen im Haus abzuschalten) erhält man eine Punktewolke die leicht 100m Durchmesser hat. Dann im freien Feld liegt man normalerweise laut Googel Earth 1 bis 2m neben dem Weg. Städte und feuchtes Laub oder Innenräume erhöhen stark den Positionsfehler.

Grüße Uwe

reiner_liebold:
Nur noch mal zum Verständnis, müssen denn nicht die gleichen Werte kommen, wenn ich keine Ortsveränderung vornehme?
Bei mir ändern sich die Werte ab der 5.Stelle auch wenn das Teil still liegt?

Was für "Werte"?

Der Wert für die Uhrzeit ändert sich einmal pro Sekunde.
Der Wert für das Datum ändert sich einmal pro Tag.
Der Wert für den geographischen Längen- und Breitengrad ändert sich je nach Ortsveränderung und Empfangsbedingungen. Bei schlechten Empfangsbedingungen ist der Fehlerkreis größer. Und 1 Meter, ja das könnte eine Änderung in der fünften Stelle sein.

Hallo und guten Abend,
entschuldigt das ich mich erst so spät melde, hatte zu viel anderes Zeug um die Ohren, außerdem muss ich mal meine eMail Benachrichigung aktivieren :wink:
So aber nun zu den Nachfragen, ich meine natürlich den Breiten- und Längengrad.
Der ändert sich in der 5. Stelle auch wenn ich das Teil still liegen lasse.
Aber ich habe schon aus euren Beiträgen gelesen, das es wohl normal ist. Ich werde das mal Aufzeichen. Der Hintergrund ist, eigentlich habe ich ein Projekt vor das meine Garagentore abhängig von der GPS Position meines Fahrzeugs öffnen und schließen sollen. Wenn aber die Präzision nur einige 10 Meter beträgt, dann klappt mein Vorhaben so wohl nicht. Ich darf mich dann auch nicht zu weit mit dem Fahrzeug entfernen, weil ich per 433Mhz meine Tore steuern will.
Nun ja, da muss ich wohl noch ein wenig forschen.
Danke bis dahin und ein schönes WE euch. Gruß Reiner