Problem bei GPS Shield

Hallo , habe heute mein GPS Shield bekommen :
DT STUDIO GPS Shield Ver: 3.1

Datenblatt des Vorgängermodels :
http://imall.iteadstudio.com/im120417017.html

Habe mir folgende Bibliotheken runtergelanden und installiert :
TinyGPS & SoftwareSerial

So mein Problem jetzt ist wenn ich versuche das Shield in Betrieb zu nehmen nach diesem Script :

#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 4(rx) and 3(tx).
*/

TinyGPS gps;
SoftwareSerial ss(4, 3);

void setup()
{
  Serial.begin(115200);
  ss.begin(38400);
  
  Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
  
  gps.stats(&chars, &sentences, &failed);
  Serial.print(" CHARS=");
  Serial.print(chars);
  Serial.print(" SENTENCES=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
}

Bekomme ich als einzige Ausgabe, eine Folge Kryptischer Zeichen(ketten).

Bitte um Hilfe , danke =)

dikkaatze:
Bekomme ich als einzige Ausgabe, eine Folge Kryptischer Zeichen(ketten).

Vermeide die SoftwareSerial-Library!

Wenn Du ein Arduino-Board mit mehr als einer seriellen Schnittstellen hast (z.B. "MEGA"), verwende für das GPS-Modul auch eine HardwareSerial-Schnittstelle!

Und wenn Du ein Arduino-Board mit nur einer einzigen seriellen Schnittstelle hast (z.B, "UNO"), dann verwende die AltSoftSerial-Library!

Danke für den Tipp ... werde mal versuchen den Quellcode daraufhin anzupassen ...

Ja ich benutze das UNO.

dikkaatze:
Danke für den Tipp … werde mal versuchen den Quellcode daraufhin anzupassen …

Ja ich benutze das UNO.

Quellcode für UNO anbei, um schnell mal die Rohdaten zu checken, die das Modul sendet.
Du mußt ggf. nur die Baudrate Deines GPS-Moduls anpassen.
Und im seriellen Monitor die richtige Baudrate einstellen.
Und beachten, dass AltSoftSerial am UNO unbedingt an D8 empfangen möchte.

// GPS module test sketch for Arduino UNO
#include <AltSoftSerial.h>

// Connect module to Arduino: GPS-TX to Arduino-RX-Pin-8
AltSoftSerial gpsSerial(8, -1); // RX, TX (-1 = not used)

void setup(){
  Serial.begin(115200);   // Serial Monitor Arduino (HardwareSerial)
  gpsSerial.begin(9600);  // Serial GPS Module (AltSoftSerial)
  Serial.println("Good night and good luck!");
}

void loop(){
  while(gpsSerial.available())
    Serial.write(gpsSerial.read());
}

Meine Arduino Pins gehen nur bis 7 ?

dikkaatze:
Meine Arduino Pins gehen nur bis 7 ?

???
Schriebst Du oben nicht UNO?
Ein UNO sieht so aus: http://arduino.cc/de/Main/ArduinoBoardUno
Das ist ein "R3" Board, aber die anderen UNOs sind ungefähr genau so.

Obere Reihe rechts ist RX-0, links daneben TX-1, links daneben 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
Wieso hat Dein Board keinen Pin-8?

Ja Sorry - ich kann auf meinem GPS Shield nur die pins 0-7 entweder für Ts oder Rx Jumpern. :blush:

dikkaatze:
Ja Sorry - ich kann auf meinem GPS Shield nur die pins 0-7 entweder für Ts oder Rx Jumpern. :blush:

Ja mei, dann eben den TX-Jumper weglassen und ein Kabel direkt von GPS-TX nach Pin-8 zum Arduino-Board ziehen.

Das Shield ist Mist, wenn GPS-TX nicht auf D8 als RX für AltSoftSerial am UNO gejumpert werden kann.
Da hättest Du lieber gleich ein einfacheres "GPS-Modul" statt ein "GPS-Shield" gekauft.

AltSoftSerial ist wirklich um Längen besser als SoftwareSerial, aber bei AltSoftSerial kannst Du Dir nicht den Pin frei aussuchen, mit dem die Library arbeiten soll.

Rohdaten kommen an ... danke .. =)

dikkaatze:
Rohdaten kommen an … danke … =)

Na bravo!
Den TinyGPS-Sketch anzupassen sollte dann leicht sein, ich glaube, Du brauchst nur zwei Zeilen ändern

// #include <SoftwareSerial.h>
#include <AltSoftSerial.h>
und
// SoftwareSerial ss(4, 3);
AltSoftSerial ss(8, -1);

So … soweit läuft jetzt alles gut … nur stehe ich jetzt vor einem neuen Problem … wenn ich versuche die Daten auf eine SD Karte zu loggen … Ich denke mal das liegt am AltSoftSerial … wenn die die Bibliothek SD:h einbinde loopt sich das Setup permanent … wenn ich dann AltSoftSerial.h auskommentiere läuft es … nur dann halt ohne gps daten -.-

Schick uns mal den nichtfunktionierenden Sketch.
Ich tippe auf einen Indexüberlauf eines Arrays.
Grüße Uwe

dikkaatze:
So ... soweit läuft jetzt alles gut ... nur stehe ich jetzt vor einem neuen Problem ... wenn ich versuche die Daten auf eine SD Karte zu loggen ... Ich denke mal das liegt am AltSoftSerial ... wenn die die Bibliothek SD:h einbinde loopt sich das Setup permanent ... wenn ich dann AltSoftSerial.h auskommentiere läuft es ... nur dann halt ohne gps daten -.-

Sowohl die SD-Library als auch TinyGPS sind echte RAM-Speicherfresser-Libraries.
Und ein UNO hat aber nur 2048 Bytes RAM "für alles".

Auch die AltSoftSerial-Library braucht RAM-Speicher, denn die legt genau so einen Serial-Lesepuffer von 64 Bytes und einen Serial-Schreibpuffer von 64 Bytes an wie es die HardwareSerial auch macht.

Um mit TinyGPS und der SD-Library Daten auf SD zu loggen, wirst Du extrem speichersparend programmieren müssen und darfst nicht zu viele Bytes an RAM-Speicher extra verschwenden. Das ständige Resetten des Controllers im laufenden Betrieb kann darauf hindeuten, dass Dein Sketch zum einwandfreien Ablauf mehr RAM-Speicher benötigt als ein UNO eingebaut hat.

Ich würde ggf. mal diese Funktion ins Programm schreiben:

int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

Und dann irgendwo im laufenden Programm mit "Serial.println(freeRam());" die Zahl der noch freien Bytes im RAM-Speicher ausgeben lassen.

Im Prinzip mußt Du, wenn es denn gar nicht reicht, auf eine der beiden Serial-Libraries verzichten, also entweder die HardwareSerial ("Serial") oder AltSoftSerial. Denn Du müßtest für einen Logger ja nur die Daten wegspeichern, aber nicht unbedingt zusätzlich noch auf dem Seriellen Monitor ausgeben.