User manual

RP6 ROBOT SYSTEM - 4. Beispielprogramme
Beispiel 6: I²C Bus Interface – Master Modus
Verzeichnis: <RP6Examples>\RP6ControlExamples\Example_06_I2CMaster\
Datei: RP6Control_06_I2CMaster.c
Dieses Programm demonstriert wie man den Master Modus des I²C Busses verwenden
kann. Der Controller auf dem Roboter Mainboard muss das I2C Slave Beispielpro-
gramm geladen haben!
Dieses Programm zeigt, wie man den Controller auf dem Mainboard im Slave Modus
steuern kann. Das klappt natürlich nur dann, wenn auch das I²C Slave Beispielpro-
gramm aus den RP6Base Beispielen in den Controller auf dem Mainboard geladen ist.
Der Zugriff auf den I²C Bus funktioniert fast genau wie auf dem Controller auf dem
Mainboard auch – es sind dieselben Funktionen.
In diesem Beispielprogramm kann man verschiedene I²C Bus Kommandos an den mit
dem Slave Beispielprogramm programmierten Controller auf dem Mainboard schicken,
indem man auf einen der 5 Taster drückt. Taster T1 erhöht einen Zähler um eins und
sendet dann den setLEDs Befehl an den Slave mit diesem Zählerwert. So wird mit den
6 Status LEDs auf dem Mainboard ein Binärzähler angezeigt.
Mit einem Druck auf Taster T2 werden alle Register gelesen und über die serielle
Schnittstelle ausgegeben. Mit T3 hingegen, werden nur die Werte der Lichtsensoren
ausgelesen und auch auf dem LC-Display angezeigt.
Mit T4 und T5 wird der „Rotate“ Befehl gesendet und der Roboter dreht sich ein klei-
nes Stückchen nach links oder rechts (man kann auch mehrmals auf den Taster
drücken, dann dreht er sich weiter... ).
Das Programm kann wie alle anderen auch natürlich beliebig verändert werden
und eignet sich sehr gut zum Testen neuer C Geräte oder Funktionen die man dem
Slave Beispielprogramm hinzufügt.
Beispiel 7: I²C Bus Interface – Master Modus - auf Interrupts reagieren
Verzeichnis: <RP6Examples>\RP6ControlExamples\Example_07_I2CMaster\
Datei: RP6Control_07_I2CMaster.c
Dieses Programm demonstriert wie man den Master Modus des I²C Busses verwenden
kann. Der Controller auf dem Roboter Mainboard muss das I2C Slave Beispielpro-
gramm geladen haben!
Vielleicht sind Ihnen schon die Interrupt Signale auf den XBUS Anschlüssen des RP6
aufgefallen? Diese kann man nutzen um ohne ständiges Abfragen der Slaves auf Sen-
soränderungen zu reagieren. Jeder Buszugriff kostet schließlich Zeit.
Ein gutes Beispiel dafür ist das ACS auf dem Roboter. Der Sensorzustand ändert sich
hier nur relativ selten und es wäre nicht besonders effektiv, ständig über den Bus ab-
zufragen ob sich etwas geändert hat. Sobald sich der Status des ACS ändert, wird
vom Slave Beispielprogramm das INT1 Signal auf High Pegel gesetzt. Da INT1 an den
Interrupt Eingang 0 vom MEGA32 auf dem RP6 CONTROL M32 gelegt wurde, kann der
Controller direkt auf dieses Ereignis reagieren und den Status des Controllers auf dem
Mainboard abfragen.
Wir nutzen in den Beispielprogrammen allerdings KEINE Interrupt Routinen um auf
das Ereignis zu reagieren, sondern fragen den Zustand des Pins bei jedem Durchlauf
der Hauptschleife ab. Da die I2C Bus Transfers selbst auch Interruptgesteuert ablau-
fen, nnte innerhalb der Interrupt Routine keine neue Übertragung stattfinden. Es
- 23 -