Rohdaten aus einem LEA-4T rauskitzeln

Fragen zu GPS-Empfängern und alles was damit zu tun hat.

Moderator: Roland

Benutzeravatar
Taurus
Beiträge: 259
Registriert: 02.09.2007 - 14:36
Wohnort: Germany

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Taurus » 25.04.2013 - 20:22

Sooooo.... ein bisschen Zeit ist vergangen und ich war fleißig bei meinem Projekt.
Auch wenn ich nicht ganz so weit gekommen bin wie ich es mir erwünscht habe, aber das Problem kennt ihr ja auch... :wink:

Es stellt sich aber ein neues Problem!

Doch zuvor hier mal ein Raw-Daten-Schnipsel... (Beobachtungsdaten, keine Ephemeriden)
B5,62,2,10,C8,0,42,C0,64,18,C9,6,8,0,
0,0,0,0,0,0,0,0,95,DE,C7,4E,C,F0,76,41,66,33,36,C4,18,4,1B,3,
0,0,0,0,0,0,0,0,6D,35,AF,C9,90,AE,77,41,66,BA,B9,45,1F,4,14,3,
0,0,0,0,0,0,0,0,17,68,5B,4,9,9F,74,41,17,5F,A6,44,C,4,1A,3,
0,0,0,0,0,0,0,0,39,64,12,48,24,41,B1,1B,C,D9,5B,9A,27,5A,EA,74,
68,19,2,0,0,2,6,76,C,1D,3,0,0,0,F7,76,4F,88,2,1E,0,0,0,0,
7C,F8,41,D9,44,1C,A6
Die Daten sind natürlich Hex-codiert, aber das habt ihr ja längst erkannt...
Ein Paar Feststellungen habe ich mittlerweile gemacht.
Die überraschenste ist wohl, das es -aus meiner Froschperspektive- nicht möglich ist einen Arduino Uno zum Berechnen einer Position aus Rohdaten zu nutzen.

Hintergrund:
Der Uno schafft es von der Rechenleistung her nicht die Hex-Werte in eine Nummer zu verwandeln.
Ein Beispiel:
Die erste Daten-Zeile enthält die ublox-ID der Nachricht ("B5,62,2,10") sowie die Byte-Länge der Nachricht ("C8,0") und dahinter folgend der Empfangszeitpunkt ("42,C0,64,18") sowie die GPS-Woche ("C9,6"), Anzahl empfangener Satelliten ("8") und ein Spare-Byte ("0").
Versucht man jetzt auf dem Arduino den Empfangszeitpunkt von Hex in einen Integer zu konvertieren klappt das mit den drei kleinsten Byte korrekt, jedoch wird bei Addition des größten Byte immer der Wert verfälscht... ich tippe auf einen Buffer-Overflow im Arduino aufgrund zu geringem Arbeitsspeicher... Andere Meinungen sind natürlich gern willkommen!
Glücklicherweise hatte ich nicht vor auf dem Arduino die Daten auszuwerten, weshalb mich dieses Problem nicht sonderlich einschränkt.

Im Gegensatz zum nun folgenden Sachverhalt...
Im "Header" der Raw-Daten (erste Zeile) steht das momentan 8 Satelliten empfangen werden...
Zwecks Veranschaulichung habe ich mal die zu den Satelliten gehörenden Beobachtungen im Beispiel in einzelne Zeilen kopiert... jede Zeile entspricht dem Beobachtungs-Satz für einen Satelliten... kurz durchgezählt stehen in jeder Nachricht nur 5 1/2 Satelliten, anstatt der angegebenen 8.
Leider hab ich keine Idee woran das liegt. Mir ist es noch nicht einmal möglich einzugrenzen ob der Fehler beim Empfänger, beim Microcontroller oder in meinem Code liegt...
Hat einer von euch eine Idee ???

Ich wünsche schonmal viel Spaß beim Rätseln...

Taurus

Josef Gerstenberg
Beiträge: 233
Registriert: 07.09.2009 - 20:00

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Josef Gerstenberg » 25.04.2013 - 20:42

Hallo Taurus,

