UART an GPS Empfänder

Gast #1417149
Hallo,

ich habe hier ein Navilock NL-507ETTL GPS Empfänger Modul 
(http://www.navilock.de/view/Dokumente_SLASH_Sonstiges/60415_-_Datenblatt_u-blox_GPS_Module/481)


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.

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

12
uint8_t uart_getc(void)
13
{
14
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
15
        ;
16
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
17
}
18

19
int main()
20
{
21
  int i=0;
22
  unsigned char string[16];
23
  init_LCD();
24
  USART_Init(F_CPU/(16*9600)-1);
25

26
  while(1)
27
  {
28
    for(i=0;i<16;i++)
29
    {
30
      string[i]=uart_getc();
31
    }
32
    lcd_clear();
33
    for(i=0;i<16;i++)
34
    {
35
      lcd_data(string[i]);
36
    }
37
    wait_ms(400);      // Um die empfangenen Daten auf dem LCD lesen zu können
38
    
39
  }
40
  
41
  return 0;
42
}
Gast
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.
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ß
Gast
Ich möchte jetzt die Updatefrequenz von 1 auf 4 Hz erhöhen.


Im Datenblatt findet man folgende "Anleitung":
1
unsigned char DiableGLL [] = {"$PUBX,40,GLL,0,0,0,0*5C\x0D\x0A"};
2
unsigned char DiableGSV [] = {"$PUBX,40,GSV,0,0,0,0*59\x0D\x0A"};
3
unsigned char DiableVTG [] = {"$PUBX,40,VTG,0,0,0,0*5E\x0D\x0A"};
4
unsigned char DiableZDA [] = {"$PUBX,40,ZDA,0,0,0,0*44\x0D\x0A"};
5
unsigned char SaveToSRAM [] =
6
{0xB5,0x62,0x06,0x09,0x0C,0x00,0x00,0x00,0x00,0x00,
7
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;
1
void USART_Transmit( unsigned char data )
2
{
3
  /* Wait for empty transmit buffer */
4
  while ( !( UCSRA & (1<<UDRE)) )
5
  ;
6
  /* Put data into buffer, sends the data */
7
  UDR = data;
8
}
9

10
void uart_transmit_string(unsigned char *string)
11
{
12
  unsigned int i=0;
13
  while(string[i]!=0)
14
  {
15
    USART_Transmit(string[i]);
16
    i++;
17
  }
18
}


und in der main versende ich es nun:
1
  uart_transmit_string(DisableGLL);
2
  uart_transmit_string(DisableGSV);
3
  uart_transmit_string(DisableVTG);
4
  uart_transmit_string(DisableZDA);
5
  for(i=0;i<14;i++)
6
  {
7
    USART_Transmit(Rate4Hz[i]);
8
  }



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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.