Auch auf den Timerinterrupt in Atmel Studio wurde schon eingegangen. 

Wichtig ist in Arduino IDE die "TimerOne.h" Bibliothek, die heruntergeladen und installiert werden muss.
Unter folgendem Link kann die Bibliothek herrunter geladen werden:

https://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

Mit der Funktion "Timer1.initialize()" wird die Periode des Timers festgelegt. Ein Interrupt wird erzeugt, wenn der Timer einen Overflow verursacht.

Die Funktion "Timer.attachInterrupt(timer)" gibt an welche ISR im Falle eines Interrupts aufgerufen werden soll.


Beispiel zum Timer Interrupt:

Funktion:

Eine LED soll in einem bestimmten Takt für 1s leuchten.
Ein ähnliches Beispiel wurde schon im Kapitel Interrupts in Atmel Studio programmiert.

Schaltung:

Bei der Schaltung muss auf keine Besonderheiten geachtet werden.
.

Abb.: Aufbau Timer Interrupt Schaltung; Quelle: BBS2 Wolfsburg

Programmcode:

//Einbinden von Bibliotheken
#include "TimerOne.h"                    //Timer-Bibliothek

//Definition der Pins
#define buzzerPin 13                     //Buzzer und LED sind fest an Pin 13 angeschlossen

//Variablen für Interrupts
volatile int state = 0;                  //löst die Datenerfassung aus wenn >0
int t = 1;                               //Zeit des Intervalls in Minuten
int zaehler = 0;                         //zählt die Sekunden

void setup()
{
  pinMode(buzzerPin, OUTPUT);            //Definition des Buzzerpins als Output
  Timer1.initialize(1000000);            //Inizialisierung des Timers
  Timer1.attachInterrupt(timer);         //Aktivirung des Timerinterrupts
}

void timer()                             //Funktion wird aufgerufen wenn Timer ein Interrupt wirft
{
  zaehler++;
  if (zaehler == 60 * t)                 //Zähler muss bis 60 zählen damit eine Minute vergangen ist
  {
    state++;
    zaehler=0;
  }
}

void loop()                               //Schleifenfunktion (immer nötig bei der Programmierung von Mikrocontrollern)
{
   if (state >= 1)
  {
    digitalWrite(buzzerPin, HIGH); 
    delay(100);                                                                     
    state --;                             // Rücksetzen der Ausleseanfrage
  }
  else
  {
    digitalWrite(buzzerPin, LOW);
  }
}

Weitere Erklärungen und die nötige TimerOne sind hier zu finden:

https://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

Zuletzt geändert: Montag, 21. Februar 2022, 09:08