Hallo,
ich bin neu in der yC Welt und habe Probleme mit der _delay_ms(1)
Funktion.
Ich verwende:
AVR Studio 4.13 Service Pack 2 Build 571 mit GCC
AVR ISP mkII Programmer
ATmega48
Ich möchte eine LED am PORTB zum blinken bringen und verwende folgenden
Code:
1 | #include <avr/io.h>
|
2 | #ifndef F_CPU
|
3 | #warning "F_CPU war noch nicht definiert!"
|
4 | #define F_CPU 8000000UL
|
5 | #endif
|
6 | #include <util/delay.h>
|
7 |
|
8 | void long_delay(uint16_t ms) {
|
9 | for(; ms>0; ms--) _delay_ms(1);
|
10 | }
|
11 |
|
12 | int main( void )
|
13 | {
|
14 | DDRB = ( 1 << PB0 ); // PB0 an PORTB als Ausgang setzen
|
15 |
|
16 | while( 1 ) { // Endlosschleife
|
17 | //PORTB = 0x00; // Testeintrag1
|
18 | //PORTB = 0x01; // Testeintrag2
|
19 | PORTB ^= ( 1 << PB0 ); // Toggle PB0 z.B. angeschlossene LED
|
20 | long_delay(1000); // Eine Sekunde warten...
|
21 | }
|
22 |
|
23 | return 0;
|
24 | }
|
Ich habe die Optimierung auf Os gestellt,
den Takt (F_CPU) richtig eingestellt,
und keine zu grossen Delaywerte laut delay.h verwendet.
Wenn ich das Programm übertrage blinkt die LED nicht. Wenn ich anstatt
des Toggelns den Testeintrag1 oder Testeintrag2 verwende kann ich die
LED ein bzw. ausschalten.
Es sieht so aus als würde das Programm nie über die Funktion
long_delay() kommen. (alles was nachher kommt wird nicht mehr
ausgeführt)
Ich hoffe jemand kann mir weiterhelfen. Mir fallen keine Möglichkeiten
mehr ein was ich noch umstellen oder umkonfigurieren könnte.
Danke Norton