Hallo Leute,

habe heute wieder mal ein Problem wo ich nicht weiter komme. Ich habe ein Atmega 328P. Dort habe ich mir ein kleines Programm geschrieben wo eine LED blinken soll. Das macht sie auch, aber das Timing ist falsch. Wenn ich dort 100ms Toogle Time einstelle, blinkt der in 500ms Takt. Bei anderen Wartezeiten ist es ähnlich. Immer so 4-5x länger als geplant.

Dachte mir, ok, ist der Clock falsch eingestellt. Aber steht in den Fuses auf 8MHz. Habe ir auch auf Pin PB0 die Taktfrquenz ausgeben lassen und mitten Oszi nachgemessen. Die Quarzfrequenz passt. Also letzte Idee habe ich mir ein kleines Bascom Programm geschrieben. Da geht alles supi. Also habe ich irgendwo ein Problem im C-Programm. Finde den Fehler aber nicht. Aber vielleicht ihr

Code:
#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU
#define F_CPU 8000000UL     /* Quarz mit 8 Mhz  */
#endif
     
int main( void )
{

    DDRB |= (1<<PB5) | (1<<PB4); //als Ausgang

    PORTB |= 0b00100000; //setzte von PB5 und PB4 nicht 

    while(1) // Endlosschleife
    {  
        PORTB ^= (1<<PB5) | (1<<PB4);  // Toggle PB0 z.B. angeschlossene LED
                
        _delay_ms(100);        // warten...
                
    }
    return 0;
}
Ich programmiere mit AVR Studio 5.

Thx for help

Filzlaus