Forum: Mikrocontroller und Digitale Elektronik Mega8-Interrupt Output Compare "zu schnell"


von Teima (Gast)


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

von Stefan E. (sternst)


Lesenswert?

Teima schrieb:
> Wo ist mein
> Denkfehler?

Darin, dass du denkst einen Prescaler von 8 eingestellt zu haben.

von Teima (Gast)


Lesenswert?

Danke!

von Ingo (Gast)


Lesenswert?

Nur so am Rande, i kann auch 16Bit sein...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.