Glossaire microcontrôleur
(Note)
Maj : 20/11/03
Ceci est un petit glossaire spécial débutants, afin que les termes employés sur le site n'aient aucune ambiguïté. Signalez-moi les termes qui vous semblent encore confus, cette page évoluera avec le projet.
Adressage
Array = Tableau
Boucle d'attente
Buffer
CAN Bus
Filtrage par la méthode de la pondération temporelle
Flag
Gosub
Goto
I2C bus
Instruction
Interruption
look-up table = Tableau
Microcontrôleur et Microprocesseur
Port d’entrée/sortie
Registre
Reset
Tableau = Array
Timer
![]()
Moyen d’accéder à une case mémoire, soit directement en spécifiant son adresse physique, soit indirectement en passant par un pointeur ou plus indirectement encore par un pointeur de pointeur.
Partie du programme destinée seulement à perdre du temps. Le contrôleur passe son temps à décompter un registre chargé préalablement à une valeur fixe. A la fin du décompte, sortie de la boucle et poursuite du programme. Ces boucles sont très utilisées, elles seront écrites une fois pour toutes avec des valeurs d'attente connues.
Exemple : "del001ms" sera une boucle d'attente de base de 1 milliseconde. Elle sera appelée 10 fois pour réaliser la boucle de 10 ms "del010ms" (en réalité ce serait un peu plus long à cause des 10 appels. En pratique la boucle de 10 ms sera appelée 9 fois et une autre plus courte compensera pour obtenir le bon nombre de cycles).
Ces méthodes sont très pratiques pour un programmeur débutant, mais par la suite nous les éviterons pour des méthodes plus performantes. Il est par exemple plus économique en terme d'énergie d'utiliser une mise en sommeil à la place de la boucle stupide. Le circuit ne consomme (presque) plus d'énergie pendant l'attente et sera réveillé par une interruption programmée.
Un "buffer" est un tampon. C'est une zone mémoire qui recevra
des données en attente de traitement. En principe, une routine va les
déposer, et une autre les enlever après traitement.
Exemple : Envoi d'une phrase par le port série. Tous les octets seront
déposés très vite dans le "buffer", puis ressortis doucement
par le port série très lent. Évidement toutes les précautions
sont prises pour ne pas déborder de la zone allouée.
Le bus Can est très supérieur en performances à l'I2C mais il a été introduit plus tard. Il est à préférer à l'I2C pour tous les nouveaux projets, mais il existe moins de périphériques en grand public pour CAN que pour I2C. Ce bus est adopté massivement en automobile. Voir la page des bus.
Filtrage par la méthode de la pondération temporelle
Exemple simple de filtrage numérique. Ces techniques sont très
utilisées en traitement de signal simple, elles font l'objet d'une page
séparée:
Méthode de la pondération
temporelle : ![]()
![]()
Un "flag" est un drapeau ou sémaphore. C'est un bit privilégié,
contenu dans un registre, qui peut être mis à l'état haut
ou bas par programme ou par le processeur. Il sert d'indicateur pour les divers
programmes qui l'utiliseront comme un aiguillage de décision.
Exemple : Flag "tr_buf". Indique que le buffer d'émission de
données n'est pas vide, la routine d'émission l'utilise pour savoir
s'il faut transmettre. Quand le buffer sera vide, cette routine baissera le
flag.
Si le programme veut envoyer des données, il les empilera dans le buffer,
puis lèvera le flag pour demander l'envoi.
Un flag sera définitivement fixé par programme pour indiquer le
type d'horloge utilisé, un autre pour autoriser ou non la relecture du
code programmé. Ces flags particuliers ne peuvent pas être changés
par le programme, ils sont écrits "en dur".
C'est un saut mais avec retour. La différence avec le "goto"
est fondamentale. Le saut se fera vers une zone programme terminée par
un "return". Après exécution, le programme reprendra
à la ligne suivant le "gosub".
Toutes les fonctions souvent utilisées seront écrites dans des
sous-programmes avec retour qui seront appelés par des variantes de l'instruction "gosub".
Une petite différence existe pour les programmes traitant les interruptions.
Il faudra aussi en ressortir pour poursuivre le programme, mais le mécanisme
est plus complexe. Il faudra sauver en rentrant tout ce qui sera utilisé
puis le restaurer en sortant par un "RTI" (Return to interrupt). L'appel
ne sera fait que par une interruption, jamais par un "Gosub".
Saut définitif à une nouvelle adresse, souvent en fonction d'une
condition. Cette instruction est un vieux reste du basic, elle est maintenant
d'un usage rare en langage C.
Exemple : Si "valeur contenue dans un registre" plus grande que "valeur
immédiate", alors "goto" (équivalent à :
<aller à >) "telle adresse", sinon continuer.
![]()
Bus majeur de la micro-informatique, l'I2C (Inter Integrated Circuit Bus) a été introduit en 1980 par Philips pour la domotique et la liaison entre les cartes des matériels audio et vidéo. Un très grand nombre de périphériques utilisent cette norme ce qui explique son énorme diffusion malgré ses défauts et la supériorité technique du CAN. Tous les contrôleurs ont des modules logiciels pour l'implanter sur deux fils. Voir la page des bus.
Une instruction est un ordre élémentaire que va exécuter le processeur. Un processeur RISC (Reduced Instruction Set Computer) a peu d’instructions et les exécute vite, un CISC (Complex Instruction Set Computer) a davantage d’instructions puissantes, aura un code plus compact mais des cycles plus longs. C’est une question de philosophie, à puissance égale, les résultats sont équivalents.
Mécanisme fondamental des contrôleurs. Une action en cours est suspendue par un évènement. Des priorités définissent ce qui doit être fait en premier. L'action initiale reprend après le traitement de l'interruption. Les utilisations sont multiples.
Exemple. : Une horloge tourne en tâche de fond pour maintenir l'heure du système. Le programme principal n'en est pas perturbé. Toutes les secondes, les cases contenant heures, minutes, secondes sont mises à jour. C'est une interruption, programmée par un timer (compteur) interne qui demande à exécuter l'action. Très peu de cycles machine seront utilisés, et le déroulement programme ne changera pas.
Autre exemple d'interruption : Programme à actions rares. Nous décrirons un barographe (enregistreur de pression atmosphérique). Il est très suffisant de lire le capteur, de faire les calculs et de rafraîchir l'affichage une seule fois par minute. Le traitement durera beaucoup moins d'une milliseconde, ensuite tout sera mis en sommeil pour une minute. Une simple pile permet une autonomie de plusieurs années. Une interruption réveillera le système au bon moment. Une zone du microcontrôleur est spécialisée dans ce comptage et tournera alors que tout le reste est éteint, la consommation électrique est infime.
Microcontrôleur et Microprocesseur
Un microprocesseur est une unité de calcul qui demande
pour fonctionner des composants auxiliaires, comme de la mémoire vive
et morte, des dispositifs d'entrées-sorties.
Un Microcontrôleur contient dans le même boîtier, l'environnement
nécessaire pour tourner seul.
Les petites applications décrites ne nécessitent souvent que le
microcontrôleur seul.
Une carte à microprocesseur serait beaucoup plus puissante (exemple Pentium,
carte PC), mais demanderait un grand nombre de composants pour faire la même
chose. La frontière est parfois floue car les puissants microcontrôleurs
demandent aussi des composants annexes, l'ensemble ressemblant beaucoup à
une carte à processeur.
Pour simplifier, nous parlerons donc de :
Microcontrôleur pour une petite carte (exemple Souris, ou clavier de PC
utilisant un unique Pic).
Calculateur ou ordinateur ou "Computeur" pour un ensemble plus gros
avec de très nombreux périphériques associés, bâti
autour d'un microprocesseur (Exemple : PC avec Pentium).
![]()
Ce terme désigne à la fois les broches physiques, qui permettrent
de lire ou d’écrire un niveau électrique (logique ou analogique)
sur chacune des huit pattes (généralement) du bloc considéré.
C’est aussi l’adresse privilégiée dans laquelle les
données sont lues / écrites pour transformer des bits ou octets
en niveaux électriques et réciproquement. La lecture et l’écriture
sont indépendantes sur une patte d’un port.
Un registre est une case mémoire qui bénéficie de possibilités supplémentaires, d’accès rapide et (ou) de manipulations au niveau bits. L’accumulateur est le plus privilégié des registres. Un port est un des registres.
Désigne à la fois l'action et le bouton qui la commande. C'est la remise à zéro et la relance à froid du programme. Elle se produit toujours à la mise sous tension du circuit (grâce à un circuit résistance + condensateur). En appuyant sur le bouton, le condensateur est court-circuité.
Le tableau (array) est une méthode très pratique et rapide pour transformer une valeur en utilisant une table de conversion (look-up table). Une table est pré-calculée ou remplie à la main. En une instruction, la valeur contenue dans un registre sert de pointeur pour renvoyer le contenu du tableau.
Utilisation des tables de conversion ou look-up tables pour manipuler des données. Une page est consacrée à cette technique :
Conversion par look-up tables
: ![]()
Les timers sont des compteurs indispensables au fonctionnement d'un microcontrôleur. Ils fonctionnent sous deux modes différents :
En horloges programmables, ils déclenchent des évènements (programme, changement d'état de sorties) à des périodes données, par mécanisme d'interruptions. Ils peuvent réveiller le circuit mis en sommeil pour économiser l'énergie.
En compteurs, déclenchés par un évènement extérieur. Un niveau ou transition sur une entrée de déclenchement provoque le stockage d'un temps (nombre de cycles) dans un registre et une action (sous programme d'interruption). L'exemple le plus simple est le comptage de temps entre déclenchements.