Timer soll Interrupt auslösen [mega16]

Gast #774375
Lesenswert?
• ▲
▼
Moin,

habe ich das richtig verstanden? (Timer0, 4MHz):

TCCR0 |= (1<<CS00)|(1<<CS02);  // Enabled den Timer und setzt Prescaler 
auf 1024
TIMSK |= (1<<TOIE0); // Enabled den Interrupt für den Timeroverflow
sei();               // Interrupts gloabel Enablen

Heißt so viel wie der Timer wird gestartet und es treten (4000000 / 
1024) / 256 = 15.25 Overflows auf in einer Sekunde. Bei jedem Overflow 
wird das TOV0 Flag im TIVR Register gesetzt und ein 
Timer-Overflow-Interrupt angestoßen.

So, wenn das jetzt soweit richtig ist. Wie kann ich dann diesen 
Interrupt abfangen? Ich hab was von ISR gelesen und 
INTERRUPT(SIG_OVERFLOW0) bin aber noch nicht wirklich dahintergestoßen 
was ich nun wirklich brauche.

Ziel ist es dann einfach eine Variable hochzuzählen und beim ca 4. mal 
ist dann eine Sekunde rum und es passiert irgendwas. Soweit kein 
Problem, nur eben wie ich den Interrupt abfange.

Programmiersprache: C
Controller: Mega16

thx, Hasi
#774388
Lesenswert?
• ▲
▼
Hasi wrote:
> Moin,
>
> habe ich das richtig verstanden? (Timer0, 4MHz):
>
> TCCR0 |= (1<<CS00)|(1<<CS02);  // Enabled den Timer und setzt Prescaler
> auf 1024
> TIMSK |= (1<<TOIE0); // Enabled den Interrupt für den Timeroverflow
> sei();               // Interrupts gloabel Enablen

jep.

>
> Heißt so viel wie der Timer wird gestartet und es treten (4000000 /
> 1024) / 256 = 15.25 Overflows auf in einer Sekunde.

jep.

> Bei jedem Overflow
> wird das TOV0 Flag im TIVR Register gesetzt und ein
> Timer-Overflow-Interrupt angestoßen.

jep.

>
> So, wenn das jetzt soweit richtig ist. Wie kann ich dann diesen
> Interrupt abfangen? Ich hab was von ISR gelesen und
> INTERRUPT(SIG_OVERFLOW0) bin aber noch nicht wirklich dahintergestoßen
> was ich nun wirklich brauche.
>
> Ziel ist es dann einfach eine Variable hochzuzählen und beim ca 4. mal
> ist dann eine Sekunde rum und es passiert irgendwas. Soweit kein
> Problem, nur eben wie ich den Interrupt abfange.
1
#include <avr/interrupt.h>
2

3
uint8 counter;
4

5
ISR( TIMER0_OVF_vect )
6
{
7
  counter++;
8

9
  if( counter == 4 ) {
10
    ...
11
    counter = 0;
12
  }
13
}
14

15
int main()
16
{
17
  ....
18
}

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