EM-408 GPS-Modul/SIRF III von Binary nach NMEA umstellen

Gast #1732567
Lesenswert?

Hallo zusammen,

betreibe das oben genannte Modul an einem ATmega128.

http://www.lipoly.de/index.php?main_page=product_info&cPath=880_883_1336_1338&products_id=104204

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:
1
  uart_putc('\xA0');
2
  uart_putc('\xA2');
3
  uart_putc('\x00');
4
  uart_putc('\x18');
5

6

7
  
8
  uart_putc('\x81');
9
  uart_putc('\x02');
10
  uart_putc('\x01');
11
  uart_putc('\x01');
12
  uart_putc('\x00');
13
  uart_putc('\x01');
14
  uart_putc('\x01');
15
  uart_putc('\x01');
16
  uart_putc('\x05');
17
  uart_putc('\x01');
18
  uart_putc('\x01');
19
  uart_putc('\x01');
20
  uart_putc('\x00');
21
  uart_putc('\x01');
22
  uart_putc('\x00');
23
  uart_putc('\x01');
24
  uart_putc('\x00');
25
  uart_putc('\x01');
26
  uart_putc('\x00');
27
  uart_putc('\x01');
28
  uart_putc('\x00');
29
  uart_putc('\x01');
30
  uart_putc('\x25');
31
  uart_putc('\x80');
32

33
  
34

35
  uart_putc('\x01');
36
  uart_putc('\x3A');
37
  uart_putc('\xB0');
38
  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
Gast #1850206
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.
Gast #1850231
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;)
Gast #1851093
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 ....
Gast #1921286
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:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#include <stdlib.h>
5
#include <string.h>
6
#include <util/delay.h>
7
#include "uart.h"
8

9

10

11

12

13
int main (void) {
14

15

16

17
  sei();
18
  uart_init(UART_BAUD_SELECT(9600,1000000L));
19
  
20
  
21

22

23

24
  uart_putc('\xA0'); _delay_ms(10); 
25
  uart_putc('\xA2'); _delay_ms(10);
26
  uart_putc('\x00'); _delay_ms(10);
27
  uart_putc('\x18'); _delay_ms(10);
28

29

30
  
31
  uart_putc('\x81'); _delay_ms(10);
32
  uart_putc('\x02'); _delay_ms(10);
33
  uart_putc('\x01'); _delay_ms(10);
34
  uart_putc('\x01'); _delay_ms(10);
35
  uart_putc('\x00'); _delay_ms(10);
36
  uart_putc('\x01'); _delay_ms(10);
37
  uart_putc('\x01'); _delay_ms(10);
38
  uart_putc('\x01'); _delay_ms(10);
39
  uart_putc('\x05'); _delay_ms(10);
40
  uart_putc('\x01'); _delay_ms(10);
41
  uart_putc('\x01'); _delay_ms(10);
42
  uart_putc('\x01'); _delay_ms(10);
43
  uart_putc('\x00'); _delay_ms(10);
44
  uart_putc('\x01'); _delay_ms(10);
45
  uart_putc('\x00'); _delay_ms(10);
46
  uart_putc('\x01'); _delay_ms(10);
47
  uart_putc('\x00'); _delay_ms(10);
48
  uart_putc('\x01'); _delay_ms(10);
49
  uart_putc('\x00'); _delay_ms(10);
50
  uart_putc('\x01'); _delay_ms(10);
51
  uart_putc('\x00'); _delay_ms(10);
52
  uart_putc('\x01'); _delay_ms(10);
53
  uart_putc('\x25'); _delay_ms(10);
54
  uart_putc('\x80'); _delay_ms(10);
55

56
  
57

58
  uart_putc('\x01'); _delay_ms(10);
59
  uart_putc('\x3A'); _delay_ms(10);
60
  uart_putc('\xB0'); _delay_ms(10);
61
  uart_putc('\xB3'); _delay_ms(10);
62

63
  uart_putc('\r'); _delay_ms(10);
64
  
65
do{
66
  _delay_ms(500);
67

68

69

70
} while (1);
71

72
return 0;
73
}


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

Kann sich jeman die Unterschiede erklären?

Gruß
Mike
Angehängte Dateien:
Gast #1921366
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);
Gast #1921375
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
Gast #1922132
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
Gast #1924003
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?




1
uart_putc('\xA0');

und
1
uart_putc(0xA0);

führen zum gleichen (falschen) Ergebnis.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren