Hallo ich habe da ein kleines Problem, ich habe eine Platine die ein Zeichen über RS232 schickt momentan ein "O". Am PC erkennt er das Zeichen und gibt es auf dem Terminal aus. Ich habe aber ein 2te Platine mit meinen AVR drauf und ein Display, dort möchte ich das Zeichen empfangen und wieder geben. Display und Atmega und funktionieren einwandfrei. Baudrate ist auch richtig eingestellt. Soweit ich das übers Debuggen raus gefunden habe hängt er in der get Routine fest, also erkennt er nicht das ein Zeichen ankommt. Die Atmega Platine habe ich erfolgreich mit dem PC getestet, sie liest Zeichen ein und gibt auch Zeichen aus.
1 | int main(void) |
2 | {
|
3 | DDRA = 0xFF; //Deklaration 11110000 1=Ausgang 0=Eingang |
4 | DDRB = 0xFF; |
5 | DDRC = 0xFF; |
6 | DDRD = 0xFF; |
7 | |
8 | |
9 | |
10 | init_uart(207); //RS232 Initialisierung |
11 | |
12 | |
13 | |
14 | InitialisierungDisplay(); |
15 | |
16 | while(1){ |
17 | |
18 | char Zeichen; |
19 | Zeichen=uart_getchar(); |
20 | printf("%c",Zeichen); |
21 | _delay_ms(1000); |
22 | DisplayLoeschen(); |
23 | |
24 | |
25 | |
26 | |
27 | }//while(1) |
28 | }//Main |
29 | |
30 | |
31 | |
32 | void init_uart (int UBRR_VAL) |
33 | {
|
34 | UCSRB |= (1<<TXEN) | (1<<RXEN); // UART TX/RX einschalten |
35 | UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron, 8Bit Framesize, Paritymode disabled, 1 Stopbit (8N1) |
36 | |
37 | UBRRH = UBRR_VAL >> 8; |
38 | UBRRL = UBRR_VAL & 0xFF; |
39 | }
|
40 | |
41 | |
42 | |
43 | |
44 | |
45 | /*---------------------------------------------------------------------------
|
46 | uart_getchar(): Empfangen einzelner Zeichen
|
47 | ---------------------------------------------------------------------------*/
|
48 | unsigned char uart_getchar (void) |
49 | {
|
50 | while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar |
51 | {
|
52 | }
|
53 | return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben |
54 | }
|