Ok, also ich habe den timer 0 folgendermaßen initialisiert: TCCR0 = _BV(CS00) | _BV(CS02); //Clock Source: Clk/1024 TIMSK = _BV(TOIE1); //Overflow interrupt enable sei(); Was fehlt da noch, um den Timer zu starten? Der zählt nämlich nicht?!
Ach und noch etwas...verstehe den Sinn der Flags nciht so ganz. Wenn ich z.B.einen mit einem timeroverflow ein Ereignis auslösen möchte, schreib ich das so: ISR(TIMER0_OVF_vect) { _delay_ms(50); timerstand = TCNT0; //Lese aktuellen timerstand aus nr_overflows++ ; }
Hi,
> TIMSK = _BV(TOIE1);
1 != 0
Du setzt das falsche Flag...
Ausserdem willst du kein Delay in einer ISR benutzen ;-) !!!
Sry, hab noch eine anderen Thread aufgemacht, war ein Irrtum ! ENTSCHULDIGT BITTE,war ein Versehen!!
Und wieso das falsche Flag? Laut Datenblatt: When the TOIE0 bit is written to one, and the I-bit in the Status Register is set (one), the Timer/Counter0 Overflow interrupt is enabled. Das will ich doch!! Udn zum Delay in der ISR.....weiß nicht, wie ich den taster sonst entprellen soll(softwaremäßig) :-)
@Thomas Burkhardt hmm, das mit den delays in interruptroutinen habe ich hier jetzt in den letzten tagen des öfteren bei anfängern gesehen (z.b. einen beitrag mit einer seriellen schnittstelle)! eventuell sollte man mal nen kleinen eintrag ins wiki machen, der delay`s beschreibt, wie sie zu erzeugen sind und wann man sie (nicht) benutzt.
Aha, danke, werd mich darüber schlau machen.. Wobei ich schon ein kleines Programm ahbe, um einen Pin zu entprellen, allerdings müsste der Code dann ja auch in der ISR Routine stehen, und das ist auch nicht optimal, oder?! Aber bevor ich mir darüber Gedanken machen, sollte der Timer mal laufen :-)
Hoi! > When the TOIE0 bit is written to one, and the I-bit in the Status > Register is set (one), the > Timer/Counter0 Overflow interrupt is enabled. > Das will ich doch!! Ja, du willst, aber du schreibst es nicht ;) TOIE0 != TOIE1 Im Code steht eine EINS wo eine NULL stehen sollte... Ansonsten den vorgeschlagenen Artikel zur Entprellung ansehen, wenn das sowieso dein Ziel ist. Gruß, Thomas
Ach verdammt, jetzt seh ichs erst...mann..*ggg* Danke euch allen, ich war wohl soeben blind :-)
Und obwohl das nun richtig ist, zählt der Timer anscheinend net, da der Nie in die ISR kommt, die aufgerufen wird, wenn der Overflow Interrupt kommt.. :-(
TCCR0 = _BV(CS00) | _BV(CS02); TIMSK = _BV(TOIE0); sei(); ................................ ISR(TIMER0_OVF_vect) { timerstand = TCNT0; //andere anweisungen; }
#include <avr/interrupt.h> und der ISR Aufruf: INTERRUPT(SIG_OVERFLOW0) so mache ich es zumindest immer und es funktioniert.
>> #include <avr/interrupt.h> >> und der ISR Aufruf: INTERRUPT(SIG_OVERFLOW0) >> so mache ich es zumindest immer und es funktioniert. Aber nicht mehr mit avr-libc 1.4.0 oder besser. Dort sind die Funktionen signal() und interrupt() nur noch als "deprecaded" Macros drin. die werden in späteren Versionen rausfallen.
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.