Hallo,
ich habe ein Problem bei dem ich einfach nicht weiterkomme.
Ich habe einen ATMEGA168 mit 3,64Mhz externen Quarz; Baudrate 9600;
1 | #define UART_BAUD_RATE 9600
|
2 | #ifndef F_CPU
|
3 | #define F_CPU 3686411 //3686411 // CPU Takt
|
4 | #endif
|
5 |
|
6 | void initUART()
|
7 | {
|
8 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
|
9 | }
|
Für das Senden und Empfangen von Zeichen, nutze ich die Bib. von Peter
Fleury.
Ein PC tauscht mit dem MC Daten in folgender Form aus:
1;1;0;1;90;1;0;94
Zum Testen, sende ich die o.g. Zeile über das Hyperterminal.
Das Hypterterminal ist ebenfalls wie o.g. konfiguriert: 9600 8-N-1
Der Controller ließt den String ein und speichert ihn dann in einer
Struktur (das übernimmt dann die Funktion SplitString()).
1 | // Deklarationen
|
2 | volatile unsigned int c = 0;
|
3 | volatile char bufferUart[32] = { 0 };
|
4 | volatile unsigned int i_while = 0;
|
5 |
|
6 | void uart_polling(void)
|
7 | {
|
8 | // Hole Zeichen aus UART
|
9 | c = uart_getc();
|
10 |
|
11 | if ( c & UART_NO_DATA ) { }
|
12 | else if ( c & UART_FRAME_ERROR )
|
13 | {
|
14 | uart_puts("MSG: UART Frame Error\r");
|
15 | }
|
16 | else if ( c & UART_OVERRUN_ERROR )
|
17 | {
|
18 | uart_puts("MSG: UART Overrun Error\r");
|
19 | }
|
20 | else if ( c & UART_BUFFER_OVERFLOW )
|
21 | {
|
22 | uart_puts("MSG: Buffer overflow error\r");
|
23 | }
|
24 | else
|
25 | {
|
26 | // Schreibt den Buffer voll bis EOT
|
27 | if ( c != 4) // 4 = EOT
|
28 | {
|
29 | bufferUart[i_while] = c;
|
30 | i_while++;
|
31 | } else // Wenn EOL erreicht
|
32 | {
|
33 | --i_while;
|
34 | // EOT löschen und \0 anhängen, damit str_tok einen String erkennt
|
35 | bufferUart[i_while] = '\0';
|
36 |
|
37 | // Splitte String
|
38 | SplitString (bufferUart);
|
39 |
|
40 | i_while = 0;
|
41 | }
|
42 | }
|
43 | }
|
Ich hatte schon einige anderen Varianten mit # als Abschlusszeichen etc.
aber das war auch nicht der Hit.
Wenn ich jetzt die Zeile
1;1;0;1;90;1;0;94
über das Hyperterminal schicke, bekomme ich immer Frame Errors.
Ich glaub ich seh den Wald vor lauter Bäumen nicht.
Wer weiß Rat?
Danke schonmal!