mikrocontroller.net

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


Autor: Hasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <avr/interrupt.h>

uint8 counter;

ISR( TIMER0_OVF_vect )
{
  counter++;

  if( counter == 4 ) {
    ...
    counter = 0;
  }
}

int main()
{
  ....
}

Autor: Hasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

Hasi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.