PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : U-Blox GPS über Bascom Konfigurieren



Baby2b
15.09.2008, 17:53
Hallo,
ich lese mit einem ATMega8 und Bascom ein GPS-Modul von U-Blox aus. Funktioniert auch alles ganz gut. Ich betreibe das Modul mit 4Hz. Leider fällt das Modul aber immer wieder nach ein paar Wochen (wenn die SRam Batterie leer ist) in die Factory Default Werte zurück und die sind leider 1Hz. Damit das nicht passiert und ich das GPS-Modul nicht jedesmal nach längeren Stillstandszeiten mit der U-Blox Software neu konfigurieren muß würde ich es gerne über den ATMega zum beginn des Programms entsprechend konfigurieren........ich habe nur leider keine Ahnung wie das funktioniert. Die diversen USER-Manuals haben mich da auch nicht weiter gebracht. Hat von Euch jemand Erfahrung darin und weis wie das geht?



Gruß



Andreas

jeffrey
15.09.2008, 17:58
hoi,
zeichne doch einfach die zeichebnkette auuf, die die u-blox-software sende beim konfigurieren, und sende diese automatisch beim programmstart.
mfg jeffrey

Baby2b
15.09.2008, 18:37
Coole Idee,

so einen pragmatischen Tipp habe ich noch nie bekommen. Ich glaub ich mag Dich.



Gruß



Andreas

Baby2b
15.09.2008, 19:55
hallo Jeffrey,

so einfach scheint es wohl doch nicht zu sein. Ich hab das ausgelesen was an die Maus gesendet wird........ viele Y mit Ü-Pünktchen. Wie macht man sowas in Bascom???

for_ro
15.09.2008, 21:18
Sieht aus, als hättest du die ankommenden Hex-Werte einfach als String ausgegeben.
ÿ = FF = 255
Kommen denn nur diese Zeichen oder auch noch andere?
Gib sie mal als Hex-Werte aus.

Gruß

Rolf

Baby2b
15.09.2008, 21:51
Hallo Rolf,
ich muß die Werte leider so nehmen wie sie sind. Ich lese sie mit einem Terminalprogramm aus der Konfigurationssoftware von U-Blox ( nennt sich U-Center) aus. Inzwischen habe ich gelesen das das wohl binäre Kommandos sind. Weitergeholfen hat mir das aber auch noch nicht. Kannst Du mit dieser "binären" Info was anfangen?

Gruß

Andreas

for_ro
15.09.2008, 21:57
Kommen denn noch andere Zeichen?

Kopier dir die zeichen mal in einen Hex-Editor, z.B.
http://www.chip.de/downloads/Hex-Editor-MX-6.0_30351843.html

Gruß

Rolf

Baby2b
15.09.2008, 22:09
Ja es kommen auch noch andere Zeichen. Ich probier das mal mit dem HEX-Editor. Danke für den TIP.

Christian H
16.09.2008, 08:29
Hallo,

anbei die Anleitung zu den Antaris Protokoll Spezifikationen. Datei speichern und .txt in .chm ändern.

Vor einiger Zeit habe ich Versuche mit 2 U-Blox zu DGPS gemacht. Ich habe das Basic-Programm wieder ausgegraben. Danach kann man folgendermaßen mit U-Blox kommunizieren:


Beispiel: Abruf der Ephimeriden:
RXM-EPH:
Message Structure Header ID Length Payload Checksum
0xB5 0x62 0x02 0x31 0 0 Bytes CK_A CK_B

CK_A und CK_B sind Checksummen


Umgesetzt habe ich das mit folgenden BASIC Programm. Daran kann man auch erkennen wie die Checksumme berechnet wird:


Dim buffer(100) As Byte, CK_A As Byte, CK_B As Byte
buffer(1) = &HB5: buffer(2) = &H62: buffer(3) = &H2: buffer(4) = &H31: buffer(5) = &H0: buffer(6) = &H0
CK_A = 0: CK_B = 0
For i = 3 To 6
A = (CK_A + buffer(i)): CK_A = A Mod 256
B = (CK_B + CK_A): CK_B = B Mod 256
Next

B = "": For i = 1 To 6: B = B + Chr(buffer(i)): Next
MSComm1.Output = B + Chr(CK_A) + Chr(CK_B)


Die Einstellung der Übertragungsrate habe ich selbst nicht ausprobiert. Die Anweisung müßte aber folgende sein:

CFG-RATE:
Message Structure Header ID Length Payload Checksum
0xB5 0x62 0x06 0x08 6 6 Bytes CK_A CK_B
Payload Contents:

Byte Offset Number Format Scaling Name Unit Purpose / Comment
0 U2 - Meas Rate ms Measurement Rate
2 U2 - Nav Rate cycles Navigation Rate (in number of measurement cycles)
4 U2 - Time Ref - alignment to reference time:0 = UTC time, !0 = GPS time

U2 bedeutet 2 Bytes bzw Word.

