GPS-Mouse Navilock NL-8004P

Hallo liebe Leute,

ich bin echt am verzweifeln.
Habe das Internet und diverse Foren durchsucht, aber nicht die richtige Lösung gefunden.

Ich habe einen Controllino in dem ein Arduino Mega (ATmega2560) verbaut ist.

Daran möchte ich eine GPS-Mouse Navilock NL-8004P betreiben (verbauter Chipsatz u-blox 8 UBX-M8030-KT).

Nach vielem hin und her habe ich ein Beispiel Programm gefunden, dass mir wenigstens Daten anzeigt die empfangen werden.

#include "TinyGPS.h"
#include "TinyGPS++.h"

TinyGPSPlus gpsPlus;

TinyGPS gps;

#define GPS_TX_DIGITAL_OUT_PIN 18
#define GPS_RX_DIGITAL_OUT_PIN 19

long startMillis;
long secondsToFirstLocation = 0;

#define DEBUG

float latitude = 0.0;
float longitude = 0.0;

void setup()
{
  #ifdef DEBUG
  Serial.begin(9600);
  #endif
  
  // Serial1 is GPS
  Serial1.begin(9600);
  
  // prevent controller pins 5 and 6 from interfering with the comms from GPS
  //pinMode(GPS_TX_DIGITAL_OUT_PIN, INPUT);
  //pinMode(GPS_RX_DIGITAL_OUT_PIN, INPUT);
  
  startMillis = millis();
  Serial.println("Starting");
}

void loop()
{
  readLocation();
}

//--------------------------------------------------------------------------------------------
void readLocation(){
  bool newData = false;
  unsigned long chars = 0;
  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 (Serial1.available())
    {
      int c = Serial1.read();
      Serial.print((char)c); // if you uncomment this you will see the raw data from the GPS
      ++chars;
      if (gps.encode(c)){ // Did a new valid sentence come in?
        newData = true;
        Serial.println("gps");
      }
    }
  }
  
  if (newData)
  {
    // we have a location fix so output the lat / long and time to acquire
    if(secondsToFirstLocation == 0){
      secondsToFirstLocation = (millis() - startMillis) / 1000;
      Serial.print("Acquired in:");
      Serial.print(secondsToFirstLocation);
      Serial.println("s");
    }
    
    unsigned long age;
    gps.f_get_position(&latitude, &longitude, &age);
    
    latitude == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : latitude;
    longitude == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : longitude;
    
    Serial.print("Location: ");
    Serial.print(latitude, 6);
    Serial.print(" , ");
    Serial.print(longitude, 6);
    Serial.println("");
  }
  
  if (chars == 0){
    // if you haven't got any chars then likely a wiring issue
    Serial.println("Check wiring");
  }
  else if(secondsToFirstLocation == 0){
    // still working
  }
}

Aber es werden nur wirre Zeichen Empfangen und tinyGPS schafft es nicht einen gültigen Satz zu finden.

