Généralités sur les microcontrôleurs |
par François Finfe | dernière mise à jour: December 29 2008 15:09:35. |
Sans vouloir relancer le débat de savoir lequel de ces language est le meilleure, on peut citer les avantages et inconvénients suivants de ces languages.
Assembler | Language C | |
| Avantages | ||
| Instructions élementaires (simple) | Instructions de haut niveau (plus simple à écrire) | |
| Nécessaire pour bien comprendre le fonctionnement du microcontrôleur | Maintenance facile et bonne lisiblité | |
| Code généralement plus efficace (plus léger, plus rapide) | Gère facilement des programmes complexes | |
| S'impose pour des routines à temps critiques | Code portable vers d'autre µc (moyennant parfois quelques modifications) | |
| Développement rapide, voir très rapide | ||
| Inconvénients | ||
| Code non portable (ne peut tourner que sur le processeur pour lequel il a été écrit) | Code source augmente de taille à la compilation. La taille du code dépend fort de la manière de "coder" du programmeur. | |
| Temps de développement long | On maitrîse pas (ou beaucoup moins bien) le code machine généré | |
| Difficile voir impossible pour des programmes complexes (calcul à virgule flottante, calcul trigonométrique,...) | ||
| Maintenance difficile et faible lisibilité | ||
Mon conseil pour les personnes qui n'ont aucunes expériences dans le domaine est de commencer par écrire quelques programmes simples en assembleur. Ensuite, on peut programmer en C.
Lorsque l'on maitrîse bien le language assembleur, il est ensuite beaucoup plus facile d'écrire des programmes en C qui sont bien optimisés, puisque l'on sait ce qui est le plus le plus efficace en asm.
Pour programmer en C, il faut d'abord connaître sa syntaxe, ce qui peut être déroutant au début, mais il existe de nombreux tutoriaux sur le net pour le C. Le C utilisé par les compilateurs pour les µc est souvent très proche l'ANSI C. On peut donc se baser sur des exemples de programme C prévu pour, par exemple, des logiciels puisque la syntaxe est identique.
Il existe de nombreux type de microcontroller, en vrac, citons les:
Ces processeurs sont les plus anciens. La plupart existe toujours et sont encore utilisés par les industriels en raisons de leur faible coût pour de très grosses quantités. Par exemple, le 8051 est encore utilisé dans le domaine de l'automobile.
Ces processeurs sont de type CISC (jeu d'instruction complexe) et 8-bit. Il existe des microcontrollers 16-bit et 32-bit. Citons :
Parmis les microcontrollers 32-bit, l'architecture ARM est de loin celle la plus utilisées dans les environnements embarqués où la consommation est critique.
Il existe plusieurs versions du core ARM (de ARM1 à ARM11).
L'ARM7 et ARM9 sont actuellement fort répandus. L'ARM9 est plutôt un microprocesseur.
Le core ARM par plusieurs fabricants de MCU dont voici une liste non exhaustive:
Les MCUs basé sur l'ARM Cortex M3 sont très interressants. Pour le prix d'un processeur 8-bit, vous disposez d'un microcontrolleur 32-bit. Les performances et la consommation dépasse largement les performances d'un 8-bit. On trouve chez Luminary, le LM3S101 (8 kB de flash et 2 kB de RAM, package SOIC), à environ 1$ pour de grosses quantités. Ce processeur risque de s'imposer pour des applications où les rapport performance/coût et performance/consommation sont les maîtres mots.
Remarque: les DSP (digital signal processor) sont des microcontrollers un peu particulier: ils sont dédiés au traitement numérique du signal. Leur architecture est optimisés pour cette tâche. Ils forment une famille de microcontroller à part entière.
Certains de ces microcontrolleurs (sauf les DSP) disposent des périphériques internes pour gérér l'USB, le TCP/IP (ethernet), LCD,...
Actuellement, les microcontrollers 8-bit de type RISC (Reduced Instruction Set Computers) sont de plus en plus utilisés au détriment des processeurs CISC.
Bien qu'il en existe bien d'autres microcontrollers, les plus populaires auprès des électroniciens amateurs sont :
Ces processeurs possèdent un jeu d'instructions réduit (moins que les CISC). Il faut plus d'instructions pour faire une opération qu'un CISC (qui peut souvent le faire en une opération) mais ils sont généralement plus rapide.
Ici aussi, il existe des partisans pour les 2 types.
| PIC16F648A | ATmega88 - 16MHz | |
| Architecture | RISC (33 instructions) | RISC, 130 instructions |
| Accumulateur logique | 1 seul (W) | 32, par adressage directe |
| Pile (Stack) | 8 niveaux | S'étend dans toute la RAM (en pratique celle que l'on utilise pas pour des variables |
| Mémoire Flash (programme) | 4 K instructions | 4 K instructions |
| EEPROM | 256 bytes | 512 bytes |
| RAM | 256 bytes | 1 K |
| Vitesse d'execution max(MIPS) | 20 MHz/(4c/instr) = 5 MIPS | 20 MHz/(1c/instr) = 20MIPS |
| Timers | 3 | 3 |
| ADC (CAN) | non | 10 bit, 8 canaux |
| Multiplication | non, à implémenter en S.W. | oui, implémenté en H.W. |
| Prix (à la pièce, chez les revendeurs) | 5 € | 5 € |
| Outils de développement ASM | MPLAB de Microchip (freeware) | AVR Studio d'Atmel(freeware) |
| Compilateur C | Pour les PIC16, différents compilateur C payant disponible en version d'essai ou version limité Pour les PIC18, il existe le compilateur C18 gratuit en version étudiant (quelques optimisations ne sont pas disponible ce qui augmente légèrement la taille du code). Il s'intègre à l'environement MPLAB | AVR-GCC, compilateur OpenSource (gratuit), disponible sous Windows dans la suite WinAVR. Il s'intègre entièrement dans AVR-Studio. Il peut également être utilisé sous Linux |
La différence du rapport perfomance/prix diminue pour les microcontrôleurs PIC18F par rapport l'ATmega32.
Les PICs sont très populaires dans le monde de l'électronicien amateur, car ceux-ci sont très simple à programmer en assembleur. Personnellement, j'ai travaillé avec des PICs et des ATmega. Je trouve que l'apprentissage de la programmation des ATmega est un rien plus complexe que celui des pics. Cependant, une fois cette étape passée, la programmation en ATmega est un peu plus efficace. Hormis la différence de prix, je pense que les 2 se valent. Si vous travaillez en C, vous ne verrez pratiquement pas de différences, hormis quelques unes au niveau de la syntaxe des compilateurs C (chaque compilateur a des instructions ou des implantations non conforme à l'ANSI C).