Mega8-Interrupt Output Compare "zu schnell"

Gast #2974778
Lesenswert?

Hi! Ich möchte mit meinem ATMEGA8 eine im Sekundenrhythmus blinken 
lassen und dafür die Output Compare Funktion des Timer2 verwenden. Mein 
Quartz hat eine Frequenz von 11.059 Mhz.

Der Timer soll mit einem Prescaler von 8 und einem OC-Wert von 125 einen 
Zähler laufen lassen, der alle 11059 Ticks die LED ansteuert.

Mit meinem Programm blinkt die LED aber viel zu schnell. Wo ist mein 
Denkfehler?

Fuses: 
http://www.frank-zhao.com/fusecalc/fusecalc.php?chip=atmega8&LOW=DE&HIGH=D9&LOCKBIT=FF
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <inttypes.h>
4
#define LED_DIR     DDRB
5

6
uint32_t i;
7

8
ISR(TIMER2_COMP_vect)
9
{
10
  i++;
11

12
  if (i==11059)
13
  {
14
    i=0;
15
    PORTB ^= ( 1 << PB0 );
16
  }
17
}
18

19
int main( void )
20
{
21
  DDRB = 0xFF;
22
  TCCR2 = (1<<WGM21)|(0<<WGM20);          // CTC Modus
23
  TCCR2 |= (0<<CS22)|(0<<CS21)|(1<<CS20); // Prescaler 8,    bleiben 11059000/8=1382375 Hz
24
  TCCR2 |= (0<<COM21)|(0<<COM20);         // Ports normale Funktion
25
  OCR2 = 125-1;                           // bleiben 1382375/125=11059 Hz
26
  TIMSK |= (1<<OCIE2);
27

28
  sei();
29
  for(;;){  }
30
}

Greetings
Teima

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren