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ß
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.
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ß
Da war ich wohl ein wenig voreilig... schäm Ich zieh mir mal das Datenblatt. Gruß zurück AxelR.
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!
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ß
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ß
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...
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ß
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.
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.
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
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ß
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ß
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ß
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.
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
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.