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
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ß