Forum: Compiler & IDEs Timer ohne Interruptauslösung verwenden


von jeremy (Gast)


Lesenswert?

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

von Wolfram (Gast)


Lesenswert?

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.

von johnny.m (Gast)


Lesenswert?

> 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...

von jeremy (Gast)


Lesenswert?

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

von Rahul, der Trollige (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.