Forum: Mikrocontroller und Digitale Elektronik Timer soll Interrupt auslösen [mega16]


von Hasi (Gast)


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

von Karl H. (kbuchegg)


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
}

von Hasi (Gast)


Lesenswert?

Vielen Dank!

Hasi

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.