Arexx RP6 ROBOT SYSTEM RP6 CONTROL M32 Manuel D'utilisation page 24

Table des Matières

Publicité

RP6 ROBOT SYSTEM - 4. Exemples de Programme
task_I2CTWI() dans la boucle principale qui règle le déroulement du transfert I2C. Il
n'y aura donc aucun intérêt à utiliser une routine d'interruption. Pour être précis, cela
risquerait même de créer des problèmes car des transferts de bus I2C en cours se-
raient interrompus. C'est pourquoi nous utilisons la fonction task_checkINT0() pour
évaluer constamment le signal d'interruption et d'envoyer éventuellement une re-
quête. Dès la lecture du registre d'état 0 de l'esclave, le signal d'interruption est remis
à zéro. Les trois premiers registres de l'esclave nous disent ce qui a déclenché l'inter-
ruption.
C'est exactement ce que fait ce programme. Le résultat en est que l'état actuel du
CAN est indiqué par les 4 LED, le LCD, l'interface série et par le buzzer sur le RP6
CONTROL
La puissance de transmission du CAN est réglée au début du programme par le bus
I²C. Outre le CAN, le programme réagit aussi aux pare-chocs et aux éventuelles
transmissions RC5 provenant d'une télécommande ou d'autres robots.
Vous pouvez procéder d'une manière similaire avec d'autres détecteurs du robot ainsi
que éventuellement avec d'autres modules d'extension qui seront disponibles avec
d'autres détecteurs.
Un autre détail du programme est l'indication « Heartbeat », donc « battement de
cœur ». La fonction task_LCDHeartbeat() fait clignoter sur le LCD en permanence le
caractère '*' à une fréquence de 1Hz. C'est très utile pour savoir si le programme a
planté en totalité ou si seulement une petite partie du logiciel présente des erreurs. Si
vous écrivez vos propres programmes et ce programme semble planter complète-
ment, cette fonction peut s'avérer très utile pour délimiter la source d'erreur. Le plan-
tage du programme est tout à fait courant pendant le développement.
C'est pourquoi le programme esclave I²C pour le contrôleur sur la carte-mère contient
une fonction « software watchdog ». Si le maître ne réagit pas pendant un laps de
temps déterminé à l'événement d'interruption (en lisant le registre 0), tous les sys -
tèmes de l'unité de base du robot sont coupés et le programme s'arrête. Avant tout,
les moteurs sont arrêtés! Car si le contrôleur Maître plante mais a eu le temps d'en-
voyer la commande d'avancer de 10cm/sec., le robot roule sans retenue vers le pro-
chain obstacle et ne s'arrête même pas dans le cas d'une collision ...
Le timer du logiciel watchdog est d'abord désactivé. Il faut d'abord envoyer une ins-
truction via le bus I²C pour activer le watchdog. Il est également possible de configu-
rer le watchdog de façon à ce que celui déclenche toutes les 500ms un événement
d'interruption afin de vérifier si le contrôleur maître y réagit encore. C'est ce que nous
allons utiliser dans l'exemple suivant.
- 24 -

Publicité

Table des Matières
loading

Produits Connexes pour Arexx RP6 ROBOT SYSTEM RP6 CONTROL M32

Table des Matières