www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART an GPS Empfänder


Autor: Tim F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe hier ein Navilock NL-507ETTL GPS Empfänger Modul 
(http://www.navilock.de/view/Dokumente_SLASH_Sonsti...)


Ein ATmega32 (@ 16 Mhz) ist mit dem Modul verbunden und gibt die 
empfangenen Daten auf einem Display aus. Ich empfange zwar ein Zeichen 
nach dem anderen, diese bestehen aber weniger aus Zahlen oder unserem 
Alphabet sondern überwiegend.... andere Zeichen.


Interessanterweise wiederholt das LDC mehrere Zeichenketten immer mal 
wieder. (alle 400 ms wird das Lesen und Ausgeben auf dem LCD wiederholt)


Vielleicht hat ja jemand von euch eine Idee? Danke.

void USART_Init( unsigned int baud )
{
  /* Set baud rate */
  UBRRH = (unsigned char)(baud>>8);
  UBRRL = (unsigned char)baud;
  /* Enable receiver and transmitter */
  UCSRB = (1<<RXEN)|(1<<TXEN);
  /* Set frame format: 8data, 1stop bit, no parity */
  UCSRC = (1<<URSEL)|(3<<UCSZ0);
}

uint8_t uart_getc(void)
{
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
        ;
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
}

int main()
{
  int i=0;
  unsigned char string[16];
  init_LCD();
  USART_Init(F_CPU/(16*9600)-1);

  while(1)
  {
    for(i=0;i<16;i++)
    {
      string[i]=uart_getc();
    }
    lcd_clear();
    for(i=0;i<16;i++)
    {
      lcd_data(string[i]);
    }
    wait_ms(400);      // Um die empfangenen Daten auf dem LCD lesen zu können
    
  }
  
  return 0;
}

Autor: Andi ... (xaos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. funktioniert das lcd mit statischem text ?
2. stimmt die baudrate vom gps?

Autor: Tim F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andi, danke für deinen Support.


1. Ja, das Display funktioniert.
2. Ja, die Baudrate ist im Datenblatt mit 9600 bps angegeben.


Was ich ebenfalls beobachtet habe; obwohl die Wartefunktion 400 ms 
wartet aktualisiert sich das Display 1 mal pro Sekunde. Im Datenblatt 
des Empfängers steht auch, dass die Daten 1 mal pro Sekunde verschickt 
werden.

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
nicht ausprobiert aber. Aber rate mal das das nit klappt.
>USART_Init(F_CPU/(16*9600)-1);
Ich vermute mal einfach wegen den 9600 nimmt er "int" an und läuft mit 
dem mal 16 über.

Ich würde mal probieren:
#define F_CPU    16000000UL
#define BAUD     9600UL
#define UBRRVAL (F_CPU/(BAUD*16)-1)

und dann aufruf der Funktion:
USART_Init(UBBRVAL);

Hoffe es klappt, wie gesagt nicht getestet.
Gruß

Autor: Tim F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jop, das wars.


Vielen Dank!!!!!!!!!!

Autor: Tim F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte jetzt die Updatefrequenz von 1 auf 4 Hz erhöhen.


Im Datenblatt findet man folgende "Anleitung":
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"};
unsigned char SaveToSRAM [] =
{0xB5,0x62,0x06,0x09,0x0C,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x17,0x75};


Da geh ich mal davon aus, dass man dies hintereinander an dem Empfänger 
verschicken soll.

Dies habe ich so gemacht;
void USART_Transmit( unsigned char data )
{
  /* Wait for empty transmit buffer */
  while ( !( UCSRA & (1<<UDRE)) )
  ;
  /* Put data into buffer, sends the data */
  UDR = data;
}

void uart_transmit_string(unsigned char *string)
{
  unsigned int i=0;
  while(string[i]!=0)
  {
    USART_Transmit(string[i]);
    i++;
  }
}


und in der main versende ich es nun:
  uart_transmit_string(DisableGLL);
  uart_transmit_string(DisableGSV);
  uart_transmit_string(DisableVTG);
  uart_transmit_string(DisableZDA);
  for(i=0;i<14;i++)
  {
    USART_Transmit(Rate4Hz[i]);
  }



Die Updatefrequenz ist jetzt leider immer noch auch 1 Hz. Kann mir 
jemand helfen? Danke.

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.