Arduino Timer

OP #4546832
Lesenswert?
• ▲
▼
Hallo zusammen.

Ich bin momentan dabei ein Programm zuschreiben, welches mir in einer 
gewissen Zeitspanne ausgibt, wie oft ein Taster betätigt wurde.

Ich hatte mir das so gedacht, dass nach der ersten Betätigung des 
Tasters, die Zeit startet und z.B. nach einer Minute ausgegeben wird, 
wie oft dieser Taster betätigt wurde.

Im Internet hatte ich gelesen, dass sich so etwas mit Hilfe von 
Overflows der Timer realisieren lässt. Leider hatte ich damit noch 
keinen Erfolg.

Ich bis jetzt auch noch keine Idee, wie ich das Starten der Zeit erst 
nach der ersten Betätigung des Tasters starten kann.

Ich hoffe mir kann jemand ein paar Tipps geben oder kennt ein vorhandene 
Code, der ähnliches erfüllt.

Das ganze würde ich gerne für meinen Arduino mit der Arduino-IDE 
programmieren.

Viele Grüße.
Gast #4547337
Lesenswert?
• ▲
▼
Peter L. schrieb:
> Ich bis jetzt auch noch keine Idee, wie ich das Starten der Zeit erst
> nach der ersten Betätigung des Tasters starten kann.

Eine Möglichkeit wäre, erstmal zu warten bis der Taster gedrückt wird 
und dann den Timer zu starten. Dann guckst du immer fleißig, ob die 
Taste gedrückt wurde (mitzählen) oder ob die Zeit abgelaufen ist (Timer 
stoppen).
OP #4550739
Lesenswert?
• ▲
▼
#define F_CPU 16000000UL //16Mhz
...
if(prev == 1)
    {
      TCCR1A = 0x00;
      TCCR1B = (1 << WGM12); // CTC
      TCCR1B = (1 << CS10) | (1 << CS11); //Prescaler /64
              OCR1A = 24999;
      TIMSK1 |= (1 << OCIE1A);//enable Compare Interrupts
      sei();
    }

    if (overflow_counter >= 50) //10 sek
    {
      PORTB ^= (1 << LED1);
      overflow_counter = 0;
    }

    }

ISR(TIMER1_COMPA_vect)
{
  overflow_counter++;
}

So das ist mein Code. Wenn der Taster gedrückt wird, startet der Timer 
und erreicht 5 overflows pro sekunde (5Hz). Nach 10 sekunden müsste der 
overflow_counter dann ja eigentlich auf 50 gesetzt sein, leider sind es 
keine 10 sekunden. Sieht jemand vielleicht meinen Fehler?
#4550754
Lesenswert?
• ▲
▼
Peter L. schrieb:
> TCCR1B = (1 << CS10) | (1 << CS11) | (1 << WGM12);
> So richtig? ;)

Ja. Siehe auch Bitmanipulation, falls du dir da unsicher bist. Man 
kann das auch durchaus in zwei Zeilen schreiben, ohne die vorherige zu 
überschreiben.

Wenn du die richtigen Bits gesetzt hast, müsste das jetzt eigentlich 
funktionieren. Wenn nicht, was passiert denn überhaupt? Toggelt die Led 
irgendwann?

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