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