wenn du nicht mehr verrätst, dann wird beim Rätseln nicht heraus kommen.

Wie sieht dein Arduino-Programm an der Stelle aus, an der du iTOW berechnest?
Verwendest du ein Long-Integer Variable?

Welche Baudrate?
Verwendest du einen Software-Uart?

Gruß Josef

PS Vom ublox-Empfänger werden keine HEX-Werte gesendet, sondern binäre Werte.

Benutzeravatar
Taurus
Beiträge: 259
Registriert: 02.09.2007 - 14:36
Wohnort: Germany

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Taurus » 25.04.2013 - 21:17

Josef Gerstenberg hat geschrieben: PS Vom ublox-Empfänger werden keine HEX-Werte gesendet, sondern binäre Werte.
...da haste wahr. Ich wollte aber auch nicht ausdrücken das die Daten als Hex kommen, sondern das ich die Ausgabe als Hex angebe, zwecks übersichtlicherer Darstellung...
Josef Gerstenberg hat geschrieben:Verwendest du ein Long-Integer Variable?
Nein, der Arduino Uno kennt keine Long, daher nehm ich einen double.
Josef Gerstenberg hat geschrieben:Welche Baudrate?
9600
Josef Gerstenberg hat geschrieben:Verwendest du einen Software-Uart?
Ich habe keine Ahnung was das sein soll, aber ich bewundere die Antwort schon jetzt!!! :lol:

Hier mal mein Code, mit dem ich die HEX umwandle... (ich nutze dazu 3 Funktionen)
kurze Erklärung
Die Zahlen sind im LittleEndian-Format, was bedeutet das das Byte mit der kleinsten Wertigkeit zuerst empfangen wird, womit man gezwungen ist die Bytes ein wenig umzuwürfeln und aufzuteilen...
Mit separate_hex() wandle ich eine HexZahl "B5" in "B,5" um.
Mit xhochy() errechne ich x^y
Mit hex2dec() errechne ich den Wert der HexZahl als Dezimalzahl

Code: Alles auswählen

void hex2dec(int ihex[], int length_ihex, int hex_flag) //Wandelt die Hexadezimalzahl "hex" mit der Länge "length_ihex" in eine Ganzzahl
                                                   //wenn hex_flag==0: Beispiel: Aus "B,5" wird "11,5" es erfolgt keine Umrechnung in DEC!!!
                                                   //wenn hex_flag==1: Beispiel: Aus "B,5" wird "181" es erfolgt eine Umrechnung in DEC!!!
{ 
for(int i1=0;i1<sizeof(hex2dec_out);i1++)
{hex2dec_out[i1]=0;}
  
if(hex_flag==0)
{
  for(int i2=0;i2<length_ihex;i2++)
  { separate_hex(ihex[i2]);
    Serial.print(separate_hex_out[0],DEC);Serial.print(",");Serial.print(separate_hex_out[1],DEC);Serial.print(",");
  }}

if(hex_flag==1)
{
  for(int i3=0;i3<length_ihex;i3++)
  { xhochy(16,length_ihex-1-i3);
    hex2dec_out[0]=hex2dec_out[0]+ihex[i3]*xhochy_out;
  }}}

//----------------------------------------------------------------------------------------------------------
double xhochy(int x,int y)//berechnet x^y
{ xhochy_out=1;
  if(y==0){xhochy_out=1;}
  else
  {for(int i=1;i<=y;i++)
  {xhochy_out=xhochy_out*x;}}}
//----------------------------------------------------------------------------------------------------------
void separate_hex(int hex_in)//Aufspalten einer HexZahl in hex.Bestandteile: "B5"->"B,5"
{   int hex_counter=0;
    separate_hex_out[0]=0;
    separate_hex_out[1]=0;
    while(hex_in>=16)
    { hex_in=hex_in-16;
      hex_counter++;}
    separate_hex_out[0]=hex_counter;
    separate_hex_out[1]=hex_in;}
Momentan überlege ich gerade ob ich das ganze nicht auch über Bit-Shift-Operatoren machen könnte, aber dafür ist es jetzt schon zu spät am Abend zum durchdenken!!!

