www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EM-408 GPS-Modul/SIRF III von Binary nach NMEA umstellen


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

betreibe das oben genannte Modul an einem ATmega128.

http://www.lipoly.de/index.php?main_page=product_i...

Das Modul scheint aber im Binary Modus zu sein. Am angeschlossenen 
Display werden als Ausgabe des Moduls die Zeichen o und das Leerzeich in 
beliebiger Kombination angezeigt.

Ich krieg es leider nicht hin, dass Modula auf NMEA umzuschalten.

Laut Manual sollte es mit folgendem Befehl gehen:

A0A20018 —Start Sequence and Payload Length
810201010001010105010101000100010001000100012580 —Payload
013AB0B3 —Message Checksum and End Sequence

Ich habe dies als Code so umgesetzt:

  uart_putc('\xA0');
  uart_putc('\xA2');
  uart_putc('\x00');
  uart_putc('\x18');


  
  uart_putc('\x81');
  uart_putc('\x02');
  uart_putc('\x01');
  uart_putc('\x01');
  uart_putc('\x00');
  uart_putc('\x01');
  uart_putc('\x01');
  uart_putc('\x01');
  uart_putc('\x05');
  uart_putc('\x01');
  uart_putc('\x01');
  uart_putc('\x01');
  uart_putc('\x00');
  uart_putc('\x01');
  uart_putc('\x00');
  uart_putc('\x01');
  uart_putc('\x00');
  uart_putc('\x01');
  uart_putc('\x00');
  uart_putc('\x01');
  uart_putc('\x00');
  uart_putc('\x01');
  uart_putc('\x25');
  uart_putc('\x80');

  

  uart_putc('\x01');
  uart_putc('\x3A');
  uart_putc('\xB0');
  uart_putc('\xB3');




Dies führt aber zu keiner Veränderung. Kennt sich jemand mit der 
Thematik aus und könnte mir weiterhelfen?


Gruß
Mike

: Verschoben durch User
Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Daten schon mal als string gesendet?

Gruß Gast

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich krieg es leider nicht hin, dass Modula auf NMEA umzuschalten.

Such nach dem Programm Sirfdemo.exe. Damit geht das.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lang ist es her, aber das Problem besteht immer noch. :-(

Danke, Sirfdemo.exe kenne ich. Das ganz sollte aber mit dem µC 
konfiguriert werden. Vielleicht hat noch jemand einen Idee.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann koennte man mal abhorchen was das Sirfdemo so sendet ...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Danke, Sirfdemo.exe kenne ich. Das ganz sollte aber mit dem µC
>konfiguriert werden. Vielleicht hat noch jemand einen Idee.

Das brauchst du nicht mit dem uC machen. Wenn du mit
sirfdemo auf NMEA umgeschaltet hast, dann bleibt das
GPS auf NMEA.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm ... es gibt ja einen Manual zum SIRF III Binary Protocol:
http://www.usglobalsat.com/downloads/SiRF_Binary_P...

Auf Seite 2-6 ist der Befehl zum umschalten beschrieben, aber bei mir 
klappt das nicht.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Holger
Sicher? Bei mir wird nach längerer Zeit ohne Spannungsversorgung wieder 
auf Binary umgeschaltet.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@Holger
>Sicher? Bei mir wird nach längerer Zeit ohne Spannungsversorgung wieder
>auf Binary umgeschaltet.

Hmmm, bei mir war es jedenfalls bisher so. Falls dein GPS
sich die Daten irgendwo in einem per Goldcap oder Akku
gepufferten RAM merkt könnte es natürlich sein das die
Einstellung wieder verloren geht. Eventuell lohnt sich
ein Batteriewechsel;)

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Gerät wird nicht per Batterie betrieb und es ist unvermeidlich das 
es mal eine zeitlang nicht mit Spannung versorgt wird.

Deshalb wäre es klasse,das Ganze per µC konfigurieren zu können.
Leider klappt es bis jetzt nicht ....

Autor: Mike (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

um das ganze noch einmal aufzugreifen:

Ich habe den µC nun mit RS232-Schnittstelle eines PCs verbunden und lese 
nun ein was der µC sendet. Komischer weise gibt es unterschiede zwischen 
dem gesendeten Code und was am PC eingelesen wird.

Der Code:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <string.h>
#include <util/delay.h>
#include "uart.h"





int main (void) {



  sei();
  uart_init(UART_BAUD_SELECT(9600,1000000L));
  
  



  uart_putc('\xA0'); _delay_ms(10); 
  uart_putc('\xA2'); _delay_ms(10);
  uart_putc('\x00'); _delay_ms(10);
  uart_putc('\x18'); _delay_ms(10);


  
  uart_putc('\x81'); _delay_ms(10);
  uart_putc('\x02'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x00'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x05'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x00'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x00'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x00'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x00'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x00'); _delay_ms(10);
  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x25'); _delay_ms(10);
  uart_putc('\x80'); _delay_ms(10);

  

  uart_putc('\x01'); _delay_ms(10);
  uart_putc('\x3A'); _delay_ms(10);
  uart_putc('\xB0'); _delay_ms(10);
  uart_putc('\xB3'); _delay_ms(10);

  uart_putc('\r'); _delay_ms(10);
  
do{
  _delay_ms(500);



} while (1);

return 0;
}



Im Anhang ein Screenshot des Terminal-Programms mit den empfangenen 
Daten.

Kann sich jeman die Unterschiede erklären?

Gruß
Mike

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann sich jeman die Unterschiede erklären?

Wenn vorne eine 0 steht wird von putc scheinbar das höchste
Bit gesetzt. Keine Ahnung wo das herkommt.
Warum machst du das nicht so?:

  uart_putc(0xA0); _delay_ms(10);
  uart_putc(0xA2); _delay_ms(10);
  uart_putc(0x00); _delay_ms(10);
  uart_putc(0x18); _delay_ms(10);

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wenn vorne eine 0 steht wird von putc scheinbar das höchste
>Bit gesetzt. Keine Ahnung wo das herkommt.

Vielleicht auch wenn keine 0 davor steht. Nur dann merkt man es nicht. 
Im Programm wird nur die Baudrate initialisiert. Was ist z.B. mit der 
Anzahl der Datenbits? Für mich sieht das so aus, als wenn das Stopbit 
als Bit7 gewertet wird.

MfG Spess

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was ist z.B. mit der
>Anzahl der Datenbits? Für mich sieht das so aus, als wenn das Stopbit
>als Bit7 gewertet wird.


Ich benutze die Lib von Peter Fleury. Ich habe dort gar keine Möglickeit 
gefunden, die Anzahl der Datenbits usw. einzustellen.

Gibt es diese Möglichkeit?


Gruß
David

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Data 8 ; Stop 1 ; Parity None;

ist doch die Standardeinstellung bei einen ATmega32. Man muss doch in 
den entsprechenden Registern keinen Änderungen vornehmen, oder?




uart_putc('\xA0');

und
uart_putc(0xA0);

führen zum gleichen (falschen) Ergebnis.

Autor: Mike (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Komisch ist auch, das bei mehrmaligen senden nicht immer das gleich 
ankommt (Anhang).

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  uart_init(UART_BAUD_SELECT(9600,1000000L));

Dann nimm mal einen Quarz. Der interne RC Osci könnte schuld daran
sein das du nicht richtig sendest.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.