Elektrotiger schrieb:
> Meine Vermutung ist, dass der Compiler die delay Zeiten nicht richtig
> übersetzt:
Dann solltest du das testen.
Häng an einen Portpin eine LED drann und schreib dir ein Testprogramm
1 | #define F_CPU ..... dein tatsächlicher Wert
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | #define LED_DDR DDRB
|
7 | #define LED_PORT PORTB
|
8 | #define LED_BIT PB3
|
9 |
|
10 | int main()
|
11 | {
|
12 | LED_DDR |= ( 1 << LED_BIT );
|
13 |
|
14 | while( 1 )
|
15 | {
|
16 | LED_PORT |= ( 1 << LED_BIT );
|
17 | _delay_ms( 1000 );
|
18 | LED_PORT &= ~( 1 << LED_BIT );
|
19 | _delay_ms( 1000 );
|
20 | }
|
21 | }
|
setz für F_CPU den bei dir relevanten Wert ein, setz die Makros auf Port
und Bit an dem du tatsächlich eine LED drann hängen hast und wenn alles
richtig ist, dann blinkt die LED im Sekundentakt. Ist die LED NICHT 1
Sekunde an bzw. 1 Sekunde aus, dann hast du Grund zur Fehlersuche.
Stimmen die Zeiten aber, dann ist soweit mit den _delays erst mal alles
korrekt.
Und nur zur Klarheit: Wenn da was schief geht, sei es zb, dass der
Prozessor gar nicht mit der in F_CPU angegebenen Taktfrequenz läuft
und/oder die Optimierung nicht eingeschaltet ist, dann sind die Zeiten
so grob daneben, dass man das leicht mit freiem Auge erkennen kann.