Taurus

Josef Gerstenberg
Beiträge: 233
Registriert: 07.09.2009 - 20:00

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Josef Gerstenberg » 25.04.2013 - 22:33

Hi Tourus,
...da haste wahr. Ich wollte aber auch nicht ausdrücken das die Daten als Hex kommen, sondern das ich die Ausgabe als Hex angebe, zwecks übersichtlicherer Darstellung...
Nochmal: Wenn binäre Daten vom ublox-Empfänger kommen, dann darfst du auch keine HEX-Nach-Dezimal-Umwandlung vornehmen (wie in deinem Code).
Arduino Uno kennt keine Long, daher nehm ich einen double
Ich bin kein Arduino-Spezialist, aber statt einer benötigten Long-Integer-Variablen (4-Byte-Ganzzahl mit Vorzeichen) eine Double-Variable (8-Byte Fließkommazahl) zu verwenden, kann nicht funktionieren.
Kennt der Arduino-Uno wirklich keine Long-Integer?

9600 Baud sind zu wenig, wenn man die ublox-Messages RXM-RAW und RXM-SFRB sauber übertragen will (zur späteren RINEX-Erzeugung oder zur Verwendung in RTKLIB).
Ich habe keine Ahnung was das sein soll, aber ich bewundere die Antwort schon jetzt!!! :lol:
Ich vermute mal, dass du derzeit mit dem Arduino-UNO auf einem Serial-Port die Daten vom ublox-Empfänger empfängst und auf einem zweiten Serial-Port die Daten zu einem PC sendest.
Da der Arduino-UNO nur einen Hardware-Serial-Port hat, ist der zweite immer ein Software-Serialport (mittels Software erzeugt).
Die derzeitige Arduino Standard-Implementierung des Software-Serial-Ports schafft bei mir sicher nur 4800 Baud.
Vielleicht wird deswegen bei dir die Message RXM-RAW nicht vollständig übertragen.
Hier mal mein Code, mit dem ich die HEX umwandle... (ich nutze dazu 3 Funktionen)
Wie bereits gesagt, ist keine HEX-Umwandlung angebracht, da es sich bei den ublox-Daten um binäre Werte handelt.
Ich würde die vier Bytes aus der ublox-Message einfach der Reihe nach in die Long-Integer-Variable kopieren. Schneller geht es nicht.
Mathematisch wäre das: Byte0 + Byte1*2^8 + Byte2*2^16 + Byte3*2^24

Viel Spass beim weiteren durchdenken,
Josef

XPosition
Beiträge: 214
Registriert: 25.08.2008 - 00:09

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von XPosition » 25.04.2013 - 23:59

Höre lieber auf Josef. ;)

Hab mal google angeworfen:
Laut http://arduino.cc/en/Reference/Long
gibt es long.

Arduino benutzt sicherlich little endian. Also mußt du gar nix umwandeln.
Den Datenstrom als "unsigned char*" definieren oder am Besten gleich eine Struktur definieren mit dem was dir geschickt wird.
Und dann halt darauf casten. Achte aber etwas auf Aligment Probleme.

XPosition
Beiträge: 214
Registriert: 25.08.2008 - 00:09

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von XPosition » 26.04.2013 - 10:05

Also ich würd mal die _t variablen probieren.
Ich hab dir mal ein Beispiel gemacht:

Code: Alles auswählen

#define UBX_SYNC_CHAR_1 0xB5u    // First character of UBX Protocol
#define UBX_SYNC_CHAR_2 0x62u    // Second character of UBX Protocol
#define UBX_PREFIX      (UBX_SYNC_CHAR_2<<8|UBX_SYNC_CHAR_1) // UBX Protocol Prefix
#define UBXID_RXM_RAW 0x0210 // message id for RXM-RAW

//! UBX Protocol Header
typedef struct __attribute__((packed)) UBX_HEAD_s
{
	uint16_t prefix;					// Prefix
	uint8_t classId;					// Class Id
	uint8_t msgId;					// Message Id
	uint16_t size;					// Payload Size
} UBX_HEAD_t, *UBX_HEAD_pt;