Zu senden wäre also:
buffer(1) = &HB5: buffer(2) = &H62: buffer(3) = &H6: buffer(4) = &H8: buffer(5) = &H6: 'Länge
buffer(6) = &H0:buffer(7) = &HFA 'measurement rate 250 ms ?
buffer(8) = &H0:buffer(9) = &H4 'nav rate 4 ?
buffer(10) = &H0:buffer(11) = &H0 'UTC-Time
CK_A CK_B s.o.

Wie gesagt CFG-RATE habe ich nicht ausprobiert. Ich hoffe aber, dass Dir die Beispiele weiterhelfen.

Grüße
Christian

Baby2b
16.09.2008, 11:44
Hallo Christian,



danke für Deine Tipps, aber das ist für mich alles zu hoch. Buffer, checksummen usw kenne ich alles noch nicht. Ich habe jetzt eiine Beschreibung für mein GPS-Modul. Da steht auf seite 7 genau das was ich brauche. Nur ist das glaube ich alles in C. Kannst Du mir sagen wie ich die entsprechenden Befehle in Bascom abschicken muß?

Gruß

Andreas

Baby2b
16.09.2008, 11:45
Hallo Christian,



danke für Deine Tipps, aber das ist für mich alles zu hoch. Buffer, checksummen usw kenne ich alles noch nicht. Ich habe jetzt eiine Beschreibung für mein GPS-Modul. Da steht auf seite 7 genau das was ich brauche. Nur ist das glaube ich alles in C. Kannst Du mir sagen wie ich die entsprechenden Befehle in Bascom abschicken muß?

Gruß

Andreas

Christian H
16.09.2008, 12:30
in BASCOM müßte das fertig zusammengefasst und mit berechneten Checksummen so aussehen:

Ich habe die Werte so abgeändert wie sie auf Seite 7 angegeben sind.


print chr( &HB5); 'Kopfzeilen
print chr( &H62);
print chr( &H6);
print chr( &H8 );
print chr( &H6); 'Anzahl der Bytes der Botschaft = 6
print chr( &H0); '1. Byte der Botschaft
print chr( &HFA); '2.Byte Dauer der Messung 250ms = &HFA
print chr( &H0); '3.Byte
print chr( &H1); '4.Byte 1 Messungen pro Cyclus.
print chr( &H0); '5.Byte
print chr( &H0); '6.Byte 0 bedeutet: Zeiten werden in UTC angegeben
print chr( &H0F); 'Checksumme CK_A
print chr( &H94); 'CHecksumme CK_B

Dies entspricht der Abfolge der Bytes wie auf Seite 7 hier angegeben:
{0xB5,0x62,0x06,0x08,0x06,0x00,0xFA,0x00,0x01,0x00 ,0x00,0x00,
0x0F,0x94};





das ganze ist weniger kompliziert als es vielleicht zuerst aussieht.
&H.. sind die Bytes. Chr die dazugehörigen Zeichen. Diese Zeichen werden nacheinander gesendet. buffer(i) bedeutet nur das Zeichen des i-ten Byte das verschickt wird. Checksummen dienen dazu um die richtige ÜBertragung sicherzustellen. Berechnet werden sie einfach aus dem 3. bis letzten Byte das übertragen wird. Dazu musst Du Dir allerdings die Formeln ansehen wie ich sie bereits geschrieben habe. Die Checksumme ändert sich wenn Du eine andere Einstellung für die Übertragungsrate übermitteln willst.

Die Zahlen kann man natürlich auch in gewöhnlichen Dezimalzahlen angeben
&HFA = 250

statt print(&HFA); kann man also auch print(250); schreiben.

Die Übertragung der 2. Einstellung von Seite 7 erfolgt analog.

Baby2b
16.09.2008, 12:49
Danke, die Erklärung war gut. Jetzt verstehe ich schon ein bißchen mehr.

Also auf Seite 7 Steht man soll das so machen:

unsigned char Rate 4Hz[] = {0xB5,0x62,0x08,0x06,0x00,0x01,0x00,0x00,0x00,0x0F ,0x94};

wie ich inzwischen gelernt habe ist das wohl das versenden eines Hex Codes in C. Wenn ich den Code auseinanderklamüser ist er ähnlich zu deinem, aber nicht gleich.



"Die Checksumme ändert sich wenn Du eine andere Einstellung für die Übertragungsrate übermitteln willst. "???? Ist die Checksumme von der Baudrate abhängig??

Welche Zahl ist in Deinem Text hinter dem Smilie versteckt, die 08??



Gruß



Andreas

Christian H
16.09.2008, 12:53
Falls erforderlich müßte sich
unsigned char DiableGLL [] = {"$PUBX,40,GLL,0,0,0,0*5C\x0D\x0A"};
unsigned char DiableGSV [] = {"$PUBX,40,GSV,0,0,0,0*59\x0D\x0A"};
unsigned char DiableVTG [] = {"$PUBX,40,VTG,0,0,0,0*5E\x0D\x0A"};
unsigned char DiableZDA [] = {"$PUBX,40,ZDA,0,0,0,0*44\x0D\x0A"};
wie folgt übertragen lassen

Dim message as string * 35


