Arduino Timer

OP #4546832
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
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
#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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.