Forum: Mikrocontroller und Digitale Elektronik µ-Blox Protokollverständnisfrage


von Daniel L. (bucho)


Lesenswert?

Hallo Leute!

Ich hab hier das SAM-LS Modul von µ-Blox an einen Mega128 gebaut. Daten
kommen schonmal raus. Allerdings will ich die Datenausgabe etwas
konfigurieren. Zum Einstellen des USARTS wollte ich eine Proprietary
NMEA Message verwenden. Diese ist folgendermaßen aufgebaut:

$PUBX,41,usart_id,in_proto,out_proto,baudrate,autobauding*cs<CR><LF>

Ich verstehe nicht genau, wie ich die Werte in_proto und out_proto
setzen soll, um die Protokolle festzulegen, die gesendet bzw. empfangen
werden dürfen. In der Protokoll beschreibung steht nur:

Bitmask, specifying which protocols(s) are allowed for input. The
following bits are valid protocol numbers: 0: UBX 1: NMEA 2: RTCM
12-15: USER0-USER3

Ich werde aus dieser beschreibung nicht ganz schlau. Hat jemand
schonmal damit gearbeitet und kann mir einen Tip geben? Das wäre nett.
Danke und Gruß

von Axel R. (Gast)


Lesenswert?

Nunja, WAS soll denn aus USART0 rauskommen? NMEA sicher, oder?->Dann
$PUBX,41,0,1,1,19200,0*CHECKSUMME<CR><LF>
Ich denke nicht, dasss Du an USART1 was machen willst?

Die Datanausgabe etwas konfigurieren?
Mit dem Befehl $PUBX stellst Du nur das Protkoll und die Baudrate ein.

Wäre es für dich nicht interessanter, zB nur die NMEA Sätze GGA und RMC
alle Sekunde zu konfigurieren? Das geht mit diesem Befehl leider nicht.

von Daniel L. (bucho)


Lesenswert?

Aus dem USART soll NMEA rauskommen. Ich will USART1 verwenden. USART0
gibt es bei diesem Modul nicht; nur USART1 und 2. Wie ich die Ausgabe
der NMEA-Sätze konfiguriere, weis ich. Mir geht es nur darum
einzustellen, daß am USART1 NMEA mit 9600 Baud ausgegeben wird. Ich
glaube nicht, daß für in_proto und out_proto eine 1 reicht denn im
Beispiel steht folgendes Konstrukt:

$PUBX,41,1,0007,0003,19200,0*25<CR><LF>

Also für die Bitmasken steht da: 0007 und 0003.
Allerdings steht nicht dabei, was man damit einstellt. Ich verstehe
nicht genau wie diese Bitmasken gebildet werden. Hat hier noch keiner
mit diesem Modul gearbeitet?

Gruß

von Axel R. (Gast)


Lesenswert?

Da war ich wohl ein wenig voreilig... schäm

Ich zieh mir mal das Datenblatt.
Gruß zurück
AxelR.

von Axel R. (Gast)


Lesenswert?

PUBX 41 - Set Protocols and Baudrate
$PUBX,41,usart_id,in_proto,out_proto,baudrate,autobauding*cs<CR><LF>


Name ASCII String Units Description
Format Example
$PUBX  string  $PUBX    Message ID  Proprietary NMEA sentence header
41  numeric  41      Proprietary message identifier
usart_id    1    USARTID  Range: 0..2
in_proto  hexadecimal  0007    Input Protocol Mask  Bitmask, specifying
which protocols(s) are allowed for input. The following bits are valid
protocol numbers: 0: UBX 1: NMEA 2: RTCM 12-15: USER0-USER3
out_proto  hexadecimal  0003    Output Protocol Mask  Bitmask,
specifying which protocols(s) are allowed for output. The following
bits are valid protocol numbers: 0: UBX 1: NMEA 3: RAW 12-15:
USER0-USER3
baudrate    19200  bits/s    Baudrate
autobauding  numeric  0      Autobauding:
1 = enable
0 = disable
cs  hexadecimal  *25    checksum  Message checksum
<CR> <LF>          End of message


Example

$PUBX,41,1,0007,0003,19200,0*25<CR><LF>

