hallo,
hab ein großes problem . ich sollte von einem gps module (EM-401 -
Datasheet im Anhang) der längen und breitengrad auslesen und diesen an
einem lcd display ausgeben.
das gps module hab ich an meiner programmieschaltung angeschlossen (TX -
TXD)
nun weiß ich aber nicht wie ich seriell einlesen kann. kann mir
vielleicht jemand ein codebsp geben?
// GGA = Global Positioning System Fixed Data - enable
82
USART_vSendByte('$PSRF103,00,01,00,01*25');
83
84
// Endlosschleife
85
for(;;)
86
87
{
88
89
// u8Data - Ausgabe von empfangen Bytes
90
91
u8Data=USART_vReceiveByte();
92
93
// USART_vSendByte(u8Data);
94
95
}
96
97
}
kann mir jemand erklären wie ich nun den längen und breitengrad
rausbekomme? - hab beim modul GGA aktiviert:
$GPGGA, 161229.487,3723.2475,N, 12158.3416,W, 1,07,1.0,9.0,M, 0000*18
>..das gps module hab ich an meiner programmieschaltung angeschlossen (TX ->TXD)
Was fuer eine "programmieschaltung"?
TxD (Pin5) gehoert ausserdem an RxD des UART/Atmega und RxD (Pin4) an
TxD.
Da das Modul nur TTL mit 0/2.85V ausgibt wird es nur mit etwas Glueck
funktionieren oder wenn der Atmega auch mit 3.3 Volt laeuft. Sonst
brauchst Du wohl einen Pegelwandler oder nimm gleich einen MAX232 und
Anbindung an PC/Terminalprogramm bzw. SiRF Demo.
>hab beim modul GGA aktiviert:
Das glaub ich nicht:
>'$PSRF103,00,01,00,01*25')
Fehlt da nicht <CR> <LF> ?
Das hier hast Du zwar sehr schoen abgeschrieben:
'$PSRF100,1,4800,8,1,0*0C<CR><LF>'
...aber die Checksum "0C" ist fuer Port0 und 9600 Baud:
"Switch to SiRF binary protocol at 9600,8,N,1
$PSRF100,0,9600,8,1,0*0C<CR> <LF>"
Warum Du ueberhaupt auf die Idee kommst dem Modul noch mal die
Default-Protokolleinstellungen zu schicken verstehe ich nicht so ganz.
Das Ding laeuft doch per Werkseinstellung eh schon mit 4800/8N1.
Und das hier ist lediglich der Beispiel-String aus dem Manual:
>$GPGGA, 161229.487,3723.2475,N, 12158.3416,W, 1,07,1.0,9.0,M, 0000*18
Die Erklaerung ist in der Tabelle darunter. Da findest Du detailliert
beschrieben wie der String zu lesen ist.
Zur Sicherheit:
Entlade mal den SuperCap oder loete einen Anschluss ab dann hast Du
wieder die Werkseinstellungen, egal was Du bisher mit dem Modul
angestellt hast, sofern es noch intakt ist.
Per Reset Command sollte man sowas besser nicht machen da dann sowohl
der werksseitige eingespeicherte Almanac verloren geht als auch der
Oscillator Offset! Dann wuerde ein Cold Start vor Allem wg fehlendem
Oscillator Offset etwas dauern, das ist eine SiRF-spefische Eigenart.
Ich wuerde versuchen das Teil erst mal via MAX232 am PC zum Laufen zu
bekommen. Danach kannst Du darueber nachdenken wie Du die NMEA Strings
via Atmega abspeicherst und die gewuenschten Daten rausfilterst. NMEA
Protokollkenntnisse und die Bedeutung der Kommata sind dabei hilfreich:
NMEA Strings haben dummerweise keine fixe Laenge, wenn Daten fehlen
werden die entsprechenden Stellen ausgelassen: Also etwa so
...12345,,,678..
Man muss also die Kommata zaehlen um an bestimmte Datensaetze innerhalb
eines Strings zu kommen und ueberpruefen, ob nach dem gewuenschten Komma
auch tatsaechlich Daten anliegen.
Wenn z.B. bei GGA zwar die Uhrzeit schon vorliegt, aber noch keine
Position, dann sieht das eben so aus:
$GPGGA, 161229.487,,,
juergen
Hallo,
also wenn es nur um das Datenformat angeht... unter Google die
Suchbegriffe 'NMEA 0183' eingeben. Über Wikipedia kommt man sehr schnell
auf Links wie:
- http://www.werple.net.au/~gnb/gps/nmea.html
- http://gpsd.berlios.de/NMEA.txt
- ...
Also, mich wundert es manchmal schon, dass es Leute gibt, die zwar ein
GPS-Modul an einen Mikrocontroller angeschlossen bekommen, aber eine
Google-Recherche von 15sek nicht hinkriegen?!
Gruss
Christoph
>Also, mich wundert es manchmal schon, dass es Leute gibt, die zwar ein>GPS-Modul an einen Mikrocontroller angeschlossen bekommen...
Wenn er, wie eingangs geschrieben, TxD mit TxD verbindet scheitert er ja
da schon...
>.. aber eine Google-Recherche von 15sek nicht hinkriegen?!
Full ACK.
Manuals/Dokus lesen und verstehen hilft auch ungemein ;)
juergen