Forum: Compiler & IDEs Timer, mega8515


von Andreas B. (andreasb)


Angehängte Dateien:

Lesenswert?

Ich versuche den Timer0 beim ATmega8515 anzusteuern, aber der Interrupt
wird nie ausgelöst. Ich habe schon die Suche benutzt aber habe die
Lösung nicht gefunden...

mfg Andreas

von Alex (Gast)


Lesenswert?

Du hast den Timer auch lediglich aktiviert, zählen tut der schon. Wenn
du jetzt noch das Flag setzt, welches den Interrupt bei Überlauf
aktiviert dann passt das :-)

von Günni (Gast)


Lesenswert?

und das geht so:

TIMSK = _BV(OCIE0);

von Alex (Gast)


Lesenswert?

Ähm, falsch ...

Es gibt einen Unterschied zwischen Output Compare und Timer Overflow.

von Andreas B. (andreasb)


Lesenswert?

Danke!
Ich konnte nirgends ein komplettes Code Beispiel finden...
Aber jetzt funktioneirt es.

mfg Andreas

von tobster (Gast)


Lesenswert?

Hä, Und wie hast du das Programm verändert?

von Andreas B. (andreasb)


Lesenswert?

Hab den gleichen Code jetzt nicht gerade... aber einer der funktioniert,
aber mit Timer 2...:

Initialisierung (bei mir in der main Funktion)

{
  TCCR1B = 1<<WGM12^1<<CS10<<CS11;
  OCR1A = 0;
  TCNT1 = 0;
  TIMSK = 1<<OCIE1A;
  sei();
}


SIGNAL (SIG_OUTPUT_COMPARE1A)
{
//wird ausgeführt wenn timerüberläuft
}


habe das mit den Timern auch noch nicht ganz begriffen, aber so
funktioniert es problemlos..


mfg Andreas

von Tobias G. (tobster)


Lesenswert?

Nachdem ich mich gestern auch ein wenig damit rumgeschlagen hab (Mein
Int wurde auch nicht ausgelöst), hab ich's glaub ich:

{
  TCCR1B = 1<<WGM12^1<<CS10<<CS11;   //setzt den Prescaler
  OCR1A = 0;                         //setzt den Vergleichswert
  TCNT1 = 0;                         //Startewert des Counters
  TIMSK = 1<<OCIE1A;                 //Compare-Int aktivieren
  sei();                             //globale Ints aktivieren
}

SIGNAL (SIG_OUTPUT_COMPARE1A)
{
 //wird ausgeführt wenn der Counterwert mit dem Vergleichswert
übereinstimmt
}

Wenn man wirklich nur den Overflow haben will, dann reicht auch, das
ganze so zu schreiben:

SIGNAL (SIG_OVERFLOW0)
{
// Interrupt Code bei Timerüberlauf (8-Bit = 256 Timerzyklen)
}

{
  // 8-Bit Timer einstellen
  TCCR0 = (1<<CS00)|(1<<CS02);  // Vorteiler
  TIMSK = (1<<TOIE0);    // Überlauf-Int aktivieren
  sei();        // Globale Ints aktivieren

}

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.