Mit dem Arduino Timer Interrupt eine LED Blinkfolge ausgeben

Wenn ein Programmstatus oder ein Programmierschritt durch das mehrfaches blinken einer LED angezeigt werden soll bietet sich hierfür auch der Timer Interrupt an. Wie im vorherigen Artikel beschrieben wird der Interrupt gesetzt.

Mit Hilfe einer 8 stelligen Binärzahl kann nun das Blinkmuster festgelegt werden.
1 x Blink ist 00000001
2 x Blink ist 00000101
3 x Blink ist 00010101

Mit der Variablen folgeindex werden die Bits bei jeden Interrupt Aufruf nacheinander verglichen und die LED wird entsprechend geschaltet.

// Mit dem Timer Interrupt die LED blinken lassen
// Ein Status wird durch verschiedene Blinkzeichen angezeigt.
//
// Matthias Busse 7.12.2015 Version 0.1

int led=13;
int folge= B00000101; // 1x Blink B00000001, 2x Blink B00000101 ... 
int folgeindex=0;

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

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

ISR(TIMER1_COMPA_vect) { // timer interrupt service routine
  if(folge & (0x80 >> folgeindex)) // die 16 bit durchgehen und wenn es eine 1 ist, LED an
    digitalWrite(led, 1); // LED einschalten
  else
    digitalWrite(led, 0); // LED ausschalten
  folgeindex++;  // Index hochzählen
  if(folgeindex>15) folgeindex=0; // bei 16 auf 0 setzen und von vorne anfangen
}

von Matthias Busse

Ein Gedanke zu „Mit dem Arduino Timer Interrupt eine LED Blinkfolge ausgeben

  1. Pingback: Mit dem Timer Interrupt des Arduino die LED blinken lassen | Shelvin – Elektronik ausprobiert und erläutert

Schreibe einen Kommentar

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