typedef struct __attribute__((packed)) UBX_RXM_RAW_s
{
	int32_t  iTOW;            // GPS time of week
	int16_t  week;            // GPS week number 
	uint8_t  numSV;         // num of satellites
	uint8_t  res1;             // Reserved
	UBX_RXM_RAW_CPMES_t cptimes[0];    //  it is: cptimes[numSV]
} UBX_RXM_RAW_t,*UBX_RXM_RAW_pt;


typedef struct __attribute__((packed)) RXM_RAW_CPMES_s
{
	double  cpMes;         // Carrier phase measurement
	double  prMes;          // Pseudorange measurement [m]
	float  doMes;             // Doppler measurement [Hz]
	uint8_t  sv;                // Space Vehicle Number
	int8_t  mesQI;           // Nav Measurements Quality Indicator:
	int8_t  cno;               // Signal strength C/No. (dbHz)
	uint8_t  lli;                // Loss of lock indicator (RINEX definition)
} RXM_RAW_CPMES_t,*RXM_RAW_CPMES_pt;



int processData(const uint8_t *data)
{
	UBX_HEAD_pt header;
	UBX_RXM_RAW_pt raw;	

	header = (UBX_HEAD_pt) data;
	if(header->prefix != UBX_PREFIX)
	{
		errormsg("blabla");
		return ERROR_BLABLA;
	}
	if(header->msgId == UBXID_RXM_RAW)
	{
		header++;
		raw = (UBX_RXM_RAW_pt) header;
		for(uint8_t i = 0; i <	raw->numSV;i++)
		{
			double carrier =   cptimes[i].cpMes;    		
		}
	}
	return SUCCESS;
}
Das ist nicht getestet. Hab nicht deine Umgebung.
P.S. geändert
Oh, ich las gerade, dass beim Arduino Uno 'double' nur 4 bytes hat und nicht 8. Dann geht das so nicht. Würde nur beim Arduino Due funktionieren.
Probier mal ob er 'long double' versteht, dann kannst du 'double' mit 'long double' austauschen.

Benutzeravatar
Taurus
Beiträge: 259
Registriert: 02.09.2007 - 14:36
Wohnort: Germany

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Taurus » 28.04.2013 - 23:30

Also das Problem des Variablen-Überlaufs hab ich gelöst... wenn man die Variable als "unsigned long" definiert passt das ganze sowohl mit euren Varianten als auch mit meiner.
Hab das ganze jetzt aber über bitshift-Operationen gemacht, weil es so auch einfeutig schneller läuft. Noch dazu bin ich von der Einfachheit des Ganzen fasziniert :lol:
Bei der iTOW kommt man damit noch weiter, aber spätestens bei der Pseudorange ist Schluß. Der unsigned long kann nur 4 byte schlucken, die Pseudorange trumpft leider mit 8 bytes auf...

Das andere Problem der nicht vollständigen Ausgabe habe ich allerdings immernoch...
Josef Gerstenberg hat geschrieben:Ich vermute mal, dass du derzeit mit dem Arduino-UNO auf einem Serial-Port die Daten vom ublox-Empfänger empfängst und auf einem zweiten Serial-Port die Daten zu einem PC sendest.
Da der Arduino-UNO nur einen Hardware-Serial-Port hat, ist der zweite immer ein Software-Serialport (mittels Software erzeugt).
Die derzeitige Arduino Standard-Implementierung des Software-Serial-Ports schafft bei mir sicher nur 4800 Baud.
Vielleicht wird deswegen bei dir die Message RXM-RAW nicht vollständig übertragen.
..klingt zumindest nach dem Aufbau den ich hier neben mir liegen habe...
Der Empfänger hängt an Tx und Rx des Arduinos und ich gehe via serieller Verbindung über USB zum Arduino.

Wie hoch sollte denn die Baudrate sein um die RXM-RAW zu empfangen?
Auf die "komplette" RXM-EPH kann ich verzichten, da ich eh nur die Ephemeriden pollen wollte, die auch empfangen werden.
Der Arduino bietet ja die Möglichkeit die Baudrate des SoftwareSerial-Ports zu ändern, bzw. das Siftware- und Hardware-Port zu splitten... daher sollte es doch eigentlich kein Problem sein bei bekannter Baudrate die Nachricht zu empfangen???
vgl.: http://arduino.cc/en/Reference/SoftwareSerial

