Hallo Leute, Ich bräuchte Hilfe bei einem kleinen Problem und zwar geht es um die UART Schnittstelle bei einem Atmega 32. Ich möchte den Chip mit einem PC kommunizieren lassen. Das Senden vom Chip zum Pc funktioniert wunderbar nur das Empfangen mit dem Chip klappt irgendwie nicht. Zum Testen hab ich nur eine Schleife zum Empfangen gemacht die zum Senden wird später ergänzt. Ich wäre wirklich froh wenn mir jemand helfen könnte. Vielen Dank schon mal im Voraus. Das Programm:
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <avr/pgmspace.h> |
4 | |
5 | #ifndef F_CPU
|
6 | |
7 | #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
|
8 | #define F_CPU 16000000UL
|
9 | |
10 | #endif
|
11 | |
12 | #define BAUD 9600UL
|
13 | |
14 | |
15 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
|
16 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
|
17 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)
|
18 | |
19 | uint8_t c=0; |
20 | |
21 | int main(void) { |
22 | |
23 | DDRD = 0b01100000; |
24 | void uart_init(void); |
25 | |
26 | while (1) { |
27 | uint8_t c; |
28 | uint8_t UART_getc(); |
29 | c = UART_getc(); |
30 | if(c==1) { |
31 | PORTD = 0b01100000; |
32 | }
|
33 | }
|
34 | |
35 | return(0); |
36 | |
37 | }
|
38 | |
39 | |
40 | void uart_init(void) { |
41 | |
42 | UBRRH = UBRR_VAL >> 8; |
43 | UBRRL = UBRR_VAL & 0xFF; |
44 | |
45 | UCSRB |= (1<<TXEN)|(1<<RXEN); //Sender und Empfänger Initialisieren |
46 | UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //asynchrone übertragung |
47 | |
48 | }
|
49 | |
50 | uint8_t UART_getc(void) { |
51 | |
52 | while ( !(UCSRA & (1<<RXC)) ) { //Auf ein Zeichen warten |
53 | }
|
54 | |
55 | return UDR; |
56 | }
|