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
Gast
#239128
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 :-)
Gast
#239129
und das geht so: TIMSK = _BV(OCIE0);
Gast
#239130
Ähm, falsch ... Es gibt einen Unterschied zwischen Output Compare und Timer Overflow.
Danke! Ich konnte nirgends ein komplettes Code Beispiel finden... Aber jetzt funktioneirt es. mfg Andreas
Gast
#239132
Hä, Und wie hast du das Programm verändert?
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
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
}