Beste Grüße
Taurus

Josef Gerstenberg
Beiträge: 233
Registriert: 07.09.2009 - 20:00

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Josef Gerstenberg » 30.04.2013 - 21:36

Hallo Taurus,
wenn man die Variable als "unsigned long" definiert passt das ganze sowohl mit euren Varianten als auch mit meiner.
Wenn du die Variable ITOW damit meinst, dann muss das eine "signed long" Variable laut ublox sein.

19200 Baud sollten für eine Übertragung von RXM-RAW und RXM-SFRB reichen.
Und dass schafft die normale SoftwareSerial-Library für den Arduino nicht.
Arduino NewSoftSerial library by Mikal Hart:
"It is possible to have multiple software serial ports with speeds up to 115200 bps."
Das stimmt nicht. Zwar kann ein Byte mit 115200 bps übertragen werden,
jedoch nicht viele Bytes hintereinander, wie sie von einem LEA-4T kommen können.
Ich verwende diese alternative Library, die bis zu 57600 Baud an einem Soft-Port hintereinander schafft:
http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

Ich frage mich, warum du RXM-EPH für einzelne Satelliten abfragen willst.
Willst du die GPS-EPH-Messages mit einem Arduino entsprechend IS-GPS-200 dekodieren?
http://www.gps.gov/technical/icwg/IS-GPS-200D.pdf
Das wäre bewundernswert und ist grundsätzlich möglich, aber extrem aufwendig und sehr, sehr langsam.

Wenn du die Daten vom LEA-4T nur relativ simpel mit einem Arduino analysieren willst
(Anzahl Satelliten, Phase vorhanden o.ä.) und sie dann z.B. an RTKLIB weiterleiten willst,
dann nimm die ublox-Messages RXM-RAW und RXM-SFRB.

Taurus, mir ist noch immer nicht klar, was hier dein Ziel ist!
Bisserl rumstochern im Nebel?
Gehirnakrobatik?
Frei flottierender Wissensdurst?
Das ist für mich alle akzeptabel. Nur wissen täte ich gern dein Ziel.

Gruß Josef

Benutzeravatar
Taurus
Beiträge: 259
Registriert: 02.09.2007 - 14:36
Wohnort: Germany

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Taurus » 30.04.2013 - 22:55

Josef Gerstenberg hat geschrieben:Frei flottierender Wissensdurst?
*gröööööhl*
Den kannte ich noch nicht!!! :lol: :lol: :lol:
Ich hab dir doch mal geschrieben was ich vorhabe, oder???
Ich will mit einem Arduino die Rohdaten auf SD-Card aufzeichnen und dann am PC im Postprocessing ohne Umweg über Pseudorange-Korrekturen die Position eines zweiten Empfängers korrigieren... Postprocessing will ich mit Freemat oder DevC++ machen, mal sehen ob ich die Nerven habe mich mit Dev herumzuschlagen...
Also nicht mit vorhandenen Programmen wie RTKLib oder ähnliches...
Nebenher will ich mich in der C-Programmierung wieder fit machen für die Jobsuche (aber das ist wirklich nur ein netter Nebeneffekt).

