L’objectif de cet article est de vous familiariser avec ces petites puces qui apparaissent souvent comme horriblement compliquées quand on débute mais qui n’ont rien de sorcier.

Les microcontrôleurs sont de petites puces électroniques dotées d’un processeur, de mémoires rom et ram et de différents périphériques. L’utilisateur peut, au travers d’un programmateur, inscrire dans la mémoire un programme. Ce programme qui restera enregistré dans la mémoire rom même quand la puce n’est plus alimentée, s’exécutera dès que la tension d’alimentation sur la puce sera suffisante. Ainsi, l’utilisateur peut réduire à une seule petite puce tout un circuit électronique. Le programme implémenté peut calculer des opérations, créer des timings, contrôler les périphériques…

Les périphériques :

Pour que la puce soit efficace, elle doit communiquer avec d’autres circuits. Nous retrouvons ainsi des sorties logiques qui peuvent prendre des niveaux 1 ou 0 (être à la tension d’alimentation ou à la masse) pour communiquer un état. Inversement on trouve des entrées qui peuvent recevoir un état 1 ou 0 de la part d’un autre circuit.

Beaucoup de microcontrôleur sont aussi dotés d’un convertisseur analogique numérique (ADC) qui leur permet de mesurer une grandeur analogique (mesurer une tension). Beaucoup de microcontrôleurs ne possèdent qu'un convertisseur mais plusieurs entrées. C'est-à-dire que l’on peut présenter plusieurs tensions analogiques différentes à mesurer, mais qu’une seule ne sera mesurée à la fois.

On trouve beaucoup moins souvent des sorties analogiques (DAC). A la place de celles-ci, les constructeurs ont le plus souvent implémenté des sorties PWM (pulse width modulation) . Une PWM est un signal de fréquence constante mais où son rapport cyclique entre la durée du temps à l’état (1) et la durée du temps à l’état bas (0) est configurable. Ces signaux sont très utilisés dans le contrôle de puissance où encore pour créer une tension analogique (au travers d’un filtrage passe bas).

Afin de faciliter les communications, on trouve différents types de protocoles intégrés de façon hardware comme l’UART (rs232), l’I²C, le SPI… Si ces protocoles sont absents dans votre microcontrôleur, rien ne vous empêche de les recréer de façon software. L’avantage de l’implémentation hardware est que pendant la communication votre microcontrôleur peut calculer d’autres processus.

Pour gérer correctement des timing, les microcontrôleurs possèdent un ou plusieurs timer. Le timer est une variable qui s’incrémente à chaque coup d’horloge. C'est-à-dire qu’un microcontrôleur est cadencé à une certaine vitesse (en MHz), de cette vitesse souvent imposée par un Quartz ou un oscillateur RC, on retire une fréquence d’horloge, l’horloge cadence elle-même l’incrémentation du timer. Il est alors possible de créer des timing très précis. En mesurant la variation du timer, on situe le temps passé.

Ceci est bien sûr une liste non exhaustive des périphériques, en fonction du microcontrôleur on trouve différentes caractéristique.

Si on prend par exemple, la présentation résumée du MSP430F1232, microcontrôleur de Texas Instrument : On trouve en premier lieu la fréquence à laquelle il peut être cadencé, ceci informe de sa capacité à calculer les informations (s’il peut traiter beaucoup de données (de la vidéo par exemple) ou peu). Nous avons ensuite la taille de la mémoire flash qui va contenir le programme qui sera exécuté (votre application). Si vous comptez faire des implémentations complexes comme par exemple la gestion du réseau Ethernet sur votre micro, la taille du programme risque d’être importante. Votre micro doit être adapté à votre utilisation. La taille de la mémoire, c’est la que vous stocker vos variables. On remarque que celle-ci est limitée et ceci peut poser des problèmes quand vous devez traiter des signaux numériques.

