Häät ich mal bloss dein Delay-Progamm kontrolliert.
Das macht nicht das, was du denkst.
Ein einfaches Testprogramm hätte so ausgesehen
1 | #define F_CPU 1600000
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | #define LED_PORT PORTC
|
7 | #define LED_DDR DDRC
|
8 | #define LED_PIN PC5
|
9 |
|
10 | int main()
|
11 | {
|
12 | LED_DDR |= (1<<LED_PIN);
|
13 |
|
14 | while( 1 ) {
|
15 | LED_PORT ^= (1<<LED_PIN);
|
16 | _delay_ms(1000);
|
17 | }
|
18 | }
|
je weniger künsteln, desto besser. Je weniger Fehlermöglichkeiten, desto
besser (dein Timer-Testprogramm hat keinen Vorteiler von 1024, wie alle
angenommen haben, sondern einen Vorteiler von 64)
Wenn du die CKDIV8 Fuse mitlrweile nicht ausgeschaltet hast, wrst du
damit nämlich merken, dass die 1 Sekunde keineswegs stimmt.
Dein µC läuft mit 2 Mhz, durch die interne Teilung durch 8. Die muss
abgeschaltet werden.