User manual
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 -










