Hallo,
ich weiß das das ein leidiges Thema ist aber mittlerweile bin ich echt
am Verzweifeln.
Ich bekomme kein Senden und Empfangen mit dem UART des ATMEGA32 hin.
Hardwaretechnisch müsste es in Ordnung sein, denn wenn ich den Mega aus
dem Sockel nehme und RXD und TXD verbinde, bekomme ich auf meinem
Terminalprogramm das Zeichen als Echo wieder.
In dem unteren Programm versuche ich ein Zeichen an den Mega zu senden,
und dieses dann binär an den PORTA, an welchem 8 LEDs angeschlossen
sind, auszugeben. Sobald ich allerdings das erste Zeichen mit dem PC
sende, leuchten alle LED's bis der Controller resettet wird.
Für Hilfe wäre ich sehr dankbar.
1 | /*
|
2 | *
|
3 | *
|
4 | * Created: 28.03.2014 15:42:50
|
5 | *
|
6 | */
|
7 | #ifndef F_CPU
|
8 | #define F_CPU 16000000UL
|
9 | #endif
|
10 |
|
11 | #define BAUD 9600UL
|
12 |
|
13 | //UBRR Berechnung
|
14 | #define UBRR_Val ((F_CPU/(16*BAUD))-1)
|
15 |
|
16 |
|
17 | #include <avr/io.h>
|
18 | #include <util/delay.h>
|
19 | #include <stdint.h>
|
20 | #include <stdlib.h>
|
21 | #include <avr/interrupt.h>
|
22 | #include <inttypes.h>
|
23 |
|
24 | void UARTinit(void);
|
25 | uint8_t uart_getc(void);
|
26 |
|
27 |
|
28 | int main(void)
|
29 | {
|
30 | //UART Initialisieren
|
31 | UARTinit();
|
32 | //PORTA Ausgang
|
33 | DDRA=0xff;
|
34 |
|
35 | while(1)
|
36 | {
|
37 | uint8_t c;
|
38 | c = uart_getc();
|
39 |
|
40 | PORTA = c;
|
41 | }
|
42 | }
|
43 |
|
44 | void UARTinit(void)
|
45 | {
|
46 | //UBRR set
|
47 | UBRRH=UBRR_Val >> 8;
|
48 | UBRRL=UBRR_Val & 0xFF;
|
49 | //Transmitter Enable
|
50 | UCSRB|=(1<<TXEN);
|
51 | //Receiver Enable
|
52 | UCSRB|=(1<<RXEN);
|
53 | //8bit,1Stop,No Parity
|
54 | UCSRC|=(1<<UCSZ1)|(1<<UCSZ0);
|
55 | }
|
56 |
|
57 | uint8_t uart_getc(void)
|
58 | {
|
59 | while (!(UCSRA & (1<<RXC)));
|
60 | return UDR;
|
61 | }
|