Hi alle zusammen,
wie der Titel schon sagt, habe ich ein Problem mit dem atmega32, dem
UART bzw. genauer gesagt mit der Lib von Peter Fleury.
Was definitiv läuft:
- Atmega8 mit der Lib von Peter Fleury
--> macht alles so, wie ich es mir vorstelle
- Atmega32 mit dem Code aus dem Tutorial von mikrocontroller.net:
--> Gibt also Test den Buchstaben zurück. Klappt auch wunderbar.
1 | #define BaudRate 115200UL
|
2 | #define F_CPU 22118400UL
|
3 |
|
4 | int main (void) {
|
5 |
|
6 | uint16_t ubrr = (uint16_t) ((uint32_t)F_CPU / (16*BaudRate)-1);
|
7 |
|
8 | UBRRH = (uint8_t)(ubrr >> 8);
|
9 | UBRRL = (uint8_t)(ubrr);
|
10 |
|
11 | UCSRB = (1 << RXEN)|(1 << TXEN)|(1 << RXCIE);
|
12 | // 8N1
|
13 | UCSRC = (1<<URSEL)|(1 << UPM1)|(1 << UCSZ1)|(1 << UCSZ0);
|
14 |
|
15 | unsigned char buffer;
|
16 |
|
17 | while (1) {
|
18 | while ( !(UCSRA & (1<<RXC)) ) ;
|
19 | buffer = UDR;
|
20 |
|
21 | while ( !( UCSRA & (1<<UDRE)) );
|
22 | UDR = buffer;
|
23 |
|
24 | }
|
25 | return 0;
|
26 | }
|
Binde ich nun die Lib von Peter Fleury ein, reagiert der Atmega32 leider
gar nicht mehr.
Die Anschlüsse sind aber alle in Ordnung, sonst würde der Test ja nicht
klappen. Oszillator, Baudrate und CPU Speed stimmen auch.
Habt ihr eine Ahnung, woran es liegen könnte?
Hier der Code, den ich einbinde.
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include "uart.h"
|
4 |
|
5 | int main (void)
|
6 | {
|
7 |
|
8 | uart_init(UART_BAUD_SELECT(115200, 22118400UL));
|
9 | sei();
|
10 |
|
11 | uart_puts("Es klappt!\n");
|
12 |
|
13 | while (1)
|
14 | {
|
15 |
|
16 | }
|
17 | return 0;
|
18 | }
|
Vielen Dank schonmal vorweg,
beste Grüße,
Durokh