www.mikrocontroller.net

Forum: Compiler & IDEs Timer ohne Interruptauslösung verwenden


Autor: jeremy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: jeremy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wird doch nie das Interruptflag in ETIFR gesetzt oder nicht?

Das Flag wird immer gesetzt, sobald das entsprechende Ereignis eintritt. 
IMMER!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.