timer auf bestimmten wert zählen

Gast #1696421
Lesenswert?

Also, bei den wenigen Details muss man leider antworten:

1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+ 
1+1+1...

Welcher Prozessor? -> Interrupts? -> Compare match oder Overflow?
#1696440
Lesenswert?

Kolle schrieb:
> Atmega32 der Timer/ Counter 1 ist aber schon belegt!

Womit?

Es ist nicht verboten in einem Timer Interrupt auch mehrere Dinge zu 
machen, solange man mit der Interrupt Frequenz hinkommt.

Und wenn nicht, dann nimmt man halt den Timer 0 oder Timer 2

Aus genau solchen Gründen haben die meisten Programme sowas wie eine 
Basisclock in Form einer ISR, die zb alle 10 Millisekunden aufgerufen 
wird und in der man dann mit Softwarezählern die weiter benötigten 
Zeiten oder Verzögerungen erzeugt.

So nach dem Muster: Wenn man 60 mal 1 Sekunde abzählt, hat man in Summe 
auch 1 Minute abgezählt.
#1696459
Lesenswert?

hannes schrieb:
> also ein Interrupt der alle 10 ms aufgerufen wird? diese müsste ich um 5
> min zu warten 500 mal abwarten?

Nö.
Da ist schon wieder dieses böse Wort "warten"

Du hast einen Zähler
1
volatile int16_t turnOnDelay;

in der ISR siehst du nach, ob dieser Zähler größer 0 ist. Wenn ja, dann 
verringerst du den um 1 um wenn er dann 0 ist, dann schaltest du ein.
Ist der Zähler schon 0, dann machst du gar nichts
1
ISR( ... )
2
{
3
  if( turnOnDelay > 0 ) {
4
    turnOnDelay--;
5
    if( turnOnDelay == 0 ) {
6
       .. Gerät einschalten
7
    }
8
  }
9

10
  ...
11
}

Willst du nun das Gerät zeitverzögert einschalten, dann setzt du den 
Zähler auf 500.
1
    cli();
2
    turnOnDelay = 500;
3
    sei();

Den Rest macht die ISR. Alle 10ms erniedrigt sie den Zähler um 1, und 
wenn die Zeit (500 = 5 Sekunden) um ist, schaltet die ISR das Gerät ein.

Fertig.

Ist das, was zeitverzögert passieren soll von der aufwändigeren Natur, 
dann macht das nicht mehr die ISR selber, sondern sie setzt eine andere 
globale Variable auf TRUE, welches anzeigt, dass die Aktion auszuführen 
ist. Das wiederrum wird von der Hauptschleife ausgewertet und 
abgearbeitet.

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