Danke für die Library, werd mir die morgen mal zu Gemüte führen...
Josef Gerstenberg hat geschrieben:Wenn du die Variable ITOW damit meinst, dann muss das eine "signed long" Variable laut ublox sein.
Ja, ich meine die iTOW, aber das es ein 'signed long' sein soll ist unlogisch - uBlox hin oder her...
Die iTOW gibt ja nichts weiter als die Zeit seit GPS-Wochenbeginn an. Die startet bei 0 und endet bei 86.400.000 msec, da kann man auf das Vorzeichen verzichten (meiner Meinung nach).
Ist aber für mich auch unwesentlich, da ich im Arduino eh keine Auswertung machen will, sondern ihn nur als Aufzeichnungs-Schnittstelle für die SD-Card nutze...
Josef Gerstenberg hat geschrieben: Ich frage mich, warum du RXM-EPH für einzelne Satelliten abfragen willst.
Warum nicht?
Wozu die gesamte RXM-EPH-Nachricht für 32 Satelliten ausgeben lassen wenn es reicht die Ephemeriden der empfangenen Satelliten zu pollen? Spart zumindest Bandbreite...
Josef Gerstenberg hat geschrieben:Willst du die GPS-EPH-Messages mit einem Arduino entsprechend IS-GPS-200 dekodieren?
http://www.gps.gov/technical/icwg/IS-GPS-200D.pdf
Das wäre bewundernswert und ist grundsätzlich möglich, aber extrem aufwendig und sehr, sehr langsam.
Dekodieren ja, aber nicht auf dem Arduino sondern aufm PC.
Josef Gerstenberg hat geschrieben:Willst du die GPS-EPH-Messages mit einem Arduino entsprechend IS-GPS-200 dekodieren?
http://www.gps.gov/technical/icwg/IS-GPS-200D.pdf
Das wäre bewundernswert und ist grundsätzlich möglich, aber extrem aufwendig und sehr, sehr langsam.
Ich will auf jedenfall bei den direkten GPS-Daten bleiben wie sie von den Satelliten gesendet werden. Daher verzichte ich auf deinen Rat, werd aber drauf zurück kommen wenn Plan A nicht funktioniert :P

Taurus

Josef Gerstenberg
Beiträge: 233
Registriert: 07.09.2009 - 20:00

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Josef Gerstenberg » 01.05.2013 - 11:16

Ich will mit einem Arduino die Rohdaten auf SD-Card aufzeichnen und dann am PC im Postprocessing...
Dann ist es also nur Gedankenakrobatik, die Dekodierung mit einem Arduino durchzuführen :-)
Ja, ich meine die iTOW, aber das es ein 'signed long' sein soll ist unlogisch - uBlox hin oder her...
Manchmal denken sich die Leute von ublox bei den Variablen etwas. Z.B. ist beim Wochenübergang kurzfristig durchaus eine negative ITOW denkbar.
Wozu die gesamte RXM-EPH-Nachricht für 32 Satelliten ausgeben lassen wenn es reicht die Ephemeriden der empfangenen Satelliten zu pollen? Spart zumindest Bandbreite...
Stimmt! Aber woher nimmst du die Iono-, Clock- und Health-Daten für eine Positionsberechnung?

Gruß Josef

Benutzeravatar
Taurus
Beiträge: 259
Registriert: 02.09.2007 - 14:36
Wohnort: Germany

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Taurus » 01.07.2013 - 21:10

Sooooooooooooooooo.... auf den Tag genau 2 Monate ist es her, das ich mich in meinem eigenen Thread rumgetrieben habe... SCHANDE AUF MEIN HAUPT!!! :? :? :?
Dafür darf ich mich jetzt zertifizierter Projektmanagement-Fachmann nennen, womit mein Fauxpas hoffentlich entschuldigt ist... :mrgreen:
Josef Gerstenberg hat geschrieben:Dann ist es also nur Gedankenakrobatik, die Dekodierung mit einem Arduino durchzuführen :-)
Es ist keine Gehirnakrobatik, es war lediglich ein Denkfehler :lol:
Hatte das nie vor, wollte nur zwischendurch auf die Schnelle mal meine eigenen Daten kontrollieren und wunderte mich das es nicht klappt... aber das Problem ist ja gelöst.
Josef Gerstenberg hat geschrieben:Stimmt! Aber woher nimmst du die Iono-, Clock- und Health-Daten für eine Positionsberechnung?
Wenn du die Satellitenuhrfehler meinst nehm ich die natürlich aus den Subframes der Satellitendaten...
Ich will aber mit einer eigenen Basisstation arbeiten... daher sollten diese Fehler (ausser Health) eh verschwinden.

