<page> <title>Microcontrôleur</title> <id>58048</id> <revision> <id>31777766</id> <timestamp>2008-07-21T23:51:31Z</timestamp> <contributor> <username>TXiKiBoT</username> <id>195090</id> </contributor> <minor /> <comment>robot Ajoute: [[mk:Микроуправувач]]</comment> <text xml:space="preserve">{{ébauche|électronique}} [[Image:MC68HC11 microcontroller.jpg|thumb|230px|Le [[Motorola 68HC11]], ici en boîtier [[PLCC]], est un microcontrôleur réputé.]] Un '''microcontrôleur''' est un [[circuit intégré]] qui rassemble les éléments essentiels d'un [[ordinateur]] : [[processeur]], [[Mémoire informatique|mémoire]]s ([[mémoire morte]] pour le programme, [[mémoire vive]] pour les données), unités périphériques et interfaces d'[[entrées-sorties]]. Les microcontrôleurs se caractérisent par un plus haut degré d'intégration, une plus faible consommation électrique (quelques milliwatts en fonctionnement, quelques nanowatts en veille), une vitesse de fonctionnement plus faible (quelques mégahertz) et un coût réduit par rapport aux [[microprocesseur]]s polyvalents utilisés dans les [[Ordinateur personnel|ordinateurs personnels]]. Par rapport à des systèmes électroniques à base d'un [[microprocesseur]] et de composants séparés, les microcontrôleurs permettent donc de diminuer la taille, la consommation électrique et le coût des produits. Ils ont ainsi permis de démocratiser l'utilisation de l'informatique dans un grand nombre de produits et de procédés. Les microcontrôleurs sont fréquemment utilisés dans les [[Système embarqué|systèmes embarqués]], comme les contrôleurs des moteurs automobiles, les télécommandes, les appareils de bureau, l'électroménager et les jouets. == Introduction : le domaine visé, les systèmes embarqués == La plus grande partie des systèmes informatiques utilisés de nos jours sont des [[systèmes embarqués]] : téléphones mobiles, horloges, [[baladeur]]s, récepteurs [[Global Positioning System|GPS]], électroménager, véhicules de transport. Les systèmes embarqués se démarquent des systèmes informatiques traditionnels selon plusieurs aspects : * ils présentent des contraintes de taille, de consommation électrique et de coût importantes ; * ils sont en général dédiés à une tâche bien précise. La taille des programmes et la quantité de mémoire nécessaire est donc relativement modeste ; * ils doivent communiquer avec des dispositifs d'[[entrées-sorties]] : boutons, relais, résistances variables, optocoupleurs, moteurs électriques, [[Diode électroluminescente|LED]], circuits intégrés logiques, etc. ; * ils n'ont parfois aucun dispositif d'[[interface homme-machine]] (ni clavier, ni écran, ni disques, ni imprimante, etc.). Par exemple, un contrôleur d'injection dans une voiture est totalement ''invisible'' pour le conducteur. == Du microprocesseur au microcontrôleur == Le [[processeur]] est l'élément central d'un système informatique : il interprète les instructions et traite les données d'un programme. Il a besoin de certains éléments externes pour fonctionner : * une horloge pour le cadencer (en général à [[Quartz (électronique)|quartz]]) ; * de la [[Mémoire informatique|mémoire]] pour stocker les variables (obligatoirement [[mémoire vive]], RAM) et le programme. Si l'on conçoit un système dédié à une tâche bien particulière (ce qui est le cas des systèmes embarqués), le programme n'est pas amené à changer. Il peut donc être stocké dans une [[mémoire morte]] (ROM) ; * des [[périphérique informatique|périphériques]] (pour interagir avec le monde extérieur). Ces éléments sont reliés par 3 bus : * le [[bus d'adresse]] qui permet au microprocesseur de sélectionner la case mémoire ou le périphérique auquel il veut accéder pour lire ou écrire une information (instruction ou donnée) ; * le [[bus de données]] qui permet le transfert des informations entre les différents éléments ; ces informations seront soit des instructions, soit des données en provenance ou à destination de la mémoire ou des périphériques ; * le [[bus de contrôle]] qui indique si l'opération en cours est une lecture ou une écriture, si un périphérique demande une [[interruption (informatique)|interruption]] etc. [[Image:SystèmeMicroproc.png|frame|center|Structure d'un système à microprocesseur]] Traditionnellement, ces composants sont intégrés dans des circuits distincts. Le développement d'un tel système à base de [[microprocesseur]] se trouve donc pénalisé par (liste non exhaustive) : * La nécessité de prévoir l'interconnexion de ces composants ([[bus informatique|bus]]) ; * la place occupée physiquement par les composants et les moyens d'interconnexion ; * la consommation énergétique ; * la chaleur dégagée ; * le coût financier. Les microcontrôleurs améliorent l'intégration et le coût (lié à la conception et à la réalisation) d'un système à base de [[microprocesseur]] en rassemblant ces éléments essentiels dans un seul [[circuit intégré]]. Un microcontrôleur est donc un composant autonome, capable d'exécuter le programme contenu dans sa mémoire morte dès qu'il est mis sous tension. Selon les modèles et les conditions de fonctionnement, les microcontrôleurs peuvent avoir besoin de quelques composants externes (quartz, quelques [[Condensateur (électricité)|condensateurs]]), mais ceci reste très limité. Lorsque ''toutes'' les fonctions du système informatique sont regroupées dans un unique circuit intégré, y compris les fonctions logiques, analogiques, radiofréquence, d'interface (USB, Ethernet, etc.), on parle alors de ''[[System on Chip]]'' (''système sur puce'' ou ''système mono-puce''). Ces composants sont basés sur un ou plusieurs cÅ“urs de microcontrôleur, de [[microprocesseur]] ou de [[Digital Signal Processor|DSP]]. == Composants intégrés == [[Image:153056995 5ef8b01016 o.jpg|right|thumb|230px|Le [[circuit intégré]] d'un [[Intel]] 8742, un microcontrôleur 8 bits qui comprend un [[processeur]] cadencé à 12 MHz, 128 octets de mémoire vive, une [[Erasable Programmable Read Only Memory|EPROM]] de 2048 bits, et des entrées-sorties sur une unique puce.]] Un microcontrôleur intègre sur une unique puce : * un [[processeur]] (CPU), avec une largeur du [[chemin de données]] allant de 4 bits pour les modèles les plus basiques à 32 ou 64 bits pour les modèles les plus évolués ; * de la [[mémoire vive]] (RAM) pour stocker les données et variables ; * de la [[mémoire morte]] (ROM) pour stocker le programme. Différentes technologies peuvent être employées : [[Erasable Programmable Read Only Memory|EPROM]], [[Electrically-erasable programmable read-only memory|EEPROM]], [[mémoire flash]] (la plus récente) ; * souvent un [[Oscillateur électronique|oscillateur]] pour le cadencement. Il peut être réalisé avec un quartz ou un [[circuit RC]] ; * des périphériques, capables d'effectuer des tâches spécifiques. On peut mentionner entre autres : ** les [[Convertisseur analogique-numérique|convertisseurs analogiques-numériques]] (donnent un nombre binaire à partir d'une tension électrique) ; ** les [[Convertisseur numérique-analogique|convertisseurs numériques-analogiques]] (effectuent l'opération inverse) ; ** les générateurs de signaux à [[modulation de largeur d'impulsion]] (MLI, ou en Anglais, PWM pour ''Pulse Width Modulation'') ; ** les [[Timer (microcontrôleur)|timers]]/[[compteur]]s (compteurs d'impulsions d'horloge interne ou d'événements externes) ; ** les [[Chien de garde (informatique)|chiens de garde]] ; ** les comparateurs (comparent deux tensions électriques) ; ** les contrôleurs de bus de communication ([[UART]], [[I²C]], [[Interface de communication série|SSP]], [[Controller area network|CAN]], [[FlexRay]], [[Universal Serial Bus|USB]], [[Ethernet]], etc.). [[Image:4pics.jpg|thumb|230px|Ces microcontrôleurs PIC intègrent des quantités de composants très différentes.]] Le fonctionnement des périphériques peut être paramétré et commandé par le programme et/ou les entrées-sorties. Les périphériques peuvent générer une [[Interruption (informatique)|interruption]] qui contraint le processeur à quitter le programme principal pour effectuer une routine de traitement lorsqu'un événement survient. Les microcontrôleurs peuvent généralement se placer dans un état de sommeil, dans lequel ils présentent une très faible consommation électrique. Un signal envoyé par l'un de leurs périphériques (timer, broche d'entrée-sortie) permet de les faire sortir de cet état de sommeil. Certains microcontrôleurs ont un nombre très restreint de broches, si bien qu'une broche donnée peut correspondre à plusieurs périphériques internes. La fonction choisie doit alors être sélectionnée par logiciel. Le choix des périphériques à intégrer dans un microcontrôleur est délicat. Les fabricants doivent réaliser un compromis entre des besoins contradictoires : utiliser des fréquences élevées, réduire la taille du circuit, apporter des fonctionnalités nombreuses, élaborer une architecture flexible, assurer des coûts modérés, etc. == Architecture == Un microcontrôleur peut effectuer la plupart des [[Instruction machine|instructions machine]] habituelles, avec certaines restrictions liées à son caractère embarqué (taille restreinte des mots machine, petite taille disponible, etc.). On note cependant quelques particularités. Les capacités mathématiques sont en général particulièrement limitées, réduites à des additions, soustractions et décalages sur des octets pour les plus simples d'entre eux. Les calculs mathématiques évolués doivent donc être ramenées à une succession d'opérations simples portant seulement sur des octets. Des routines mathématiques (petits programmes permettant de réaliser les calculs complexes) ont été développées pour la plupart des microcontrôleurs populaires. Les instructions d'entrée-sortie sont bien développées, de façon à pouvoir : * lire l'état d'un port d'entrée ; * écrire une information dans le registre d'un port de sortie, qui maintient l'information à la disposition des circuits extérieurs. Les microcontrôleurs disposent généralement de nombreuses instructions dédiées aux opérations sur les bits, de façon à rendre les programmes plus compacts, notamment lorsqu'ils agissent sur une entrée-sortie donnée. Ainsi, un processeur généraliste peut avoir besoin de ''plusieurs'' instructions pour tester la valeur d'un bit d'un registre et effectuer un saut si le bit vaut vrai. Cette fonction courante est assurée par ''une seule'' instruction dans certains microcontrôleurs<ref>Par exemple, l'instruction <code>BTFSS</code> (« bit test file, skip if set ») sur PIC permet d'ignorer l'instruction suivante si un certain bit d'un registre est à 1.</ref>. Les [[mode d'adressage|modes d'adressage]] utilisables sont en général semblables à ceux des autres processeurs. De façon générale, les instructions et modes d'adressage disponibles varient fort selon les familles de microcontrôleurs. Certains microcontrôleurs suivent une [[architecture Harvard]]<ref>Par exemple les [[Microcontrôleur PIC|PIC]] et les [[Atmel AVR|AVR]].</ref> : ils possèdent des bus séparés pour la mémoire de programme et la mémoire de données, ce qui permet aux accès d'avoir lieu en même temps. Lorsqu'on utilise une architecture Harvard, les mots de programme peuvent avoir une largeur (nombre de bits) différente de celle des mots de la mémoire de données et des registres. Par exemple, il peut y avoir des instructions de 12 bits et des registres de données de 8 bits. == Utilisations et volume du marché == Les microcontrôleurs sont très utilisés dans tous les [[systèmes embarqués]] évoqués en introduction. Ils sont également très prisés en [[robotique]] amateur ([[robot]]s autonomes) et en modélisme (automatismes des maquettes de réseaux ferroviaires par exemple). Les microcontrôleurs représentent la plus grosse partie des ventes dans le marché des [[microprocesseur]]s{{Référence nécessaire}}. En effet, un foyer moyen d'un [[pays développé]] est susceptible d'être équipé de seulement un ou deux microprocesseurs généralistes (ordinateurs), mais d'une ou deux douzaines de microcontrôleurs (appareils électroménagers). Une automobile de milieu de gamme est équipée d'au moins 50 microcontrôleurs. [[Image:DIL28 UV ST6E15.jpg|thumb|right|230px|Microcontrôleur [[ST6]] équipé d'une mémoire [[EPROM]] effaçable aux UV.]] Les fabricants proposent souvent des versions spéciales de leurs microcontrôleurs pour faciliter le développement matériel et logiciel des applications. Par exemple, lorsque les mémoires mortes utilisées étaient des [[EPROM]], il existait des variantes des microcontrôleurs équipées de ''fenêtres'' sur le dessus, qui permettaient d'effacer le programme grâce à de la lumière [[ultra-violet]]te. Ceci permettait de recommencer une programmation après un cycle programmation-test. Pour de petites séries (quelques milliers d'unités ou moins), les microcontrôleurs ''programmables une seule fois'' (OTP, ''one-time programmable'') sont économiques. Ils sont basés sur la même puce que la version UV-EPROM, se programment avec le même matériel, mais le boîtier n'est pas équipé de la fenêtre qui permet l'effacement (et qui est onéreuse). Il peut exister des versions de microcontrôleurs dépourvus de mémoire morte interne. La mémoire morte est alors située dans un boîtier extérieur, par exemple une [[EPROM]]. Il suffit alors d'un simple programmateur d'EPROM pour réaliser la programmation, mais des broches du microcontrôleur sont requises pour la communication avec la mémoire externe, et ne peuvent donc pas être utilisées pour les entrées-sorties. Ces versions sont plus coûteuses, mais peuvent se révéler intéressantes si les quantités visées sont faibles. Plus rarement, on rencontre une variante de l'approche précédente, le ''piggy back''. Le microcontrôleur ne dispose pas non plus de mémoire morte interne, mais la communication avec l'EPROM se fait non pas par des broches d'entrée-sortie, mais par des broches spéciales situées sur le dessus du boîtier. L'EPROM se fixe alors ''au-dessus'' du microcontrôleur, et ne monopolise pas de port d'entrée-sortie. Ces versions sont souvent onéreuses et peu pratiques, sauf pour les phases de développement et les très petites séries. Le recours à la programmation ''sur place'', dans le circuit applicatif, permet de mettre à jour le programme après la fabrication du produit. Lorsqu'il s'agit de produire de plus grandes séries (plusieurs milliers et plus), le coût de réalisation d'un masque pour la fabrication de mémoire morte non programmable est facilement amorti sur tous les exemplaires produits. On peut alors fixer le contenu de la mémoire morte lors de la réalisation du circuit intégré, et non plus lors du montage du produit. Cependant, ces mémoires présentent l'inconvénient de ne pouvoir être mises à jour. Si l'on envisage néanmoins de telles mises à jour, on peut prévoir de monter le microcontrôleur sur un support, ce qui permet de le faire remplacer par un technicien en cas nécessité. == Environnements de programmation == Le programme d'un microcontrôleur est généralement appelé ''firmware'' ou ''[[micrologiciel]]''. À l'origine, les microcontrôleurs se programmaient en [[assembleur_(langage)|assembleur]]. Désormais, on utilise de plus en plus des langages de haut niveau, notamment le [[C_(langage)|langage C]]. Les compilateurs C pour microcontrôleurs présentent généralement certaines restrictions, et fonctionnalités particulières, liées aux spécificités des microcontrôleurs. Le compilateur [[GCC]] peut produire du code pour certains microcontrôleurs<ref>Voir : [http://gcc.gnu.org/install/specific.html Host/Target specific installation notes for GCC].</ref>. Certains microcontrôleur disposent également de firmware réalisant l'[[Interprète (informatique)|interprétation]] d'un langage évolué. Ainsi, l'[[Intel 8052]] et le [[Zilog Z8]] ont pu être programmés en [[BASIC]] dès leurs débuts. Plus récemment, le [[BASIC Stamp]] dispose d'un interprète BASIC en mémoire morte. Il existe des environnements pour aider au développement de certaines applications. Par exemple, [[LabVIEW]] et son langage G permettent de programmer les microcontrôleurs [[Blackfin]] d'[[Analog Devices]]. Des simulateurs sont disponibles pour certains microcontrôleurs, comme l'environnement [[MPLAB]] de [[Microchip]]. Les développeurs peuvent ainsi analyser le comportement du microcontrôleur et du programme, comme s'ils s'agissait du composant réel. Un simulateur montre l'état interne du processeur, ainsi que celui de ses sorties. Bien que la plupart des simulateurs ne proposent pas de simuler les autres composants d'un système, ils permettent de spécifier les entrées à volonté. On peut de cette façon créer des conditions qui seraient sans cela difficiles à reproduire dans une implémentation physique. Cela facilite donc l'analyse et la résolution des problèmes. [[Image:PICkit2.jpg|thumb|230px|Programmateur de microcontrôleur PIC.]] Une fois le programme compilé, le fichier binaire doit être envoyé au microcontrôleur. On utilise soit : * un [[programmateur universel|programmateur]] de microcontrôleurs et souvent également d'EEPROM. On parle alors de programmateur universel ; * un [[In-System_Programming|programmateur ISP]] qui a l'avantage de ne pas nécessiter de sortir le microcontôleur du système électronique complet. Toutefois, le programme qui a été envoyé peut comporter des [[bogue_(informatique)|bogues]], aussi, pour parvenir à les détecter on peut utiliser un [[émulateur in-circuit]]. Le projet [[μCLinux]] vise à faire fonctionner [[Linux]] sur des microcontrôleurs et des microprocesseurs dépourvus de [[Unité de gestion mémoire|MMU]]. Il est par exemple disponible sur [[Motorola ColdFire]], [[Blackfin]], [[Intel i960]], [[Motorola QUICC]], [[ARM7-TDMI]], NEC V850. == Familles de microcontrôleurs == * la famille [[AT91|Atmel AT91]] ; * la famille [[Atmel AVR]] ; * le [[C167]] de [[Siemens AG|Siemens]]/[[Infineon]] ; * la famille [[Hitachi H8]] ; * la famille [[Intel 8051]], qui ne cesse de grandir ; de plus, certains processeurs récents utilisent un cÅ“ur 8051, qui est complété par divers périphériques (ports d'E/S, compteurs/temporisateurs, convertisseurs A/N et N/A, [[Chien de garde (informatique)|chien de garde]], [[Superviseur de tension|superviseur de tension]], etc.) ; * l'[[Intel 8085]], à l'origine conçu pour être un microprocesseur, a en pratique souvent été utilisé en tant que microcontrôleur ; * le [[Freescale 68HC11]] ; * la famille [[Freescale 68HC08]] ; * la famille [[Freescale 68HC12]] ; * la famille des [[Microcontrôleur PIC|PIC]] de [[Microchip Technology|Microchip]] ; * la famille des [[Microcontrôleur PIC|dsPIC]] de [[Microchip Technology|Microchip]] ; * la famille des [[ST6]], ST7, ST10, STR7, STR9 de [[STMicroelectronics]] ; * la famille [[ADuC]] d'[[Analog Devices]] ; * la famille PICBASIC de [[Comfile Technology]]; * la famille [[MSP430]] de [[Texas Instruments]] ; * la famille [[Intel 8080|8080]], dont les héritiers sont le microprocesseur [[Zilog Z80]] (désormais utilisé en tant que contrôleur dans l'embarqué) et le [[Rabbit (microcontrôleur)|microcontrôleur Rabbit]] ; * la famille [[PSoC]] de [[Cypress]] ; * la famille [[LPC21xx]] [[ARM7-TDMI]] de [[Philips]] ; * la famille V800 de [[NEC]] ; * la famille K0 de [[NEC]]. == Notes et références == <references/> {{Portail|informatique|électricité et électronique}} [[Catégorie:Microcontrôleur|*]] [[af:Mikrobeheerder]] [[ar:متØÙƒÙ… دقيق]] [[bs:Mikrokontroler]] [[ca:Microcontrolador]] [[cs:JednoÄipový poÄÃtaÄ]] [[da:Mikrocontroller]] [[de:Mikrocontroller]] [[en:Microcontroller]] [[es:Microcontrolador]] [[fa:ریزکنترلگر]] [[fi:Mikrokontrolleri]] [[gl:Microcontrolador]] [[hi:माइकà¥à¤°à¥‹à¤•ंटà¥à¤°à¥‹à¤²à¤°]] [[hu:Mikrokontroller]] [[id:Pengendali mikro]] [[is:Örtölva]] [[it:Microcontrollore]] [[ja:マイクãƒã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©]] [[ko:마ì´í¬ë¡œì»¨íŠ¸ë¡¤ëŸ¬]] [[mk:Микроуправувач]] [[ms:Mikropengawal]] [[nl:Microcontroller]] [[nn:Mikrokontroller]] [[no:Mikrokontroller]] [[pl:Mikrokontroler]] [[pt:Microcontrolador]] [[ru:Микроконтроллер]] [[si:à¶šà·Šâ€à·‚ුද්â€à¶»à¶´à·à¶½à¶šà¶º]] [[simple:Microcontroller]] [[sk:Mikrokontrolér]] [[sl:Mikrokontroler]] [[sv:Mikrokontroller]] [[tr:Mikrodenetleyici]] [[uk:Мікроконтролер]] [[vi:Vi Ä‘iá»u khiển]] [[zh:å•片机]]</text> </revision> </page>