Forum: Mikrocontroller und Digitale Elektronik NMEA oder SIRF Befehle erstellen


von Johann M. (brutzler)


Lesenswert?

Hi,

Ich will eine SIRF2-Maus (RGM-2000) mit einem AVR koppeln.
Elektronisch ist alles OK.
Jetzt ist es bei der Maus aber so, daß die nach längerer 
Spannungslosigkeit nur 2 NMEA Telegramme sendet: $GPGGA und $GPVTG
Und da kam auch nur die aktuelle Uhrzeit und keinerlei 
Koordinateninformationen.

Jetzt hab ich die Maus mit einem Pegelwandler an den PC gehängt und mit 
SIRFDemo angesprochen.

Nach Umstellen auf SIRF kamen sofort Koordinateninfos. Ich hab dann 
wieder auf NMEA mit den SIRFDemo-Standardeinstellungen umgeschaltet. 
Dann lief unter NMEA alles erfolgreich. -> Es kamen auch alle "anderen" 
Telegramme.
Leider vergisst die Maus das alles wieder, wenn ich sie von Spannung 
hänge.

Also werde ich wohl im AVR am Anfang eine Sequenz schicken müssen, die 
das selbe macht wie SIRFDemo.

Die 2 Fragen ist nun:
- Kann ich mit einem NMEA Befehl die "anderen" Telegramme einschalten? 
Oder muss ich dazu auf SIRF wechseln.
- Gibt es Programme, die NMEA oder SIRF Sequenzen "erzeugen"? Ich meine 
damit, eine Eingabemaske, in der man parametriert, was man machen will 
und die dann die Sequenz (HEX-Code für Sirf, bzw. $PSRF.. für NMEA) mit 
Checksumme und allem drum und dran generiert und nur anzeigt und nicht 
sendet. Grad das mit der Checksumme ist etwas tricky für mich.

Ja, ich hab bei SIRFDemo schon einen COMPortSniffer mitlaufen lassen. 
Aber alle Befehle krieg ich so nicht raus. Z.B. das Umschalten in den 
SIRF-Modus geht bei meiner Version immer nur mit 57600Baud. Ich würde 
aber gerne hier auch bei 4800 Baud bleiben, um nicht immer die 
Schnittstelle umzuparametrieren.

gruß/brutzler

von Jim M. (turboj)


Lesenswert?

> nach längerer Spannungslosigkeit nur 2 NMEA Telegramme sendet: $GPGGA und $GPVTG
> Und da kam auch nur die aktuelle Uhrzeit und keinerlei
> Koordinateninformationen.

Vertändlich, denn die Maus hat erstmal einen Kaltstart hinlegen müssen - 
der dauert lange, 15 Minuten sind keine Seltenheit. Dabei werden die 
aktuellen Satellitendaten recht langsam übertragen.

> Leider vergisst die Maus das alles wieder, wenn ich sie von Spannung
> hänge.

Laß ihr ein paar Minuten Zeit zum warmlaufen. Dann kommen die 
entsprechenden NMEA Sequenzen automagisch.

von Ein Gast (Gast)


Lesenswert?

Johann Meier schrieb:
> Jetzt ist es bei der Maus aber so, daß die nach längerer
> Spannungslosigkeit nur 2 NMEA Telegramme sendet

Was heißt länger? Kann es sein, dass die Stützbatterie am Ende ist und 
die GPS-Maus die Almanachdaten zwischendurch vergißt?

> Nach Umstellen auf SIRF kamen sofort Koordinateninfos.
Die Datensätze vielleicht, aber gültige Daten können das noch nicht 
sein.

von Johann M. (brutzler)


Lesenswert?

Jim Meba schrieb:
>> nach längerer Spannungslosigkeit nur 2 NMEA Telegramme sendet: $GPGGA und 
$GPVTG
>> Und da kam auch nur die aktuelle Uhrzeit und keinerlei
>> Koordinateninformationen.
>
> Vertändlich, denn die Maus hat erstmal einen Kaltstart hinlegen müssen -
> der dauert lange, 15 Minuten sind keine Seltenheit. Dabei werden die
> aktuellen Satellitendaten recht langsam übertragen.