Das andere Problem hingegen nicht!
Hab die AltSoftSerial-Library getestet. Läuft auch soweit, jedoch wird mir immernoch nicht die gesamte RXM-RAW nachricht ausgespuckt.
Die ersten Satelliten werden sauber übermittelt, aber Byte 100 (+- 10) wird nichts mehr übertragen...

Irgendwelche Vorschläge woran ich noch drehen kann?
Ist es die Baudrate?
Wie berechne ich den Kram eigentlich?

Taurus

Josef Gerstenberg
Beiträge: 233
Registriert: 07.09.2009 - 20:00

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Josef Gerstenberg » 02.07.2013 - 20:42

Hallo Taurus,

Glückwunsch zur Zertifizierung!
Hab die AltSoftSerial-Library getestet. Läuft auch soweit, jedoch wird mir immernoch nicht die gesamte RXM-RAW nachricht ausgespuckt.
Die ersten Satelliten werden sauber übermittelt, aber Byte 100 (+- 10) wird nichts mehr übertragen...
Stelle mal den GPS-Empfänger so ein, dass er nur RXM-RAW und RXM-SFRB überträgt (keine NMEA- und anderen RXM-Messages).
Baudrate auf 19200.
Bei mir wird so alles sauber mit einem Arduino über eine zweite serielle Schnittstelle übertragen.
Wie berechne ich den Kram eigentlich?
Welchen Kram meinst du?
1+1 ist z.B. 2 :-)

Gruß Josef

Josef Gerstenberg
Beiträge: 233
Registriert: 07.09.2009 - 20:00

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Josef Gerstenberg » 17.07.2013 - 19:31

Ein Hallo in die Runde.

Vielleicht interessiert sich noch jemand für die ublox/Arduino-Übertragungsprobleme von Taurus,
die ich mit ihm per PM beseitigt habe.

Anbei ein Arduino Beispiel-Script, mit dem Daten vom Hardware-Serial-Port (daran hängt der LEA-4T) an den
Software-Seriel-Port und vom Software-Serial-Port an den Hardware-Seriel-Port weitergeleitet werden.
Für die benutzten Pins die Infos zum Arduino-Bord und zu AltSoftSerial anschauen.

Den GPS-Empfänger so einstellen, dass er nur RXM-RAW und RXM-SFRB überträgt (keine NMEA- und anderen RXM-Messages).
GPS-Empfänger-Baudrate auf 19200 setzen.

Unbedingt in den Arduino-Dateien AltSoftSerial.ccp und HardwareSerial.cpp den RX_BUFFER_SIZE und/oder den TX_BUFFER_SIZE
vergrößern (je nachdem, ob empfangen und/oder gesendet wird).
Sonst werden nicht alle Bytes vom LEA-4T übertragen (wie Taurus berichtete).

Gruß Josef


#include <AltSoftSerial.h> //Library importieren

AltSoftSerial GPS;
#define USB Serial // HardwareSerial
byte bytes; // Variable deklariert

void setup()
{
USB.begin(19200); //Baudraten setzen
GPS.begin(19200);
}

void loop()
{
if (GPS.available()) {
bytes = GPS.read();
USB.write(bytes);
}

if (USB.available()) {
bytes = USB.read();
GPS.write(bytes);
}
}

HackyJ
Beiträge: 2
Registriert: 18.07.2013 - 12:55

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von HackyJ » 18.07.2013 - 13:45

Hast du es schon einmal mit dem uCenter probiert.
Dort ist zunächst alles Klartext.
Dann die Port Konfiguration ansehen.
In der Port Config wird entschieden welche Datagramme UBX oder NMEA auf welchem Port abgebildet werden.

Benutzeravatar
Taurus
Beiträge: 259
Registriert: 02.09.2007 - 14:36
Wohnort: Germany

Re: Rohdaten aus einem LEA-4T rauskitzeln

Beitrag von Taurus » 18.07.2013 - 22:58

Hi HackyJ,

Bin mir nicht ganz sicher was genau du meinst.
Ich hab meine UBX-Messages mit uCenter konfiguriert bzw. die Porteinstellungen etc. in uCenter gemacht und mir die Hex-Nachricht dann via Arduino ans GPS-Modul gesendet...

Antworten