Soo, jetzt siehts etwas klarer aus:
die 0007 bedeutet, dass Bit 0,1,2 gesetzt sind, also
UBX(Bit0) erlaubt ist, NMEA(Bit1) erlaubt ist und ebenso RTCM(Bit2)
erlaubt ist.
Wenn Du ausschliesslich mit NMEA arbeiten willst, darfst Du nur Bit1
setzen.
Folglich war mein Post sowieso falsch .-(

Wenn Du nur NMEA Daten "ziehen"(also ausgeben) willst, musst Du
folglich auch Bit1 in der Bitmaske für proto_out setzen.

Input: erlaubte werte

2^0  =     1 => UBX
2^1  =     2 => NMEA
2^2  =     4 => RTCM
2^3 bis 2^11 nicht definiert
2^12 =  4096 => User0
2^13 =  8192 => User1
2^14 = 16384 => User2
2^15 = 32768 => User3

Je nach dem, was Du nun machen möchtest, addierst Du alles zusammen,
rechnest nach HEX um trägst das entsprechend ein.

Bei output werden andere Werte aktzeptiert, das Prinzip ist das
gleiche.
2^0 = 1 => UBX
2^1 = 2 => NMEA
2^2 = 4 nicht definiert
2^3 = 8 => RAW
2^4 bi 2^11 nicht definiert
2^12 =  4096 => User0
2^13 =  8192 => User1
2^14 = 16384 => User2
2^15 = 32768 => User3

könnte man auch anders schreiben (quer von links nach rechts), bekomme
ich aber nicht hin (inselbegabung gg )

NMEA aus UART1 in+out mit 9K6 sähe dann so aus.
$PUBX,41,1,0002,0002,9600,0*CHECKSUMME<CR><LF>

Die Checksumme  musst Du alleine ausrechnen XOR über alles ausser
"Dollar" und "stern", glaube ich. Bin mir aber nicht sicher!

von Daniel L. (bucho)


Lesenswert?

AAAAHHHHHH! Jetzt geht ein Licht auf. Vielen Danke. DAs mit der
Checksumme ist kein Problem, daß krieg ich hin. Werde gleich mal ein
wenig experimentieren und gucken ob das klappt. Nochmals Danke für
Deine Bemühungen.

Gruß

von Daniel L. (bucho)


Lesenswert?

Schade, kommt nur Kraut und Rüben raus. Da muß irgendwo anders noch ein
Fehler sein. Ich denke, daß das Protokoll so richtig ist, wie Du es
geschrieben hast. Naja, mal schauen.

Gruß

von Marco S. (masterof)


Lesenswert?

abo

von Axel R. (Gast)


Lesenswert?

Ja, steht sicher auf UBX.
BTW: wenn man schon länger mit dem Zeuchs zu tun hat, wird man eh auf
UBX umstellen, ist mehr an infos drinne.
Kannst ja vom "Gemüsegarten" einen Scrennshot machen. kannst Du die
Werte in HEX ausgeben lassen?
Andere Baudrate hast Du sicher schon probiert...

von Daniel L. (bucho)


Angehängte Dateien:

Lesenswert?

Im Anhang ist ein Bild davon. Ich habe alle möglichen Baudraten
ausprobiert. Laut Datenblatt sollte aber Defaultmäßig NMEA bei 9600
Baud rauskommen. Ich vermute eher einen Bauraten- oder Hardwarefehler,
denn die Daten kommen Bruchstückweise und nicht als ganze Sätze raus.
Manchmal hängt sich Hyperterminal auch auf. Vielleicht liegt es auch an
der Hardware, die ich dazwischen gesetzt hab um die 5V Pegel auf 3V3
umzusetzen. Auch weis ich nicht genau ob das Signal invertiert ist.
Aber eigentlich müßten die Signale so rauskommen, daß man sie direkt an
den UART eines µCs stricken kann. Ich habe leider kein Oszi hier um die
Pegel zu überprüfen.

Gruß

von Axel R. (Gast)


Lesenswert?

Man kann ja auch was andres nehm, als ausgerechnet Lehm (altes Berliner
Volkslied)

Probier mal ein anderes Prog als wie als Hyptertrm.
Sieht sehr nach "invertiert" aus.

Gab es hier in der leztzen Woche schonmal einen Thread drüber. sah
ähnlich aus, finde ich jezt (auf Anhieb) nicht mehr. Muss ich mal
meinen email Posteingang durchforsten.

von Daniel L. (bucho)


Lesenswert?

So, ich hab jetzt endlich die richtige Baurate gefunden. Es kommen UBX
Daten raus. Hab jetzt mal
$PUBX,41,1,0002,0002,9600,0*CHECKSUMME<CR><LF> an das Modul geschickt,
aber nix ändert sich. Naja, immerhin ein kleiner Schritt weiter, aber
leider funzt es noch nicht so, wie ich es mir vorstelle.

von Axel R. (Gast)


Lesenswert?

Was hast als Checksumme? kann ja nur die noch falsch sein...
Oder - da er ja keine USART0 hat, fängt der Index für die USARTs bei
NULL an und nicht bei EINs

von Daniel L. (bucho)


Lesenswert?

Hallo...

Checksumme ist 14. Ich bin mir sicher, daß sie richtig ist. Hab mir
nämlich ein Programm zum Senden von NMEA-Atrings geschrieben, daß hat
immer funktioniert. Ich probier nochmal andere UART-Nummern.

Gruß

von Daniel L. (bucho)


Lesenswert?

Hmm, hab für den UART 0-2 alles durchprobiert. Zeigt leider keine
Wirkung. Ich seh das schon allein daran, daß die Baudrate nicht
geändert wird. Verdammte Axt, das kann doch nicht so schwer sein, einen
Einfachen Befehl laut Datenblatt an das Modul zu schicken!

Gruß

von Daniel L. (bucho)


Lesenswert?

Sooo. Inzwischen bin ich etwas schlauer. Da da Modul auf UBX
konfiguriert war, muß die Umstellung ja auch im UBX-Format vorgenommen
werden. Ich habe mir jetzt U-center von der U-Blox Homepage
runtergeladen und das Modul an den Comport angebaut. Ich kann Buadrate
und Protokoll ändern. Die Kommunikation zum Modul funktioniert.
Allerdings kann ich die Einstellungen im Modul nicht fest speichern,
sodaß sie nicht flüchtig sind. Ich habe gehört, daß man dazu unter
Tools/Configuration einmal die Einstellungen auslesen und dann wieder
schreiben muß; dabei ist dann das Kontrollkästchen zu makieren, daß die
Daten fest gespeichert werden sollen. Soweit sogut, daß Problem ist
jetzt, daß wenn das Modul auf NMEA eingestellt ist, kann man die
Einstellungen nicht lesen/schreiben. DAs funzt nur, wenn das Modul auf
UBX eingestellt ist. Das ist natürlich ein Problem, wenn man NMEA haben
will. Gibts noch ne andere Möglichkeit, die Einstellungen fest zu
speichern?

Gruß

von Axel R. (Gast)


Lesenswert?

Hi, Du brauchst die Flash Update SW und den Flashloder.bin (komme jetzt
nicht auf die Dateieendung) Damit geht das dann. Stellt man einmalig
ein und gut.
Gibt es auch bei ublox.

von Daniel L. (bucho)


Lesenswert?

Danke, ich schau mal.


Gruß

von mgiaco (Gast)


Lesenswert?

Wie kann man den das Modul umstellen das UBX Daten herauskommen, wenn
ich das mit dem u-center umstelle kommt nichts mehr. Nur wenn ich NEMA
einstelle kommen Daten.

Besten Dank,

mfg mathias

von MM (Gast)


Lesenswert?

Hier mal ein kleines C-Progrämmchen zur Berechnung der Prüfsumme 
(einfach bei str den gewünschten Text eingeben):
1
#include <stdio.h>
2
int main()
3
{
4
  char* str =  "$PUBX,41,1,0007,0003,38400,0";
5
  
6
  unsigned char checksum = 0;
7
  
8
  int i;
9
  printf("%s\n", str);
10
    
11
  while (*str++)
12
  {
13
  //printf("%c\n", *str); 
14
  checksum ^= (unsigned char)*str;       
15
  }
16
    
17
  printf("CHECKSUM: 0x%02X \n", checksum);
18
    
19
  return 0;
20
}

von Purzel H. (hacky)


Lesenswert?

Cool.

von Äxl (geloescht) (Gast)


Lesenswert?

Haha, witzig:
gibt es "sowas" überhaupt noch.
War 'ne schöne Zeit - mehr als 10Jahre her. Kommt mir vor, als wenns 
vorgestern war, konnte mich sofort an jedes Wort erinnern. :)
LG
Äxl

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.