Les GPIO sont les entrées/sorties de votre micro. Ici nous avons 22 entrées/sorties. Chaque E/S peut être configurée indépendamment en entrée ou en sortie et être reconfigurée en cours de programme.

Le boitier vous indique les dimensions de la puce. Sur cette même puce on trouve aussi un convertisseur ADC sur 10Bit (1024 niveau), Une interface de communication UART ou SPI et un Timer 16Bits.

mspex


Si on regarde à présent le PIC10F200 (petit microcontrôleur de Microchip), on trouve beaucoup moins de mémoire, il n’y a plus de convertisseur analogique, seulement 4 entrées/sorties et un timer. Ce petit contrôleur trouve sa place dans de très petites applications comme par exemple un interrupteur électronique (simple).

pic10f200ex

Les interruptions

Nouvelle caractéristique pour les microcontrôleurs : les interruptions. Pour expliquer simplement, si par exemple vous êtes à la maison. Pour savoir si quelqu’un se présente à la porte vous avez deux solution : soit vous allez regarder toutes les minutes s’il y a quelqu’un, nous parlerons alors de « Pooling » soit vous placez une sonnette. Quand la sonnette retentie vous arrêtez votre travail pour vous rendre à la porte, quand la rencontre est terminée vous reprenez directement votre travail là où vous l’avez laissé. On parle alors que la sonnette est une source d’interruption pour vous. De même manière dans un microcontrôleur on trouve des sources d’interruptions: une entrée change d’état, le timer à atteint la valeur souhaitée, une donnée a été reçue où a fini d’être envoyée par un protocole de communication, une conversion analogique s’est finie,… Les interruptions sont très importantes pour optimaliser les performances de votre application. Le programme principal tourne, quand une interruption se manifeste, le programme s’arrête, sauvegarde l’état dans lequel il était. Il exécute alors un nouveau programme bien spécifique qui va gérer l’interruption. Lorsque ce programme est terminé, il retourne là ou il était avant l’interruption et continue l’exécution de son programme.

La programmation

Les microcontrôleurs se programment généralement directement en assembleur ou en C.  On trouve aussi des compilateurs Basic.

Pour envoyer le programme dans la puce il est nécessaire de le compiler au travers de l’outil distribué le plus souvent gratuitement par le constructeur (MPLab pour les Pic, PSoC Designer pour les PSoC, IAR Kickstart pour les MSP430 par exemple) de la puce et d’envoyer ensuite le programme binaire à l’intérieur de la puce via un programmateur.

Un programmateur est un petit boitier de communication qui se connecte à une ordinateur via le port USB, Série ou parallèle et qui communique directement avec la puce au travers de deux trois broches bien spécifique. Par exemple dans le cas d’un PIC12F675, nous pouvons utiliser un PicKit 2 de microchip qui est un petit boitier qui se connecte au port USB et qui demande le câblage ci-dessus pour programmer la puce.

programmation

Beaucoup de puces de chez microchip peuvent être programmée au travers de ce PicKit2, celui-ci est disponible pour moins de 40€ chez votre revendeur.

pickit2


Si nous regardons d’autres puces, nous avons par exemple Cypress et ses PsoC qui sont des microcontrôleurs dans lequel on peut intégrer énormément de périphériques numériques (protocole de communication, timer, PWM,…) ou analogique (ADC, DAC, filtre, amplificateur,…). Pour cette puce nous retrouvons un petit programmateur d’une quarantaine d’Euro qui programmera vos puces de la même manière.

psoc

Pour les MSP430, qui sont les microcontrôleurs leader en consommation d’énergie (idéalement pour des applications sur batteries) il faudra compter une centaine d’euro pour se procurer le programmateur.

msp

Vous voilà un peu plus familiarisé avec ces petites puces… Vous l’aurez remarqué leurs possibilités sont énormes (et beaucoup n’ont pas été citées !). Une fois équipé du bon matériel il devient très facile de les exploiter. Nous reparlerons souvent de microcontrôleur sur ce site !