Ich hab 4 Stunden gewartet!

>
>> Leider vergisst die Maus das alles wieder, wenn ich sie von Spannung
>> hänge.
>
> Laß ihr ein paar Minuten Zeit zum warmlaufen. Dann kommen die
> entsprechenden NMEA Sequenzen automagisch.

von Johann M. (brutzler)


Lesenswert?

Ein Gast schrieb:
> Was heißt länger? Kann es sein, dass die Stützbatterie am Ende ist und
> die GPS-Maus die Almanachdaten zwischendurch vergißt?

Das mag schon sein. Was soll die Batterie eigentlich puffern?
Wenn ich im Sirf-Mode einstelle, daß ich im NMEA-Mode mehr Telegramme 
bekomme,dann hat er das nach 60sec. Spannungslosigkeit vergessen.
Kann ja auch sein, daß dies Absicht ist, um vermurkste Einstellungen 
wieder zurück zu setzen.

von A. W. (uracolix)


Lesenswert?

> Gibt es Programme, die NMEA oder SIRF Sequenzen "erzeugen"?

Fertige Programme kenne ich persoenlich nicht, ich wuerde aber so 
vorgehen:
Maus mit Laptop verbinden, im Auto spazieren fahren und die Sequenzen
in ein File loggen (natuerlich mit Chauffeur). Das spezifische 
Logger-Tool ist mit Python + pyserial schnell geschrieben, es sollte 
auch Timestamps mit loggen. Das Wiedergabeprogramm kann auch mit Python 
+ pyserial geschrieben werden und kann dann sowas wie Realtime Playback 
oder Fast Playback implementieren. Ich denke mal ca. 100 Codezeilen 
spaeter hast du die Tools.

von Joerg L. (Firma: 100nF 0603 X7R) (joergl)


Lesenswert?

Die RGM-Serie hat eine klitzekleine wiederaufladbare Li-Zelle als 
Stützbatterie. Wenn man die Maus immer neu konfigurieren muß, ist diese 
Batterie hin. Also: Batterie tauschen oder von extern Spannung 
einspeisen.

Gruß,
Jörg

von Johann M. (brutzler)


Lesenswert?

Joerg L. schrieb:
> Die RGM-Serie hat eine klitzekleine wiederaufladbare Li-Zelle als
> Stützbatterie. Wenn man die Maus immer neu konfigurieren muß, ist diese
> Batterie hin. Also: Batterie tauschen oder von extern Spannung
> einspeisen.
>
> Gruß,
> Jörg

Oder in der Startroutine meines AVR die Konfiguration zum GPS-Empfänger 
per serieller senden. :-)
Und genau das will ich ja auch machen.
Drum hab ich ja eingangs nach einem Sequenzersteller gefragt, und wollte 
wissen, ob ich zum Konfigurieren der NMEA-Telegramme auf SIRF umschalten 
muss, oder ob das im NMEA-Protokoll selber auch geht.

von spess53 (Gast)


Lesenswert?

Hi

>oder ob das im NMEA-Protokoll selber auch geht.

Hast du doch schon mit $PSRF gefunden. Genaugenommen ist das Kommando 
$PSRF103,... . Suche mal im Netz nach 'NMEA Reference Manual'. 
Allerdings wird mit leerem Akku meines Wissens bei jedem Einschalten ein 
Kaltstart durchgeführt, da noch andere Daten gepuffert werden.

>Grad das mit der Checksumme ist etwas tricky für mich.

In accordance with NMEA-0183, the checksum is calculated by taking the 8 
bit exclusive OR of all
characters between (but not including) the $ and the *. The checksum is 
then appended after the
* as a 2 character hexadecimal number.

Was ist da schwierig für dich?

MfG Spess

von Joerg L. (Firma: 100nF 0603 X7R) (joergl)


Lesenswert?

Du hast mal nach "sirf nmea commands" gegoogelt,
dabei das Dokument "SiRF NMEA Reference Manual" gefunden,
und das Kommando "103—Query/Rate Control" an der RGM getestet?
Meines Wissens nach ist in der RGM2000 ein Sirf2 Chipsatz.

Spess war schneller..

von Johann M. (brutzler)