message = "$PUBX,40,GLL,0,0,0,0*5C\x0D\x0A"
print message;
message = "$PUBX,40,GSV,0,0,0,0*59\x0D\x0A"
print message;
message = "$PUBX,40,VTG,0,0,0,0*5E\x0D\x0A"
print message;
message = "$PUBX,40,ZDA,0,0,0,0*44\x0D\x0A"
print message;

Christian H
16.09.2008, 12:56
Hi
habe zwischenzeitlich meinen Beitrag ergänzt. Hat sich wohl mit Deiner Antwort überschnitten.
Der Unterschied kommt dadurch zustande, dass ich dachte als Cycle wäre 4 anzugeben. Nach Seite 7 ist es aber 1.

Baby2b
16.09.2008, 12:57
Danke Christian, jetzt habe ich einiges gelernt. Jetzt gehe ich offline um zu schaun ob ich es auch verstanden habe und so umgesetzt bekomme.


Gruß



Andreas

Baby2b
16.09.2008, 20:19
Hallo Christian,


funktioniert leider alles nicht. Hab's den ganzen Tag bearbeitet, leider ohne Erfolg. Dem GPS-Modul ist es ziemlich egal was ich Ihm schicke. Es reagiert in keiner form. Hast Du noch ne Idee woran es liegen könnte? Gibt es da Hardwareseitig irgenwas zu beachten?



Gruß

Andreas

Christian H
16.09.2008, 21:51
Hallo Andreas,

habe soeben mein GPS (Conrad GPS CR4) ausgepackt und versucht mit Visual Basic vom PC aus über COM auf 4 Hz umzustellen.

Bei mir hat´s ebenfalls nicht geklappt. Weiß ebenfalls nicht woran´s liegt. Hardwaremäßig sehe ich kein Problem. NEMA-Daten kommen im PC an. Während der Befehl vom PC auf das GPS übertragen wird, tritt eine kurze Unterbrechung auf. Insofern bin ich sicher, dass die Befehle im GPS ankommen. Im Moment kann ich Dir keinen weiteren Tip geben.

Viele Grüsse

Christian

Baby2b
16.09.2008, 22:01
Danke für Deine Hilfe. Christian. Ich bleib dran......es gibt eine Lösung. Vielleicht gehe ich mal ins "C-Forum" und frage dort ob mir jemand mal einen File in C (so wie es auf Seite 7 steht) machen kann der funktioniert. Dann hat man was zum vergleichen. Ich melde mich wenn es was neues gibt.....scheint nicht viele zu geben die sich für das Thema interessieren.



Gruß



Andreas


Gruß

Baby2b
18.09.2008, 17:40
Hallo Christian,

hab jetzt den ersten Fortschritt. Das umstellen auf 4 HZ funktioniert so wie Du es mir beschrieben hattest. Der Fehler war das ich deine Zeilen dafür genau so abgeschrieben hatte und da war ein Fehler drin , es fehlte einmal "print chr(&H00". Sonst war Dein Tip goldrichtig! Auch das Speichern ins SRAM funktioniert so völlig problemlos. Das ausschalten der anderen NMEA-Datensätze mit dem "Stringverfahren" funktioniert allerdings immer noch nicht. Ich bleib dran.



Gruß

Andreas

Loety
17.08.2011, 02:18
....auch wenn das hier schon 3 Jahre alt ist.

Gab es eine Lösung ?

Ich stehe gerade vor dem gleichen Problem !

Viele Grüße

da_miez3
27.04.2012, 00:42
Ich auch :)

wkrug
01.05.2012, 19:28
Die Antwort, die Ihr sucht findet man im µ-Blox 5 bzw. 6 Referenz Manual.
Es müssen zum GPS-Modul verschiedene Hex Sequenzen gesendet werden.
Die Sequenz begunnt bei µ-Blox 5 mit 0xB5, 0x62.
Dann folgt die Message Class die 0x01, 0x02, 0x04, 0x05, 0x06, 0x0A, 0x0B, 0x0D sein kann.
Nun folgt die ID für die entsprechende Class.
Jetzt kommt noch ein Lengh Feld, in dem die Anzahl der folgenden Parameter angegeben wird.
Nun kommen die Parameter, die man eingestellt haben will.
Gefolgt von 2 Bytes Checksumme, die bei Class Starten und bis zum letzten Byte der Payload gehen.
Man muss ein wenig aufpassen, weil ein die Parameter von 1 Bit Werten bis zu 8 Byte pro Wert haben können.
Am Anfang der UBX Beschreibung ist eine Tabelle, was das alles bedeutet.

Irgendwo im µ-Center hab ich auch mal nen Unterordner gesehen, wo man die aktuell eingestellten Parameter auslesen kann.
Der GPS Empfänger muss dabei aber mit TxD und RxD des PC verbunden sein!
Die gefundenen Parameter könnte man dann in seinen Init String mit reinbasteln und die Konfiguration wäre erledigt.
Fragt mich aber jetzt bitte nicht wo genau das war!

Die Checksumme hab ich mit einem Programm selber berechnet, weil man sonst bei jeder kleinen Änderung sofort wieder extern die neue Checksumme berechnen müsste.