[AUDIO_VIDE] [AUDIO_VIDE] Bonjour. Le sujet d'aujourd'hui est un peu particulier. Il a été motivé par le fait de pouvoir faire de jolies animations dans de tout-petits micro contrôleurs. Je vais montrer comment on peut mettre des instructions qu'on a inventées dans un tableau, comment on peut interpréter ces instructions pour qu'elles produisent un effet, et je vais également montrer qu'on peut utiliser ce système pour de petits langages graphiques. On sait que animer une enseigne à LED, ça n'est rien d'autre qu'une suite d'opérations qui vont s'effectuer sur des LED ou des groupes de LED. Dans le cas d'un afficheur matriciel, eh bien, il s'agira d'envoyer des séquences graphiques. Mais l'écriture dans le langage habituel, par exemple C, de ces animations deviennent souvent assez compliquées, assez longues, et aussi très souvent difficiles à lire. Elles prennent passablement de place, en mémoire, et il peut être intéressant d'inventer un langage. L'idée, c'est de décrire les animations dans ce langage par différentes instructions. Prenons ici un programme, écrit en langage Arduino. On a une boucle permanente et on fait alterner des, digitalWrite, pour agir sur une LED particulière et des, delay. On peut reconnaître, ici, un chenillard, qui va allumer puis éteindre une série de LED. La procédure, digitalWrite, prend huit octets. Certes on peut faire un petit peu mieux pour ce qui est du, digitalWrite, en utilisant l'accès direct au registre du micro contrôleur, ici, quatre octets sur un MSP430. Nous allons mettre des instructions dans un tableau. Et ce tableau a été volontairement choisi, un tableau de huit bits. On a la même animation, on agit sur une sortie, on attend, on agit sur une sortie, on attend. Mais ici, notre tableau ne fait que 33 octets. On a, pour créer ce tableau, utilisé deux instructions, la première, qui permet de mettre une intensité et on passe comme paramètres l'intensité et la sortie concernée, sortie numéro zéro, On, ou bien sortie numéro cinq, Off. L'autre instruction, c'est attendre une certaine durée, attendre 10, attendre 30. Il faudra choisir la bonne unité pour pouvoir utiliser au mieux le système. Voici les définitions qui ont permis de rendre possible la compilation de ce tableau. On a défini le mot, On, avec le bit six, le mot, Off, avec le bit six à zéro, on a défini, sortie zéro, un, deux, trois, quatre, cinq, six, sept, par les valeurs zéro, un, deux, trois quatre, cinq, six, sept, on a défini, attente, par le bit numéro sept actif, et finalement, une valeur qui ne contient que des uns, c'est ce qui codera l'instruction, Fin. Voilà donc une description des instructions que nous avons, elles sont codées donc sur huit bits. Si ce premier bit, le bit numéro sept est à zéro, on a l'instruction qui met une intensité sur une sortie avec l'intensité, ici valeur binaire, sur le bit six, et le numéro de la sortie concernée. Si par contre on a un, 1, sur le bit, deux puissance sept, alors on a une durée ici, et cette durée est une durée sur sept bits. C'est la raison pour laquelle on va plutôt l'exprimer en dixièmes de secondes pour pouvoir avoir des durées qui varient de zéro à environ 13 secondes. Et on voit que ça correspond bien aux définitions que nous avions tout à l'heure. Ici, le On, l'attente avec ce bit à 1, etc. Il va falloir bien entendu écrire une procédure qui exécute une instruction. Elle va, ici, aller chercher l'instruction dans le tableau programme avec incrémentation de l'index. On va tester s'il s'agit de l'instruction, Fin, et relancer le programme au début si c'est le cas, sinon on va regarder s'il s'agit d'une attente, le bit, deux à la puissance sept, et on va attendre le temps en millisecondes multiplié par dix et récupéré dans les sept bits de poids faibles de l'instruction donc avec le, Et logique. S'il ne s'agit pas d'une attente, il s'agit donc d'une intensité. Alors, en fonction de l'instruction qu'on trouve dans le bit numéro six, on va allumer ou éteindre, et on prendra dans l'instruction sur les six bits, ici, le numéro de la sortie concernée. Bien entendu, le langage que je viens de présenter est un peu simpliste. Nous allons pouvoir faire des choses un petit peu plus sophistiquées, par exemple utiliser la variation de l'intensité avec du PWM, ou du BCM, pour pouvoir commander l'intensité des LED. Nous pourrons aussi rendre les programmes plus simples et plus lisibles en gérant des groupes de LED, et pas uniquement des LED isolées. Nous pourrons aussi faire de la programmation en quelque sorte en parallèle, d'avoir plusieurs programmes qui s'exécutent en même temps. Ce système s'y prête parfaitement. Je terminerai par la présentation d'un petit langage graphique que j'avais imaginé. Il s'agissait à l'époque de pouvoir réaliser dans un tout-petit micro contrôleur avec deux K de mémoire des animations sur un afficheur matriciel de 16 par 16 LED. Et j'avais imaginé les instructions de huit bits avec, typiquement, dessin d'une droite horizontale et on passait comme paramètre sous forme de quatre bits la variation du x. Donc ça permettait d'avoir une droite horizontale depuis le curseur. Toutes les instructions utilisaient ce concept de curseur. De même, on pouvait faire une droite verticale. On pouvait faire l'équivalent d'une droite, mais simplement en avançant le curseur en x ou en y. Il y avait un système astucieux de répétition qui avait la propriété de multiplier n fois l'instruction suivante, et, associé avec le mécanisme de définition de sous-routine et d'appel de sous-routine, on avait la possibilité de faire des sortes de boucles imbriquées. Et finalement j'ai pu réaliser avec deux K de mémoire des animations qui m'avaient pris plus de 10 K lorsque je les avaient écrites, en C. On a ici la suite des instructions avec quelques instructions particulières, par exemple effacer l'écran, et ici, le retour de sous-routine, placer le curseur en position zéro zéro, et quelques systèmes un petit peu plus sophistiqués qui avaient permis d'avoir, quand même, des effets intéressants, par exemple ici, la possibilité d'exécuter une procédure écrite alors finalement quand même, en C, pour quelque chose de très particulier, et on voit qu'il restait même quelques instructions libres pour enrichir encore ce langage. Je pense que ceux qui ont déjà fait de l'assembleur ont trouvé de nombreuses similitudes entre ces langages que nous avons inventés et l'assembleur, et peut-être aurez-vous une fois le plaisir d'utiliser de telles techniques, inventer un langage pour animer une enseigne ou un afficheur à LED.