Nature Humaine (amocalypse)
Théorie>Electricité>Electronique>Microcontrôleurs

Première version: 03/07/2003
Dernière version: 2015-06-05

# Microcontrôleurs

Sommaire de la page

## Préambule

L'électronique analogique montre vite ses limites dès lors qu'il s'agit de gérer les multiples informations issues des nombreux capteurs, ainsi que pour établir une loi de commande qui s'adapte aux multiples situations rencontrées. C'est pourquoi on utilise l'électronique numérique, indissociable d'un composant sous forme d'un CI, le micro-contrôleur (MCU). Ce microcontrôleur n'est rien d'autre que la version ultra miniaturisée que votre bon vieux PC, qui vous sert en ce moment à lire cette page (edit 2015, j'écrivais ça en 2003...) .

## Présentation de l'électronique numérique

### Comparaison analogique / numérique

L'électronique analogique (traitée dans la page sur l'électronique) travaille avec des tensions et des intensités, des fréquences, etc... Toutes ces grandeurs peuvent prendre des valeurs qui varient de façon continues, par exemple une tension varie de 1 à 5V, en passant par les valeurs 2,1 V, puis 3,5 V, etc.
L'électronique numérique, lui, ne travaille qu'avec des valeurs discrètes (par exemple, 1, 2, 3, ...). Ces valeurs sont codées sous forme binaire, c'est à dire en utilisant uniquement les deux chiffres 0 et 1 (par exemple, 1 est codé 0001, 2 est codé par 0010, etc.). Physiquement, ces deux valeurs binaires se traduisent par un courant qui passe ou qui ne passe pas, on dit encore On/Off (tension de 5V ou de 0V, en électronique TTL).

Le microcontrôleur n'est pas un CI comme les autres, étant relativement fragile on évite de le souder, on l'insère sur un support, ce qui permet de le remplacer facilement. Ne peut être qu'alimenté par du 5V.

Il se trouve soit en boitier DIP 14 à 28, soit en boîtier PLCC (de forme carrée).

## Présentation d'un µcontrôleur