Starting
ÚÙÚv땧�™§Ÿ‘§Ÿ—›§§�•§Ÿ�§Ÿ‘›§��§�“§“•§›•Ÿ§—•§��§—‘§�›�§›“«‘såë·q_qYS§—§™§�•§›Ÿ§™�§Ÿ•“§›•§›�§•�§Ÿ‘Ÿ§��§›“§•�§��•§››§›‘§—�§›��§—™«‘såë·q_qYS§—§—§�•§›�§Ÿ•§�Ÿ—§§™Ÿ§Ÿ�§™•Ÿ§§™™§›—§›�•§™�«—�åë·qgqYS§™§�§Ÿ�§“�§�Ÿ§Ÿ�—§™Ÿ§“�§™�§Ÿ“Ÿ§��§‘Ÿ§›�§�›�§�‘§‘•§›�§››“§—�«“såë·qgqYS§™§›§Ÿ�§‘“§™�§›��§™›§‘‘§�›§™—•§§�—§›‘§Ÿ‘‘§›�§�•§‘›§Ÿ›Ÿ§™™«“—åë·qgqYS§™§™§Ÿ�§�“§™“§›�™§›‘«•{åë·qcqgg§•›™�£��Ÿ�™§c§Ÿ�™›

Dann habe ich das u-center installiert, mir einen Adapter gebaut und konnte damit normal arbeiten, es werden alle Daten empfangen. Wie in dem Programm, zeigt mir u-center 9600Baud und NMEA.
Jetzt kann man die GPS-Mouse noch unendlich viel einstellen, habe auch den output auf rein NMEA gestellt, aber was muss vielleicht noch eingestellt werden.
Trotzdem kein Erfolg.
Habe sogar PC und Controllino Parallel angeschlossen, aber der Controllino liest immer noch nur kauderwelsch (mein Gedanke war, das u-center so eine art start-config verschickt, damit überhaupt Daten gesendet werden).

Kurz:
Wie muss die GPS-Mouse vielleicht konfiguriert werden?
Was stimmt an meinem Programm nicht?
Muss ein Paket an die GPS-Mouse geschickt werden, um das Daten versenden zu aktivieren?

Ich hoffe mir kann einer helfen, ich bin am verzweifeln.
Ich habe wirklich viel gesucht im Netz, aber Leute suchen unterschiedlich und vielleicht fehlt mir das richtige Stichwort.

Ich danke euch.

Beste Grüße
Richard

Wie sieht es denn mit den anderen Parametern der seriellen Verbindung aus ?
Datenbits, Parity, Stopbits. Wenn eins davon nicht mit dem Ardunino übereinstimmt hast du
Datensalat, nicht nur die Übertragungsrate ist wichtig.

Ulli

Schau dir das Signal doch mal mit einem Logic Analyzer an. stell seriell automatisch erkennen ein.

in keinem Beispiel wurde bisher der Port extra konfiguriert, müsste mal herausfinden wie die Einstellung sein müsste.

gerade gefunden Serial1.begin(9600, SERIAL_8N1); wäre die Einstellung.

leider habe ich keinen Logic Analyzer, aber da die Verbindung zum PC funktioniert, ist das Signal in Ordnung.

Habe auf dem PC einen Seriell Monitor installiert, der zeigt mir die Daten auch völlig in Ordnung an, die von der GPS-Mouse versendet werden.

ich raffe es einfach nicht, am ende ist es irgendwas total lapidares....

Ich hoffe es kommt noch jemand mit dem richtigen Tipp um die Ecke

Sobald ich die Lösung habe, werde ich sie auch posten

Danke bisher

so, habe mal gefunden wie ich die Geschwindigkeit in dem GPS auf 0,3Hz stellen kann.

Im folgenden was ich bekommen. jede Zeile ist ein übertragendes Zeichen als [int byte char].

Das tinyGPS kann natürlich keinen Datensatz erkennen, weil die Zeichen nicht richtig sind.

[int byte char]
91 91 [ 
141 141 � 
109 109 m 
149 149 • 
229 229 å 
157 157 � 
157 157 � 
151 151 — 
159 159 Ÿ 
141 141 � 
151 151 — 
159 159 Ÿ 
163 163 £ 
159 159 Ÿ 
159 159 Ÿ 
167 167 § 
125 125 } 
167 167 § 
149 149 • 
155 155 › 
153 153 ™ 
157 157 � 
163 163 £ 
141 141 � 
143 143 � 
149 149 • 
141 141 � 
151 151 — 
167 167 § 
99 99 c 
167 167 § 
159 159 Ÿ 
157 157 � 
153 153 ™ 
155 155 › 
151 151 — 
163 163 £ 
149 149 • 
147 147 “ 
157 157 � 
157 157 � 
147 147 “ 
167 167 § 
117 117 u 
167 167 § 
159 159 Ÿ 
163 163 £ 
141 141 � 
159 159 Ÿ 
151 151 — 
167 167 § 
167 167 § 
153 153 ™ 
157 157 � 
159 159 Ÿ 
143 143 � 
157 157 � 
147 147 “ 
167 167 § 
167 167 § 
171 171 « 
159 159 Ÿ 
147 147 “ 
229 229 å 
235 235 ë 
183 183 · 
113 113 q 
99 99 c 
83 83 S 
87 87 W 
113 113 q 
167 167 § 
167 167 § 
87 87 W 
167 167 § 
167 167 § 
145 145 ‘ 
113 113 q 
159 159 Ÿ 
167 167 § 
157 157 � 
145 145 ‘ 
163 163 £ 
113 113 q 
167 167 § 
167 167 § 
147 147 “ 
113 113 q 
167 167 § 
143 143 � 
145 145 ‘ 
83 83 S 
153 153 ™ 
159 159 Ÿ 
167 167 § 
157 157 � 
171 171 « 
151 151 — 
167 167 § 
157 157 � 
149 149 • 
155 155 › 
113 113 q 
151 151 — 
167 167 § 
143 143 � 
167 167 § 
141 141 � 
151 151 — 
157 157 � 
89 89 Y 
167 167 § 
167 167 § 
151 151 — 
153 153 ™ 
113 113 q 
167 167 § 
145 145 ‘ 
167 167 § 
143 143 � 
121 121 y 
153 153 ™ 
157 157 � 
153 153 ™ 
113 113 q 
141 141 � 
147 147 “ 
159 159 Ÿ

SERIAL_8N1 ist übrigens die Standard-Voreinstellung, wenn du nichts angibst.

Serielle Geschwindigkeit wird üblicherweise nicht in Hz angegeben sondern in Bd ( Baud ) oder bps (Bit per second) 0,3 Hz ist eine merkwürdige Zahl

Aber diese GPS Maus hat doch erstmal eine USB Schnittstelle.

Der MD6 Universalanschluss ermöglicht den Anschluss von optionalen USB oder seriellen Anschlusskabeln

Wie schliesst du die denn an deinen Controllino an ?
Und wie unterstützt dieser Controllino Serielle Schnittstellen ?
Soweit ich das sehe, ist da alles mögliche vor die eigentlichen atmega Pins geschaltet

die Geschwindigkeit gibt an, in welchem Intervall die GPS-Mouse den Datensatz raussendet

Die GPS-Mouse ist seriell, bei dem Link steht das auch so in der Bezeichnung des Artikels, mit einem MD5 (PS/2) Stecker. Aber wie du erkannt hast bräuchte man eigentlich ein zusätzliches Anschlusskabel, das ich mir aber gespart habe.

Ich habe mir aus einem alten Mainboard eine PS/2 Buchse geholt und Kabel angelötet.

Dann alles mit dem Controllino verbunden. und dann jeweils ein kabel von diesen Anschlüssen zu einem D-Sub9 Stecker und diesen in meinen Rechner gesteckt (COM1).

Der Controllino hat zwischen den Pins des atmega und den Anschlüssen einiges dazwischen, richtig erkannt.

Aber dennoch sind oben auf dem Controllino alle atmega Pins direkt auf zwei breite Steckbrücken geführt. (Es macht aber keinen Unterschied ob ich direkt and ie Pins gehe oder die Anschlüsse des Controllino verwende)

Der atmega 2560 der in dem Controllino steckt hat zwei serielle Schnittstellen von Hause aus.

Eine für die Kommunikation mit dem PC (USB) und eine zweite die Frei ist (meine GPS-Mouse).

Wie schon erwähnt, dieses "u-center" (Programm zu Anzeige und Konfiguration des GPS-Chips) von u-blox (dem Hersteller von dem GPS teil in dieser Navilock-Mouse) zeigt mir alles richtig an, alle gefundenen Satelliten und und und.
Ein Seriell Monitor auf dem PC (der die Daten anzeigt, die über COM1 laufen) zeigt mir auch alle Daten an.

Nur der Arduino bekommt es nicht auf die Reihe die Daten richtig zu lesen.
In meinem vorherigen Post habe ich hinzugefügt, was mein Arduino empfängt.
Die Zeichen stimmen nicht über ein. Als ob es kein UTF8 oder so wäre.
Ein NMEA Datensatz beginnt mit einem Dollarzeichen und endet mit deinem Sternchen. Aber das passt nicht überein.

Ich danke für die Anregungen.
Aber leider bin ich noch nicht weiter gekommen.
Das Netz gibt mir nix her.

Ich kann mir nicht vorstellen, das dieses GPS-Ding nicht an einem Arduino funktionieren soll.
Irgendwas muss ich übersehen.

Ich hoffe jemand kann mir die Augen öffnen.

Hat dein Controllino eine ttl Schnittstelle oder rs232 Level? Lt. deinem Link eher nicht. Dann musst du einen Level converter dazwischen machen.
Max232 macht sowas

Mach mal im U-Center die Packet Console, die Text Konsole und die Binary Konsole auf...

Hast Du dann Text in der TextKonsole oder nur Zeilen in der Binary und Packet konsole?

Ich zB. spreche einen Ublox rein Binär an, ohne Lesbaren Text.

EDIT: habe gerade den ganzen theoretischen Aufbau gesehen.. Da wäre ein Problem kein wunder. Ich benutze sogar das ungetaktete SoftwareSerial für das ublox. Wie ist denn die Ps2 Steckerbelegung?

orichienal:
Dann alles mit dem Controllino verbunden. und dann jeweils ein kabel von diesen Anschlüssen zu einem D-Sub9 Stecker und diesen in meinen Rechner gesteckt (COM1).

Was hat dein Controllino für Pegel und Logik und was die COM1 am PC? Mein Mega hat 0/5V, lt. webpage der Controllino auch. Mein PC hat +/-15V. Da geht was nicht zusammen.

#include "TinyGPS.h"
#include "TinyGPS++.h"

Als erstes solltest du dich mal für eine der Libs entscheiden, warum beide auf einmal?

Gruß

Die GPS-Mouse ist seriell, bei dem Link steht das auch so in der Bezeichnung des Artikels, mit einem MD5 (PS/2) Stecker. Aber wie du erkannt hast bräuchte man eigentlich ein zusätzliches Anschlusskabel, das ich mir aber gespart habe.

Ich habe mir aus einem alten Mainboard eine PS/2 Buchse geholt und Kabel angelötet.

Dann alles mit dem Controllino verbunden. und dann jeweils ein kabel von diesen Anschlüssen zu einem D-Sub9 Stecker und diesen in meinen Rechner gesteckt (COM1).

Wenn Du das so wie beschrieben an den Rechner geklemmt hast, dann arbeitet die GPS Mouse mit RS232 Pegeln, das kann am Mega nicht funktionieren.

Schau Dir mal diesen Adapter an: http://amzn.to/2c9b4KG
Mit dem kannst Du auch gleich Deinen DSub9 Stecker weiterverwenden.

Mario.

mkl0815:
Wenn Du das so wie beschrieben an den Rechner geklemmt hast, dann arbeitet die GPS Mouse mit RS232 Pegeln, das kann am Mega nicht funktionieren.

Schau Dir mal diesen Adapter an: http://amzn.to/2c9b4KG
Mit dem kannst Du auch gleich Deinen DSub9 Stecker weiterverwenden.

Mario.

Siehe Post #7 und #9
Aber der TO scheint es gelöst zu haben, da schon 1 Woche Funkstille

Moin Leute,

ja so wie es aussieht sind da Informationen fehl gelaufen.

Ihr habt recht, der Arduino hat zwar seriell, aber das als TTL.
Die GPS-Mouse hat auch seriell aber als RS232.

Ich werde mir wohl doch so ein Modul kaufen müssen, versuche eins zu finden ohne DSuB9. am liebsten "Nackt", damit ich selber Kabel einbauen kann.

Mein letzter Versuch besteht noch darin, die GPS-Mouse auf I²C zu konfigurieren.

Dann bräuchte ich kein extra Modul.

Obwohl ich für die Sensoren die ich aus lesen möchte (4-20mA) eigentlich auch ein Modul brauche (weiß nicht wie gut das mit dem Widerstand läuft, muss den noch besser bestimmen, da 12Volt)

Ich danke euch allen, hat mir doch gut weitergeholfen, über das Problem "laut" sprechen hilft oft super, da man selber irgendwann blockiert ist.

Meine endgültige Lösung werde ich noch Posten, da mich selber nervt, wenn das jemand nicht tut.

Beste Grüße
orich

Nimm einen IC oder Modul MAX232

http://www.segor.de/#Q=RS232-TTLModul&M=1

(kurz warten bis die Seite aufgebaut ist)

und dann den zweiten in der Liste.

Der ist schön klein und ich kann direkt Kabel anlöten.

Das ganze in ein kleines Hutschienengehäuse und es ist perfekt (SORRY).

Falls ich jetzt noch einen mini Wandler von mA zu V finde kommt der da auch rein (oder halt der Widerstand).

ich berichte.

Naja bevors ne Fehlinfo wird besser gelöscht.. ich hab übrigens letztens einen Neo8M für 17€ gekauft.

Ähnliches Gehäuse, Power und Uart mit 30cm Kabel rausgeführt

orichienal:
und dann den zweiten in der Liste.

Das ist genau der, den du brauchst. Den benutze ich auch.

Ah, jetzt hab ichs auch.. ist allerdings ganz schön umständlich irgendwie :o

Hatte eine Info erwischt mit 2x RS232 im Controllino.

Ich würde mir die Maus anpassen.. wer braucht denn schon nen PS2 Anschluss heutzutage.

4-20mA kannst du sehr gut mittels Widerstandbrücke auswerten. Der Sensor sorgt dafür das 20mA getrieben werden, es sei den seine Spannung reicht nicht aus um den Widerstand zu treiben.

Beispiel: 5V Versorgung, 20mA dann darf R-last nicht größer als 250Ohm sein. Da man die 5V direkt messen kann, sollte es reichen einfach einen Widerstand 220Ohm zwischen Mess und GND dran zu klemmen und GND mit GND sowie Mess mit Analog-IN zu verbinden.

Sensoren die mit 24V laufen lege ich dann auch mal auf ~1KOhm Lastwiderstand. Dann liegen aber Gesamt um die 20V an. Heist dann, man sollte zb einen Spannungsteiler 220Ohm/680Ohm benutzen, dann wird am 220Ohm maximal 4,4V anliegen. Nun muss man intern natürlich noch Umrechnen, welche Spannung, welchem Strom entspricht. Oder sich den Spannungsteiler mit Poti aufbauen und genau auf 5V kalibrieren. Vorsicht, das man nicht drüber kommt und sich den Eingang schrottet. Daher lieber feste Widerstände und etwas Bandbreite verlieren.

4-20mA ist hoffentlich kein 2-Draht Sensor, sondern ein 3Draht (Plus, Minus, Messwert). Das 4-20mA wurde mal dafür genutzt mit 2 Drähten auszukommen. Der Sensor nimmt sich dann die 4mA zur Eigenversorgung deswegen müssen die IMMER fliesen.