Moin Moin,
Ich hab ein seltsames Problem und weiss nicht mehr weiter:
Ich habe hier ein GPS Modul (EM-411). Dieses ist so programmiert, dass
es nur noch die $GPGGA Zeile mit nem 4800er Baud sendet.
Nun habe ich ein ATmega16 mit einem LCD, um das ganze auszuwerten.
Ich benutzte sowohl für das LCD als auch für den UART die orginalen
Peter Fleury librarys.
Nun zu meinem Problem:
Alles funktioniert so lange, bis ich die uart_init(); Zeile
auskommentiert lasse. Sobald ich diese Zeile jedoch wieder hineinnehme,
erscheint auf dem LCD nur noch "Bereit". Die LED in der While wird auch
nicht getoggelt...
Es liegt eindeutig an der uart_init(). Wenn ich die uart_getc();
rausnehme, ist nähmlich das selbe Problem noch da.
Mit dem Oszi konnte ich feststellen, dass die Daten vom GPS-Modul
richtig am RxD Pin des Mega16 ankommen. Es liegt auch nicht an einem
falschen Baud, da ich mit einer USB<-->UART Brigde die Daten korrekt
mitlesen kann.
Der Pin ist so auch "alleinstehend". Es ist sonst nichts an dem Pin
angeschlossen.
Hier die main.c
1 | #include <avr/io.h>
|
2 | #include <string.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <util/delay.h>
|
5 | #include "lcd.h"
|
6 | #include "uart.h"
|
7 |
|
8 | #ifndef F_CPU
|
9 | #define F_CPU 16000000
|
10 | #endif
|
11 |
|
12 | #define UART_BAUD_RATE 4800 //Baud = 4800
|
13 |
|
14 | int main(void)
|
15 | {
|
16 | DDRD = 0x08; //PD3 ausgang
|
17 | unsigned char c;
|
18 |
|
19 | //uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU)); //Wenn dabei, hängts wenn nichtdabei, alles ok
|
20 | sei();
|
21 | lcd_init(LCD_DISP_ON);
|
22 |
|
23 | lcd_clrscr();
|
24 | lcd_home();
|
25 | lcd_puts("Bereit"); // I am rdy
|
26 | _delay_ms(500);
|
27 |
|
28 |
|
29 | while(1)
|
30 | {
|
31 | c = uart_getc();
|
32 |
|
33 | PORTD ^= (1<<PD3); //Toggle als test
|
34 |
|
35 | lcd_clrscr();
|
36 | lcd_home();
|
37 | lcd_puts("Tetris"); //einfach was als Test
|
38 | _delay_ms(300);
|
39 | }
|
40 | }
|
Hat jemand eine Idee??
Greez Jey