Je vous laisserais vous familiariser avec ces composants en allant voir ici.
Le MCU possède les éléments suivants, que l'on retrouve aussi dans un ordinateur PC :
- La RAM (les données d'exécution),
- la ROM (le programme et les données de paramétrage fixées),
- l'EEPROM (données de paramètrages évolutives),
- la CPU ou microprocesseur (traitement des données à partir des instruction du programme),
- le timer (base de temps interne, génère des signax ou compte des évènements) et son chien de garde,
- les ports d'entrée/sortie,
- les interfaces séries synchrones (SPI) ou asynchrones (SCI ou UART),
- et enfin un convertisseur analogique/numérique.

Pour que le MCU fonctionne, il faut mettre dans sa ROM un programme (suite d'instructions qui seront lues et exécutées par la CPU).
- On commence par taper le programme sur ordinateur (en langage évolué), puis on le compile pour obtenir un programme en langage machine. Ce programme doit tenir compte des performances du MCU et doit avoir une petite taille pour rentrer dans la ROM du MCU.
- Quand le programme est écrit, on le teste à l'aide d'un simulateur (ou émulateur), qui est un circuit électronique reproduisant en temps réel le comportement du MCU que l'on utilisera par la suite. L'ordinateur et son programme de débuggage permet donc de vérifier que tout se passe correctement.
- Quand tout marche bien, on transfert alors le programme du PC au MCU. Pour cela, on lance un programme sur PC, le caller, puis une fois que le MCU est en mode écriture, on envoie le programme depuis le PC jusqu'à la ROM du MCU.

## Présentation des mémoires

La mémoire sert à enregistrer des données (programme ou cartographie) sous forme binaire (une suite de 0 et 1).

On distingue deux types de mémoires, la RAM et la ROM.

### Mémoire vive RAM

Les différentes dénominations portent sur les temps d'accès et la largeur de bus (8 bits, 16 bits, etc.). Nécessite une mise sous tension pour conserver des données.
* DRAM (RAM dynamique) plus rapide (temps d'accès de 60ns) mais nécessitant un rafraîchissement régulier de l'information.
* SRAM (RAM statique)

### Mémoire morte ROM (Read Only Memories)

#### Utilisation

Sert à stocker de façon indélébile les paramètres de base d'un calculateur :
* le programme (suite d'instructions que devra effectuer le MCU)
* les calibrations (valeurs numériques des paramètres définis par les instructions du programme).
La ROM n'est pas une mémoire volatile : son contenu n'est pas perdu en cas de coupure de la tension d'alimentation du calculateur (débranchement calculateur, débranchement de la batterie).
On distingue la mémoire ROM interne au microcontrôleur (elle n'est pas indispensable) de la mémoire ROM externe.
Enfin, on distingue différentes technologies de mémoires mortes :
- la ROM,
- la PROM
- l'EPROM,
- l'EEPROM,
- la FLASH-EPROM.

Voyons en détails les caractéristiques de ces mémoires mortes.

#### ROM

Ce sont des circuits intégrés (à lecture seule) programmés une seule fois lors de la fabrication, sans effacement possible ultérieur. La programmation se fait au moyen d'un masque agissant sur les diodes ou des transistors, bipolaires ou MOS. Il faut de grandes quantités pour amortir le prix de revient élevé du masque. N'est pas utilisée par les électroniciens amateurs.

#### PROM ( de Programmable Read Only Memories)

Ce sont des ROM programmables par l'utilisateur (à l'aide d'un programmateur). Elles sont achetées vierges : c'est l'utilisateur qui y inscrit son propre programme. Une fois programmées, elles ont le même usage que les ROM. Utilisées pour de faibles quantités. Reviennent plus cher par grosses quantités (pour un même programme) que les ROM programmées par le fabricant.

#### EPROM (de Erasable PROM)

L'EPROM est une PROM qui se laisse effacer à l'aide de lumière ultraviolette (utilisation d'un brûleur, encore appelé effaceur ou prommer). S'il faut modifier le programme (pour par exemple adapter le calculateur de contrôle moteur à une nouvelle essence), on efface l'EPROM puis on le reprogramme avec les données modifiées (à l'aide d'un programmateur d'EPROM).

#### EEPROM (de Electricaliy Erasable PROM)

Utilisant la technologie des portes de silicium flottantes, ce sont des ROM dont la programmation, l'effacement partiel ou global s'effectue électriquement. De par son prix et sa faible intégration, l'EEPROM est très peu utilisée actuellement en grande série. Par contre elle est appréciée par les électroniciens amateurs.

#### FLASH-EPROM

Cette mémoire morte a pour caractéristique de pouvoir s'effacer électriquement tout comme l'EEPROM.
Avantages de la FLASH-EPROM :
- La flash-eprom peut être effacée et reprogrammée sans la sortir du circuit dont elle fait partie.
- Les temps de programmation et d'effacement sont très rapide (d'ou leur préfixe : flash).
- Coût relativement bas en grande série.
Désavantages :
- la nécessité d'effacer toute la mémoire (pas d'effaçage partiel)

#### Comparaison des mémoires mortes

Comparaison | EPROM | Flash-EPROM | EEPROM
Taille relative de la cellule | 1 | 1,2 à 1,3 | 3 environ
Programmation | programmateur | à même le montage | à même le montage
Procédé | Hot Electronic Injection | Hot Electronic Injection | principe tunnel
Tension | 12,5 V | 12 V | 5 V (augmentation interne)
Résolution | Octet | Octet | Octet
Durée | <100 ms | <10 ms | 5 ms
Effacement | effaceur à UV | à même le montage | à même le montage
Procédé | Lumière à U.V | principe tunnel | principe tunnel
Tension | 12,5 V | 12 V | 5 V (augmentation interne)
Résolution | totalité de la puce | totalité de la puce | octet
Durée | 15 mn | 1 s | 5 ms

Tab. 1: tableau comparatif des caractéristiques des EPROM, FLASH-EPROM et EEPROM.

> ### Fonctionnement de la mémoire

Physiquement, la mémoire est constituée de milliers de condensateurs ou de bascules de type FLIP-FLOP.
Si un condensateur est chargé, le bit correspondant à ce condo à pour valeur "1". S'il est déchargé, sa valeur est "0".
Un condensateur correspond à une case mémoire. Cette case mémoire peut prendre seulement 2 valeurs, 0 ou 1.
Pour classer la mémoire afin de retrouver les informations, on utilise un système d'adresse, comme pour la poste. Si on veut écrire à Mr Tartempion dans la drôme, on indique sa ville (Valence), sa rue et son numéro d'habitation. Pour une case mémoire c'est pareil, on donne le numéro de cette case, c'est son adresse.
Pour le programmeur, cette adresse est en hexadécimal, et comme numéro d'adresse on trouve des adresses comme 8000, 810C, etc... Quand on donne l'adresse d'une case mémoire, le processeur est donc capable de s'y rendre et de lire le contenu à cette adresse, ou encore d'écrire une nouvelle valeur à cet emplacement mémoire.

### Dénomination des mémoires

24CXX indique des mémoires série. Le X8 trouvé dans les datasheets indiquent uniquement que les données sont organisées en blocs de 8 bits.
Le XX indique le nombre de kbits, donc par exemple 24C64 indique une mémoire de 64 kbit soit 8 ko. Eh oui, tout de suite ça le fait moins...
Les 24CXX sont des mémoires série.

## Présentation de la CPU

La CPU est constituée de 3 blocs fonctionnels :
- L'accumulateur (les registres), qui est un assemblage de bascules, et qui sont donc des mémoires pouvant contenir un nombre limité d'informations ou de données, directement exploitables par
- l'Unité Arithmétique et Logique (UAL), c'est le bloc fonctionnel capable d'exécuter un certain nombre d'opérations logiques (comme le ET, le NON-OU, etc.), l'opération à réaliser étant fournie par
- le séquenceur, qui décode les instructions du programme en opérations élémentaires compréhensibles par l'UAL.

En début d'opération, c'est l'accumulateur qui fournit l'UAL en données, et en fin d'opération (après traitement de la donnée par l'UAL suivant une opération élémentaire), c'est encore l'accumulateur qui reçoit la donnée résultante.

## Conversion Analogique Numérique (CAN)

Encore une fois je vous renvoie à cet excellent site d'électronique, e-lectronik, et sa page sur la CAN.
Ce qui est important c'est :
- la fréquence d'échantillonnage du signal (qui doit être le double de la fréquence max du signal à échantillonner) qui doit permettre de pouvoir redssiner fidèlement la courbe originelle juste avec quelques points, et
- le nombre de bits du codage numérique, qui détermine avec quelle précision sont placés les points.

## Présentation des outils de développement

Le MCU est une puce (circuit intégré) qui se place sur une carte électronique (le circuit imprimé), cette carte électronique permettant d'alimenter en +5V le MCU, de loger les mémoires supplémentaires (celles comprises dans le micro étant en générales insuffisantes pour contenir un programme digne de ce nom), de mettre en forme les signaux issus des capteurs pour que le signal soit compréhensible par le micro, de générer un signal d'horloge pour les MCU qui n'en possèdent pas une en interne, etc. Cette carte électronique, dans le cas de l'injection électronique, est appelée Calculateur. A noter que la tendance actuelle est de loger l'électronique de mise en forme des signaux à l'intérieur même du capteur (capteurs intelligents).

Normalement, le MCU n'est positionné sur la carte électronique qu'une fois que son programme est chargé en mémoire. C'est pour pourquoi, on utilise un circuit électronique spécial dédié à cette fonction, le programmateur (de MCU ou d'EEPROM suivant le type de MCU utilisé ou le type de mémoire contenant le programme).

Quand le programme est en mémoire, on place le circuit intégré dans le calculateur, et celui-ci est alors prêt à fonctionner. Comme les constructeurs automobiles lancent un modèle alors que celui-ci n'est pas totalement testé, ils font évoluer le programme de gestion de l'injection tout au long de la vie du véhicule. Ils s'arrangent alors pour le calculateur puisse aussi servir de programmateur, afin de modifier en douce (lors d'une vidange par exemple, sans le dire au client) le programme à l'intérieur du calculateur. Les à-coups que vous sentiez lorsque vous réaccélériez brutalement dans une côte à 30° pour une température de 34,3 °C avec la clim à fond auront alors disparus, parce que le programme prendra en compte ce point précis de fonctionnement en augmentant la richesse moteur par exemple.

