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
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 :-)
Ä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
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
}
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.