Timer ohne Interruptauslösung verwenden

Gast #510017
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
Gast #510022
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.
Gast #510061
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...
Gast #510248
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren