Hallo, ich möchte in meinem programm eine bestimmte Zeit Nutzerinformationen auf einem Display darstellen. Durch Tastendruck soll es aber möglich sein sofort zur nächsten Displaydarstellung ohne Verzögerung zu wechseln. Meine Idee war nun einen Timer zu verwenden aber dabei keinen Interrupt auszulösen sondern einfach zu prüfen wann das entsprechende Bit im Interrupt Flag Register des timers gesetzt wird. Meine Codezeilen sind für den timer A eines Mega128. Klappt leider nicht! Woran liegts? Tips? TCCR3B = (1<<WGM32) | (1<<CS30) | (1<<CS32); //ctc, prescaler clk/1024 TCCR3C = (1<<FOC3A); // Output Compare Match OCR3A = 15624; // ~2 sec intervall ETIMSK = (1<<OCIE3A); // Compare Match Interrupt Kanal A ETIFR = (1<<OCF3A); // Timer/Counter3, Output Compare A Match Flag while(1){ if(getkey()) break; if(ETIFR & (1<<OCF3A)){ ETIFR &= ~(1<<OCF3A); break; } } Danke Jeremy
kein kompletter Code also gibt es mal eine Vermutung: wenn da noch irgendwo ein sei() steht, dann wird ein Interrupt ausgelöst. Da du keine Interruptroutine hast, gibt es einen Reset und damit gehts wieder von vorn los.
> ETIMSK = (1<<OCIE3A); // Compare Match Interrupt Kanal A
...damit gibst Du doch den Interrupt frei. Was soll das? Wenn Du ihn
nicht verwenden willst, dann darfst Du ihn auch nicht freigeben...
ohne
> ETIMSK = (1<<OCIE3A); // Compare Match Interrupt Kanal A
wird doch nie das Interruptflag in ETIFR gesetzt oder nicht? Oder nuss
auch das globale Interrupt enable flag mit sei() gesetzt werden damit
das Flag im ETIFR bei compare match gesetzt wird. Aber dann wird ja auch
der Interrupt ausgelöst und genau das will ich ja nicht haben.
jeremy
>wird doch nie das Interruptflag in ETIFR gesetzt oder nicht?
Das Flag wird immer gesetzt, sobald das entsprechende Ereignis eintritt.
IMMER!
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.