User manual
RP6 ROBOT SYSTEM - 4. Beispielprogramme
muss in der Hauptschleife immer die task_I2CTWI() Funktion aufgerufen werden, die
den Ablauf der I2C Transfers regelt. Daher hätte es keinen großen Vorteil eine Inter-
rupt Routine zu verwenden. Um genau zu sein, würde es sogar Probleme bereiten,
denn so könnten bereits laufende I2C Bus Übertragungen unterbrochen werden. Also
wird nur die Funktion task_checkINT0() verwendet um ständig das Interrupt Signal
auszuwerten und ggf. eine Abfrage zu starten. Sobald das Statusregister 0 des Slaves
gelesen wird, wird das Interrupt Signal zurückgesetzt. Über die ersten drei Register
des Slaves kann man herausfinden, was den Interrupt ausgelöst hat.
Genau das macht dieses Beispielprogramm auch. Resultat ist, dass der aktuelle Zu-
stand des ACS über die 4 LEDs, das LCD, die serielle Schnittstelle und den Beeper auf
dem RP6 CONTROL angezeigt und hörbar gemacht wird.
Zu Beginn des Programms wird noch die Sendeleistung des ACS über den I²C Bus ein-
gestellt. Neben dem ACS reagiert das Programm auch auf die Bumper und auf eventu-
ell gesendete RC5 Übertragungen von einer Fernbedienung oder anderen Robotern.
Das kann man so ähnlich natürlich auch mit allen anderen Sensoren des Roboters
handhaben. Auch mit evtl. zukünftig erhältlichen Erweiterungsmodulen mit weiteren
Sensoren.
Ein weiteres Detail des Programms ist die „Heartbeat“ Anzeige. Also „Herzschlag“ An-
zeige. Die task_LCDHeartbeat() Funktion sorgt dafür, dass auf dem LCD ständig das
Zeichen '*' mit einer Frequenz von 1Hz blinkt. Das ist sehr hilfreich um festzustellen
ob sich das Programm komplett aufgehangen hat, oder ob nur ein bestimmter Teil der
Software fehlerhaft ist. Wenn Sie eigene Programme schreiben und sich das Pro-
gramm dann anscheinend komplett aufhängt, kann das sehr hilfreich sein um die Feh-
lerquelle einzugrenzen. Das sich das Programm aufhängt, kann während der Entwick-
lung durchaus mal passieren.
Deshalb ist im I²C Slave Beispielprogramm für den Controller auf dem Mainboard auch
eine „Software Watchdog“ Funktion eingebaut. Reagiert der Master innerhalb einer
festgelegten Zeit nicht auf ein Interrupt Ereignis (indem Register 0 gelesen wird),
werden alle Systeme der Roboter Basiseinheit ausgeschaltet und das Programm ge-
stoppt. Vor allem werden die Motoren ausgeschaltet! Denn sollte sich der Master Con-
troller aufhängen, aber vorher noch den Befehl mit 10cm/s vorwärts zu fahren sen-
den, fährt der Roboter ungebremst vor das nächste Hindernis und stoppt auch nicht
bei einer Kollision ...
Der Software Watchdog Timer ist zunächst deaktiviert. Man muss vorher noch einen
Befehl über den I²C Bus senden um den Watchdog zu aktivieren. Es ist auch möglich
den Watchdog so zu konfigurieren, dass dieser alle 500ms ein Interrupt Ereignis aus-
löst um zu überprüfen ob der Mastercontroller noch darauf reagiert. Das werden wir
im nächsten Beispiel verwenden.
- 24 -