mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GPS Module + ATMEGA16


Autor: Mayer Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Mayer Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so hab einmal das seriell einlesen :
#include <stdint.h>
#include <io.h>


// Definierung der baudrate

#define USART_BAUD 4800 //festgelegt von NMEA 0183 Standard

#define USART_UBBR_VALUE ((F_CPU/(USART_BAUD<<4))-1)


void USART_vInit(void)

{

  // Setzen der baudrate

  UBRRH = (uint8_t)(USART_UBBR_VALUE>>8);

  UBRRL = (uint8_t)USART_UBBR_VALUE;


  // Frameformat auf 8 Datenbits, no parity und 1 stop bit setzen

  UCSRC = (0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);


  //Einschalten des Empfängers bzw. Senders

  //UCSRB = (1<<RXEN)|(1<<TXEN);
  UCSRB = (1<<RXEN);

}


void USART_vSendByte(uint8_t u8Data)

{
  // Warten bis Byte gesendet

  while((UCSRA&(1<<UDRE)) == 0);

  // Daten übertragen

  UDR = u8Data;

}


uint8_t USART_vReceiveByte()

{
  // Warten bis ein Byte empfangen wurde

  while((UCSRA&(1<<RXC)) == 0);

  // Ausgabe der Empfangenen Bytes

  return UDR;

}


int main(void)

{

  uint8_t u8Data;


  // Initialisierung von USART

  USART_vInit();


  // Commands senden

  // NMEA enable
  USART_vSendByte('$PSRF100,1,4800,8,1,0*0C<CR><LF>')

  // GGA = Global Positioning System Fixed Data - enable
  USART_vSendByte('$PSRF103,00,01,00,01*25');

  // Endlosschleife
  for(;;)

  {

    // u8Data - Ausgabe von empfangen Bytes

    u8Data = USART_vReceiveByte();

    // USART_vSendByte(u8Data);

  }

}

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

Autor: Dodocu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3723.2475,N, 12158.3416,W

Ds ist doch:-)

Autor: jjk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>..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

Autor: Christoph Borowski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: jjk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

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.