Hallo zusammen
Habe im Forum ausschau gehalten nach Infos wie man ein "SkyTraq Venus 6
GPS Receiver" konfigurieren kann. Jedoch noch nichts passendes gefunden.
Daher habe ich einen neuen Beitrag eröffnet und wäre unendlich dankbar
wenn ihr mir helfen könntet.
Ein wenig Kontext: Ich habe einen Arduino MEGA 2560 und das Venus GPS
von Sparkfun (https://www.sparkfun.com/products/11058).
Ziel:
1)Ich würde das GPS gerne bei 10Hz betreiben und im Binary Output Format
entsprechend
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/GPS/Venus/638/doc/AN0003_v1.4.19.pdf
2)Gerne würde ich die Antworten des GPS auswerten und "verarbeiten",
hier weiss ich noch nicht genau wie ich vorgehen soll, Theorie unten.
Hier was ich bis jetzt erreicht habe:
1)Ich empfange NMEA Nachrichten und die GPS Koordinaten stimmen. Diese
werden bis jetzt im NMEA Format bei 1Hz versendet.
2) Um den Outputmode zu ändern, möchte ich entsprechend dem Datenblatt
folgende Zeichenkette an das GPS senden (entsprechend S14):
Structure:
<0xA0,0xA1>< PL><09>< message body><CS><0x0D,0x0A>
Example:
A0 A1 00 03 09 00 09 0D 0A
(dies wäre laut meine Verständnis="no Output")
(Frage am Rande:warum ist hier die Payloadsize=3 gesetzt, sind doch nur
2 Bytes?)
Ich sende die Zeichenkette mit folgendem Code
1 | boolean setToBinaryMode()
|
2 | {
|
3 |
|
4 | byte befehl[8];
|
5 | byte laenge=9;
|
6 |
|
7 | befehl[0]=0xA0; //Start A0
|
8 | befehl[1]=0xA1; //Start A1
|
9 | befehl[2]=0x00; //Payload lenght byte 1
|
10 | befehl[3]=0x03; //Payload lenght byte 2
|
11 | befehl[4]=0x09; //ID 9=CONFIGURE MESSAGE TYPE
|
12 | befehl[5]=0x00; //"No output"
|
13 | befehl[6]=0x09; // Checksumme
|
14 | befehl[7]=0x0D; // Ende
|
15 | befehl[8]=0x0A; // Ende
|
16 |
|
17 | for (byte i=0;i<laenge;i++)
|
18 | {
|
19 | delay(10);
|
20 | gpsSerial.write(befehl[i]);
|
21 | }
|
22 | }
|
Weiter intialisiere ich die serielle Schnittstelle so:
1 | SoftwareSerial gpsSerial(10, 11); // RX, TX
|
RX geht an den TX Pin des GPS und vice versa.
Leider klappt das alles noch nicht und ich weiss nicht recht wie ich
"debuggen" kann. Hier meine Fragen:
1)Ist das Schreiben des Befehles grundsätzlich richtig aufgebaut? Muss
ich dies byteweise schicken mit "Delay" dazwischen?
2)Wie ich das verstehe (auf Seite 34) antwortet der Chip so:
ACK – Acknowledgement to a Request Message (0x83)
Structure:
<0xA0,0xA1>< PL><83>< message body><CS><0x0D,0x0A>
Example: A0 A1 00 02 83 02 81 0D 0A
Daher habe ich mir jetzt gedacht ich lese solange alles was auf TX des
GPS kommt aus bis ein byte=0xA0 ist und werte dann die Nachricht aus.
Leider kommt es aber gar nicht soweit. Das GPS sendet und sendet
(vermutlich immer noch NMEA Codes) aber 0xA0 und folgende kommen nie.
Hier das Abfangen:
1 | byte ch = gpsSerial.read();
|
2 | if (ch!=-1)
|
3 | {
|
4 | Serial.println(ch,HEX);
|
5 |
|
6 | if (ch==0xA0)
|
7 | {
|
8 | Serial.println("\n[GPS]: NOK");
|
9 | }
|
10 | else if (ch==0xA1) /
|
11 | {
|
12 | Serial.println("\n[GPS]: OK");
|
13 | }
|
14 | }
|
Daher gehe ich davon aus das die Konfiguration noch nicht erfolgreich
ist.
Weiss nicht richtig wo ich weiter anpacken/kontrollieren kann.
Wäre froh wenn ihr mir ein wenig auf die Sprünge helfen würde wie ich da
weiter vorgehen kann...
Besten Dank und hoffe auf rasche Antwort :-)
MfG Sämy