Arexx RP6 V2 Build your own robot kit RP6 V2 User Manual

Product codes
RP6 V2
Page of 141
RP6 ROBOT SYSTEM -  4. Programmierung des RP6
4.4.10. Programmablauf und Interrupts
Wir hatten weiter oben schon gesagt, das ein Programm generell Anweisung nach An-
weisung von oben nach unten ausgeführt wird. Dann gibt es natürlich noch die norma-
le Flusssteuerung mit Bedingungen und Schleifen, sowie Funktionen. 
Neben diesem normalen Programmablauf gibt es allerdings noch sog. „Interrupts“. Die 
verschiedenen Hardwaremodule (Timer, TWI, UART, Externe Interrupts etc.) des Mi-
krocontrollers können Ereignisse auslösen, auf die der Mikrocontroller so schnell wie 
möglich reagieren muss. Dazu springt der Mikrocontroller – (fast) egal wo er sich ge-
rade im normalen Programm befindet – in eine sog. Interrupt Service Routine (ISR), 
in der dann schnellstmöglich auf das Ereignis reagiert werden kann. Keine Sorge, Sie 
müssen sich hier nicht noch selbst drum kümmern, für alle benötigten ISRs wurde das 
bereits in der RP6Library erledigt. Aber damit Sie wissen worum es geht und was die-
se seltsamen „Funktionen“ in der Library sollen, erwähnen wir es hier kurz.
Die ISRs sehen wie folgt aus:
ISR ( <InterruptVector> )   
<Anweisungsblock> 
}
z.B. für den linken Encoder am externen Interrupt Eingang 0:
ISR (INT0_vect)
{
// Hier werden bei jeder Signalflanke zwei Zähler erhöht:
mleft_dist++;     // zurückgelegte Distanz
mleft_counter++;  // Geschwindigkeitsmessung
}
Man  kann  diese ISRs nicht direkt aufrufen! Das  geschieht immer automatisch   und 
meist kann man nicht vorhersagen wann es genau passiert! Es kann zu jeder Zeit in 
jedem beliebigen Programmteil passieren (ausser in einem Interrupt selbst oder wenn 
Interrupts deaktiviert sind). Dann wird die ISR ausgeführt und danach wieder an die 
Stelle   zurückgesprungen   an   der   das   Programm   unterbrochen   wurde.   Daher   muss 
man, wenn man Interrupts einsetzt, alle zeitkritischen Dinge auch in den jeweiligen 
Interrupt Service Routinen erledigen. Pausen die man anhand von Taktzyklen errech-
net hat, können sonst zu lang werden wenn sie von einem oder mehreren Interrupt 
Ereignissen unterbrochen werden.
In der RP6Library werden Interrupts verwendet um die 36kHz Modulation für die In-
frarotsensorik und Kommunikation zu erzeugen. Außerdem für die RC5 Dekodierung, 
Timing und Delay Funktionen, um die Encoder auszuwerten, für das TWI Modul (I²C-
Bus) und noch ein paar andere kleinere Dinge.
- 77 -