Pour celui qui met au point un programme de son cru, il faut utiliser un kit de développement pour MCU. Ce kit contient une partie matérielle (l'émulateur), et une partie logicielle (le compilateur et le débuggueur).
Le prix de ces kits de développement dépassant les 150 euros, ils sont difficilement abordables pour l'électronicien amateur.

Un émulateur permet de remplacer physiquement le MCU sur la carte dans laquelle il va fonctionner. C'est une carte électronique qui possède une sortie (connection possédant le même nombre de pattes que le MCU). On branche cette connection sur l'emplacement du MCU dans le calculateur. L'émulteur possède physiquement toutes les fonctions du type de MCU que l'on utilisera au final, mais il permet d'être contrôlé par l'ordinateur donc de pouvoir lire à l'écran le contenu des mémoires, de placer des points d'arrêts, etc.
Si l'émulateur est temps réel, il permet de faire fonctionner le calculateur de la même façon que le fera plus tard le MCU placé dans le calculateur : c'est ce qu'on appelle le mode ISP (fonctionnement sur site).

Pour le particulier :

- Au niveau du logiciel, la solution la moins coûteuse (mais qui peut se révéler très coûteuse en temps de développement), est de passer par les compilateurs gratuits que l'on trouve sur internet, comme l'outils MPLAB mis à disposition par Microchip pour développer sur les MUC PIC. Cet outil permet de simuler sur PC le déroulement du programme sans avoir à le rentrer préalablement dans le MUC.
- Au niveau matériel, l'acquisition d'un programmateur dédié au type de MUC que l'on utilise reste indispensable (environ 60 €).
Pour les moins fortunés, on trouvera sur internet des circuits pour construire son propre programmateur (voir plus bas, chapitre des PICs). Pour les MUC qui ne s'écrivent qu'une seule fois (cas de moins en moins courant), on peut utiliser un programmateur avec un simulateur d'EPROM, c'est à dire que l'on écrit rapidement le programme sur une mémoire EEPROM ou Flash, et une fois que l'on est sûr que le programme marche on l'écrit une fois pour toute dans le MUC ou sur l'EPROM du calculateur.
Ensuite, en l'absence d'un émulateur, il faudra modifier le programme afin qu'il permette de débugger sans utiliser d'émulateur (par exemple qu'il envoie sur un port de sortie lu par l'ordinateur la valeur qu'il possède en mémoire et dont on n'est pas sûr qu'elle soit bonne), ce qui va impliquer de charger plusieurs fois la ROM contenant le programme. D'où l'intérêt d'avoir un programme d'écriture sur MCU rapide.

Sur les MUC modernes, il est tout à fait possible de programmer la ROM du MUC situé sur la carte finale, en fonctionnement. Pour cela, soit on prévoit une broche de type RS232 à raccorder à un PC pour programmer le MUC, soit on prévoit des boutons sur l'application qui permettent de modifier l'EEPROM interne.

## Utilisation de Arduino

### Principes de bases

Aujourd'hui, il existe Arduino qui pour 25 euros vous offre la carte programmateur avec son microcontroleur, et l'EDI Arduino pour gérer ça les doigts dans le nez.

#### Description carte Arduino

Cette carte contient le micro-controleur (mc), relié à diverses entrées et sorties (la prise USB, la prise d'alimentation externe si besoin (sinon la carte est alimentée par le port USB), les ports série et les diverses broches du mc).

#### Cartes additionnelles ou shields

Le format des sorties est fait de telle façon que d'autres cartes peuvent s'empiler sur le dessus, ces cartes additionnelles étant appelées des shields (boucliers en français). Par exemple, vous voulez un port ethernet pour faire du réseau, vous clipsez sur arduino un shield éthernet. Si vous voulez en plus échanger des données via bluetooth, vous clipsez sur le shield éthernet un shield bluetooth. On peut ainsi empiler les une sur les autres beaucoup de cartes / shields.

#### Principe de fonctionnement

Un programme binaire est envoyé depuis le PC par le port USB dans la mémoire du microcontroleur, zone de mémoire appelée bootloader. Quand le mc est alimenté, il détecte d'abord s'il est en mode chargement d'un nouveau porgramme d'exécution, sinon il va lancer le programme déjà écrit dans le bootloader.

#### Communication

L'arduino peut communiquer avec d'autres mc via un port I2c ou un port série. Il peut communiquer avec l'ordinateur via son port USB, son port série ou le bluetooth. Avec l'utilisateur via des shields écrans (certains en couleur et tactiles comme ceux des portables) et des claviers.

Mais à mon sens, s'il faut utiliser des périphériques d'entrée ou sortie il faut utiliser les capacités des smartphones ou tablettes android, qui peuvent communiquer via USB ou bluetooth avec l'Arduino en utilisant les programmes de communication Arduino sur android. En gros, Arduino récupère les informations de divers capteurs, les mets en forme voir fait un prétraitement, puis envoit tout ça à un ordinateur/tablette/smartphone pour que ce dernier, avec ses capacités de traitement plus importantes, finalise l'exécution et présente le tout dans une interface homme-machine plus conviviale.

### Installation EDI Arduino

Aller dans la logithèque Ubuntu, taper "Arduino" et cliquer sur installer. Le programme est installé. On peut développer un nouveau programme (appelé croquis par la suite), le compiler et l'envoyer par le port USB dans le bootLoader du microcontroleur.

Cet EDI est aussi relié via l'USB au port série du micro-controleur, on peut récupérer dans le simulateur série de l'EDI (installé sur le PC) les données envoyées par le microcontroleur, afin de les afficher par exemple pour les tests.

### Connection arduino au PC

Brancher l'Arduino sur une prise USB du PC. La led d'arduino s'allume. Ouvrir l'EDI Ardino, aller dans port, sélectionner le port proposé.

### Programmer et exécuter sur arduino

Taper le croquis. Cliquer sur la flèche verte, le croquis est compilé, et s'il n'y a pas d'erreurs, le programme est envoyé dans le bootloader Arduino, puis exécuté.

### Croquis minimal

Il y a la déclaration des variables et constantes globales, la fontion setup() et la fonction loop() qui boucle sur elle-même.

## Application aux microcontrôleur PIC 16F84 ou PIC 16F628

La plupart des montages sur internet utilisent un PIC 16F84 de Microchips. Ce dernier, bien que peu puissant par rapport au 68HC11 de Motorola, à l'avantage d'être 2 fois moins cher, et de suffire dans la plupart des applications recherchées.
Le PIC 16F628 est amené à terme à remplacer le PIC 16F84. Il faut effectuer quelques modifications de montage et de programmation pour adapter un montage prévu pour un 84 à un 628 (les deux ont le même brochage).
Coûtant le même prix qu'un PIC 16F84, le PIC 16F628 est bien plus performant.

### Notation utilisée

PIC 16F628-20/P
PIC c'est le nom commercial des microcontrôleurs fabriqués par l'entreprise "Microchips".
-20 c'est à dire que le MCU peut fonctionner jusqu'à 20 MHz.

### Communication entre le PC et le PIC

Le moyen le plus simple est d'utiliser un port facilement accessible : les ports ISA et PCI sont donc à banir. De plus ces ports nécessite la programmation d'un driver : compliqué. Il reste donc le port parallèle, série et USB. Le port parallèle semble être un bon port pour faire de l'électronique mais depuis Windows XP il n'est pas accessible directement. Un autre inconvénient est que si l'on veut utiliser les protocoles du port parallèle il nous faut connecter une bonne dizaine de fils ce qui augmente le risque d'erreur et n'est pas pratique pour l'expérimentation.
Enfin, il nous reste le port USB et le port Série. Le port USB est aussi très compliquer (les périphériques doivent s'authentifier et le protocole est assez complexe). De plus ce port nécessite encore la creation d'un driver.
Le seul port qu'il nous reste est donc le port série. Cela tombe bien car celui ci est parfait pour l'expérimentation. D'abord il y a l'hyperterminal qui permet de communiquer facilement avec le port série et en plus le port est facile à programmer (voir « liaison entre PC et PIC avec le port série » et « brochage du port série du PC »). Sa seule limite est le nombre de port (seulement 2) et la vitesse (max 11Ko/s) mais qui n'est pas critique vu la vitesse des pics.

### Electronique de commutation

Transistor = faibles intensités (celles utilisées en électronique).
Thyristor = fortes intensités (constitué de 2 triacs tête bêche)
Relais (très fortes puissances).

### Liste du matos nécessaire

#### Charge fixe

1 Programmateur

#### Charge variable

1 microcontroleur

1 régulateur 5V

## Pour en savoir plus ...

On peut trouver dans le commerce les livres suivants :

Les liens internet sont foison :

- Docs sur l'apprentissage des PICs : Un des meilleure formation sur le 16f84 reste encore le manuel de BIGONOFF, une page de pdf qui est bien structurée et relativement simple pour débuter .

- Brochage d'un PIC 16F84 avec un oscillateur externe XT (mode d’oscillation du PIC à partir d’un oscillateur externe) : soit dans les data books, soit dans http://www.jdm.homepage.dk/newpic1.htm

à suivre...