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

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