Mit dem Timer Interrupt des Arduino die LED blinken lassen

Wenn im Programm keine Zeit ist eine Status LED blinken zu lassen, dann kann das ein Interrupt machen.

Er werden die Interrupt Register gesetzt, der Prescaler gesetzt und das Vergleichsregister eingestellt.

In meinem Beispiel ist der Prescaler auf 256 eingestellt. Damit wird das Vergleichsregister folgendermaßen berechnet.

Taktfrequenz / Prescaler ergibt einen Aufruf des Interrupt pro Sekunde.

Soll eine LED einmal die Sekunde blinken, dann ist sie 1/2 Sekunde aus und dann 1/2 Sekunde an. Das ergibt einen Wert von 16.000.000 / 256 / 2 = 31250

In der ISR ( Interrupt Service Routine ) wird dann die LED umgeschaltet während das restliche Programm weiter läuft. Naja, es wird kurz die ISR ausgeführt und dann läuft das Programm normal weiter.

// Mit dem Timer Interrupt die LED blinken lassen
//
// Matthias Busse 6.12.2015 Version 0.1

int led=13;

void setup() {
  pinMode(led, OUTPUT);
  noInterrupts(); // Interrupts ausschalten
  TCCR1A = 0; // Timer1 initialisieren
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 31250; // Vergleichsregister um die Zeit einzustellen 16MHz/256/2Hz
  TCCR1B |= (1 << WGM12); // CTC mode
  TCCR1B |= (1 << CS12); // 256 prescaler
  TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
  interrupts(); // Interrups einschalten
}

void loop() {
  delay(1000); // Mache irgendwas
}

ISR(TIMER1_COMPA_vect) { // timer interrupt service routine
  digitalWrite(led, !digitalRead(led)); // LED umschalten
}

Teil 2 > Mit dem Arduino Timer Interrupt eine LED Blinkfolge ausgeben

von Matthias Busse

Ein Gedanke zu „Mit dem Timer Interrupt des Arduino die LED blinken lassen

  1. Pingback: Mit dem Arduino Timer Interrupt eine LED Blinkfolge ausgeben | Shelvin – Elektronik ausprobiert und erläutert

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *