Grüezi,
ich habe mir kürzlich hier aus dem Forum folgenden Code "geklaut" und
eine Testschaltung (Mega128, 16MHz) aufgebaut.
Der Timerinterrupt soll alle 1ms aufgerufen werden, und die LED im
1s-Rhytmus blinken (also 1s an, 1s aus).
Tut sie aber nicht, erst wenn ich liveled bis 4000 laufen lasse, dann
kommt das hin.
Wo liegt der Fehler ? Die Fuses stehen auf externem Takt..........
#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint16_t liveled=0;
int main()
{
DDRG = 0xff;
// CTC-Mode einstellen
TCCR0 =0;
TCCR0 |= (1<<WGM21) | (0<<WGM20);
// Prescaler einstellen 64
TCCR0 |= (1<<CS20) | (1<<CS21) | (0<<CS22);
// CTC-Vergleichswert
OCR0 = 250-1;
// Compare-Interrupt aktivieren
TIMSK |= (1<<OCIE0);
// Hilfszaehler loeschen
liveled = 0;
sei();
while (1)
{
// LiveLED steuern
if (liveled > 1000)
{
liveled = 0;
PORTG ^= (1<<PG4);
}
}
return 1;
}
/////////////////////////////////////////////////////////////////
//
//
/////////////////////////////////////////////////////////////////
ISR(TIMER0_COMP_vect)
{
liveled++;
}