Timer soll Interrupt auslösen [mega16]

Gast #774375
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.