Hallo, ich versuche gearde seriell Daten zu Empfangen. Ich verwende HTERM und gebe unten als ASCII eine 1 ein und sende diese an mein selbst entwickeltes Board. Das Board funktioniert soweit. Senden funktioniert aufjedenfall. Ich habe mich an das Tutorial angelehnt, aber sscheibar funktioniert es nicht. Später sollen auch mehr stellige Zahlen übertragen werden z.B. 4010. Zum überprüfen ob ich den gesendeten wert 1 erhalte, habe ich eine LED test Routine programmiert.
1 | //+++++++++++++++UART Init+++++++++++++++
|
2 | |
3 | void uart_init(void) { |
4 | UBRR0H = UBRR_VAL >> 8; |
5 | UBRR0L = UBRR_VAL & 0xFF; |
6 | |
7 | UCSR0B |= (1<<TXEN0) |(1<<RXEN0); |
8 | UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00); |
9 | }
|
10 | |
11 | |
12 | //+++++++++++++++Get Werte+++++++++++++++
|
13 | |
14 | uint8_t uart_getc(void) { |
15 | while (!(UCSR0A & (1<<RXC0))) // warten bis Zeichen verfuegbar |
16 | ;
|
17 | return UDR0; // Zeichen aus UDR an Aufrufer zurueckgeben |
18 | }
|
19 | |
20 | |
21 | void uart_gets( char* Buffer, uint8_t MaxLen ) { |
22 | uint8_t NextChar; |
23 | uint8_t StringLen = 0; |
24 | |
25 | NextChar = uart_getc(); // Warte auf und empfange das nächste Zeichen |
26 | |
27 | // Sammle solange Zeichen, bis:
|
28 | // * entweder das String Ende Zeichen kam
|
29 | // * oder das aufnehmende Array voll ist
|
30 | while( NextChar != '\n' && StringLen < MaxLen - 1 ) { |
31 | *Buffer++ = NextChar; |
32 | StringLen++; |
33 | NextChar = uart_getc(); |
34 | }
|
35 | |
36 | // Noch ein '\0' anhängen um einen Standard
|
37 | // C-String daraus zu machen
|
38 | *Buffer = '\0'; |
39 | }
|
40 | |
41 | |
42 | |
43 | //+++++++++++++++MAIN+++++++++++++++
|
44 | |
45 | |
46 | int main (void) { |
47 | |
48 | //+++++++++++++++Variablen+++++++++++++++
|
49 | |
50 | char Line[4]; |
51 | int16_t get; |
52 | |
53 | //+++++++++++++++Initalisiere+++++++++++++++
|
54 | |
55 | uart_init(); |
56 | |
57 | //+++++++++++++++Start+++++++++++++++
|
58 | |
59 | while (1){ |
60 | |
61 | |
62 | //+++++++++++++++Get Werte+++++++++++++++
|
63 | |
64 | |
65 | |
66 | if (UCSR0A & (1<<RXC0)){ |
67 | |
68 | uart_gets( Line, sizeof( Line ) ); |
69 | |
70 | get = atoi (Line); |
71 | |
72 | if (get == 1){ |
73 | |
74 | //+++++++++++++++++LED TEST+++++++++++++++++//
|
75 | PORTC |= (1<<PC0); // Ausgang auf 1 |
76 | _delay_ms(500); |
77 | PORTC |= (1<<PC1); |
78 | _delay_ms(500); |
79 | PORTC |= (1<<PC2); |
80 | _delay_ms(500); |
81 | |
82 | PORTC &= ~(1<<PC0); // Ausgang auf 0 |
83 | _delay_ms(500); |
84 | PORTC &= ~(1<<PC1); |
85 | _delay_ms(500); |
86 | PORTC &= ~(1<<PC2); |
87 | _delay_ms(500); |
88 | //+++++++++++++++++LED TEST+++++++++++++++++//
|
89 | }
|
90 | |
91 | }
|
92 | {
|
93 | }
|
94 | |
95 | }
|
96 | }
|