Lesenswert?

spess53 schrieb:
> Hi
>
>>oder ob das im NMEA-Protokoll selber auch geht.
>
> Hast du doch schon mit $PSRF gefunden. Genaugenommen ist das Kommando
> $PSRF103,... . Suche mal im Netz nach 'NMEA Reference Manual'.
> Allerdings wird mit leerem Akku meines Wissens bei jedem Einschalten ein
> Kaltstart durchgeführt, da noch andere Daten gepuffert werden.
>

Ah ja. Das ist jetzt klar. Also brauch ich nicht auf SIRF umschalten um 
andere NMEA-Telegramme anzufordern :-) DANKE.


>>Grad das mit der Checksumme ist etwas tricky für mich.
>
> In accordance with NMEA-0183, the checksum is calculated by taking the 8
> bit exclusive OR of all
> characters between (but not including) the $ and the *. The checksum is
> then appended after the
> * as a 2 character hexadecimal number.
>
> Was ist da schwierig für dich?
>
> MfG Spess

Hmm... Checksummen hab ich noch nicht so richtig programmiert.
Mal schauen: Jedes Zeichen ist ein Byte. Von dem nehm ich alle 8 Bit 
XOR.
--> Wenn eine ungerade Zahl an Einsen, dann ist das Ergebnis 1, bei 
einer geraden Anzahl 0. Dann die Anzahl der Bytes mit 1er Ergebnis 
aufsummieren und dann hab ich die Checksumme?

Ist das so richtig?

Gruß/brutzler

von spess53 (Gast)


Lesenswert?

Hi

>Jedes Zeichen ist ein Byte. Von dem nehm ich alle 8 Bit
>XOR.
>--> Wenn eine ungerade Zahl an Einsen, dann ist das Ergebnis 1, bei
>einer geraden Anzahl 0. Dann die Bytes mit 1er Ergebnis aufsummieren und
>dann hab ich die Checksumme?

Nehmen wir mal als Beispiel $PSRF105,0*3F (CS=Checksumme):

CS = P (0x50)  exor S (0x53)  = 0x03
CS = CS exor R (0x52)         = 0x51
CS = CS exor F (0x46)         = 0x17
CS = CS exor 1 (0x31)         = 0x26
CS = CS exor 0 (0x30)         = 0x16
CS = CS exor 5 (0x35)         = 0x23
CS = CS exor , (0x2C)         = 0x0F
CS = CS exor 0 (0x30)         = 0x3F

MfG Spess

von Johann M. (brutzler)


Lesenswert?

spess53 schrieb:
>
> Nehmen wir mal als Beispiel $PSRF105,0*3F (CS=Checksumme):
>
> CS = P (0x50)  exor S (0x53)  = 0x03
> CS = CS exor R (0x52)         = 0x51
> CS = CS exor F (0x46)         = 0x17
> CS = CS exor 1 (0x31)         = 0x26
> CS = CS exor 0 (0x30)         = 0x16
> CS = CS exor 5 (0x35)         = 0x23
> CS = CS exor , (0x2C)         = 0x0F
> CS = CS exor 0 (0x30)         = 0x3F
>
> MfG Spess

Ahh... Verstanden. Super an einem Beispiel erklärt.
Xor der Bytes, und nicht der Bits im Byte.

Hab dazu noch was gefunden:
http://www.hhhh.org/wiml/proj/nmeaxor.html
-> Da spar ich mir das Rechnen :-)

Glaub jetzt hab ich alles für weitere "Aktionen"
Danke Jungs.

von spess53 (Gast)


Lesenswert?

Hi

>-> Da spar ich mir das Rechnen :-)

Aber nur beim Senden.

MfG Spess

von Johann M. (brutzler)


Lesenswert?

spess53 schrieb:
> Hi
>
>>-> Da spar ich mir das Rechnen :-)
>
> Aber nur beim Senden.
>
> MfG Spess

Zwingt mich ja keiner die Empfangsdaten auf CRC zu prüfen :-)))

Aber du hast recht. Jetzt nachdem ich die Syntax verstanden habe, kostet 
es mich nur einen kleinen Treiber um das zu rechnen.

gruß/brutzler

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.