Hallo, ich habe wieder mal eine Knobelaufgabe.. Also ich habe ein
Programm mit USART-Ausgabe (printf...). Compiliert für einen Mega2560
funktioniert es, compiliert für einen Mega8 nicht - da sendet die USART
in Zehnerpotenzen zu langsam (hab mal mit dem OSZI auf TXD geschaut).
Der Programmcode ist identisch, bis auf die u.g. #defines, die die
Registernamen angleichen. In UBRRH und UBRRL werden auch die gleichen
Werte geschrieben (0x33 für 1200 Baud bei 1MHz), das sagt zumindest der
Simulator.. Die Beispieltabellen für UBRR in den Datenblättern sind
identisch, bis auf die Tatsache, daß der 2560 mehrere USARTs hat. Was
kann noch die Ursache sein? Die Fuses auf dem Mega 8 sind auch ok..
1 | // je nach uC (Mega8 oder Mega2560) werden die Ports entsprechend definiert
|
2 | #if defined(__AVR_ATmega8__)
|
3 | //Alias-Namen für ATmega8
|
4 | #define MOSI 3
|
5 | #define MISO 4
|
6 | #define SCK 5
|
7 | #define SS_ORI 2
|
8 | #define SS 1 // eigentlich 0, aber ich will es selbst steuern
|
9 | #elif defined(__AVR_ATmega2560__)
|
10 | //Alias-Namen für ATmega2560 (STK600)
|
11 | #define UBRRH UBRR0H // erste Uart verwenden
|
12 | #define UBRRL UBRR0L
|
13 | #define UCSRB UCSR0B
|
14 | #define RXEN RXEN0
|
15 | #define TXEN TXEN0
|
16 | #define UCSRC UCSR0C
|
17 | #define USBS USBS0
|
18 | #define UCSZ0 UCSZ00
|
19 | #define UCSRA UCSR0A
|
20 | #define RXC RXC0
|
21 | #define UDR UDR0
|
22 | #define UDRE UDRE0
|
23 | #define MOSI 2
|
24 | #define MISO 3
|
25 | #define SCK 1
|
26 | #define SS_ORI 0
|
27 | #define SS 4 // eigentlich 0, aber ich will es selbst steuern
|
28 | #else
|
29 | #error "Dieses Programm unterstützt nur ATMega8 oder ATMega2560"
|
30 | #endif
|