Vous êtes sur la page 1sur 28

Chapitre II : Microcontrôleurs

II.1 Microcontrôleurs

De nos jours, les microcontrôleurs sont si bon marché et faciles à obtenir qu'il est courant de les utiliser à
la place de circuits logiques simples comme des compteurs pour la seule raison de gagner en flexibilité de
conception et de réduire l'espace. Certaines machines et robots s'appuieront même sur un grand nombre
de microcontrôleurs, chacun enthousiaste à une tâche confiante. La plupart des nouveaux
microcontrôleurs sont "programmables dans le système", ce qui signifie qu’in peut ajuster le programme
en cours d'exécution, sans retirer le microcontrôleur de sa position. Dans cette partie, nous discutons
brièvement les différents microcontrôleurs AVR, ARM, 8051 et PIC.

Définition :

Un microcontrôleur peut être comparable à un petit ordinateur autonome ; c'est un appareil extrêmement
puissant, capable d'exécuter une série de tâches préprogrammées et d'interagir avec des périphériques
matériels supplémentaires. Étant emballé dans un minuscule circuit intégré (CI) dont la taille et le poids
sont régulièrement négligeables, il devient le contrôleur parfait pour les robots ou toutes les machines
nécessitant un certain type d'automatisation intelligente. Il a été conçu pour la première fois par Michael
Cochran et Gary Boone.

Un seul microcontrôleur peut suffire à gérer un petit robot mobile, une machine à laver automatique ou
un système de sécurité. Plusieurs microcontrôleurs contiennent une mémoire pour stocker le programme
à exécuter, et de nombreuses lignes d'entrée/sortie qui peuvent être utilisées pour agir conjointement avec
d'autres dispositifs, comme la lecture de l'état d'un capteur ou la commande d'un moteur.

Les langages C et d'assemblage sont utilisés pour programmer un microcontrôleur, mais le fichier HEX est
en langage machine qui est en fait téléchargé dans les microcontrôleurs.

La figure ci-dessous montre quelques-uns des microcontrôleurs les plus couramment utilisés.

L'architecture RISC est considérée comme l'architecture de microcontrôleurs la plus avancée à ce jour et
elle est livrée avec quelques composants standard, dont nous discuterons ici.

Un jeu d’instructions réduit ou RISC (Reduced instruction set computer) permet d’accélérer la vitesse
d’exécution des programmes. Les instructions pour commander le microcontrôleur sont alors peu
nombreuses (33 ou 35 instructions différentes) mais aussi plus simples et donc plus rapides à exécuter.
Chaque mot de la mémoire programme (de 12 ou 14 ou 16 bits) contient une
instruction et toutes les instructions (sauf les sauts) sont exécutées en un seul cycle machine.

1
Chapitre II : Microcontrôleurs

 Une architecture de type HARVARD : Il existe deux types classiques d’architecture interne de
microcontrôleur :

 Architecture de HARVARD qui est celle des PIC. Avec ce type d’architecture, les instructions et
les données transitent sur des bus bien différents. Il en résulte un gain de temps, puisque pour
exécuter une instruction on peut simultanément accéder à l’instruction et à la donnée associée à
cette instruction.
 Architecture VON NEUMANN qui possède un bus unique de données pour faire transiter les
instructions et les données

Voici un organigramme de l'architecture du microcontrôleur :

Donc les éléments qu’on peut trouver, généralement dans un microcontrôleur, sont cités ci-dessous :

Un processeur : sa capacité peut aller de 4 à 64 bits, selon le modèle choisis. Il effectue principalement
le traitement des informations et de données au rythme définie par la fréquence d’horloge interne.
Une mémoire volatile : dite RAM, est une mémoire à accès aléatoire en lecture et écriture. Elle permet
de stocker temporairement les données et variables utilisées au cours d’exécution.
Une mémoire morte : dite ROM c’est une mémoire, qui contient le programme de démarrage qui
permet de charger l’application depuis la mémoire flash. Il existe plusieurs types de ROM : EPROM,
EEPROM…
Un oscillateur interne : qui permet de cadencer le rythme d’exécutions des instructions du processeur.
Les entrées sorties : ce sont des périphériques d’entrées-sorties, qui offrent la possibilité au processeur de
communiquer avec d’autre périphériques externes.
Un watchdog ou chien de garde : qui va s’assurer que le système ne reste pas bloquer à une étape
particulière
Autres modules : dont l’ADC, DAC, Timers, Contrôleurs IRQ…

2
Chapitre II : Microcontrôleurs

II.1.1 Microcontrôleur 8051


Le microcontrôleur 8051 est une famille de microcontrôleurs 8 bits développée par Intel en 1981. C'est
l'une des familles de microcontrôleurs les plus populaires utilisées dans le monde entier. Ce
microcontrôleur a d'ailleurs été qualifié de "système sur puce" puisqu'il possède 128 octets de RAM, 4 Ko
de ROM, 2 Timers, 1 port série et 4 ports sur une seule puce. Le processeur peut également fonctionner
pour 8 bits de données à la fois puisque le 8051 est un processeur 8 bits. Si les données sont supérieures à
8 bits, elles doivent être divisées en plusieurs parties afin que le processeur puisse les traiter facilement.
La plupart des fabricants contiennent mis 4 Ko de ROM même si le nombre de ROM peut être dépassé
jusqu'à 64 Ko.
Le 8051 a été utilisé dans un grand nombre d'appareils, principalement parce qu'il est facile à intégrer dans
un projet ou à fabriquer approximativement un appareil. Voici les principaux domaines d'intérêt :
 Des systèmes de mesure efficaces facilitent le contrôle de la consommation d'énergie dans les
maisons et les applications de fabrication.
 Il est largement utilisés dans les véhicules hybrides pour gérer les variantes de moteur. De plus,
des fonctions telles que le régulateur de vitesse et le système anti-freinage ont été préparées plus
performantes grâce à l'utilisation de microcontrôleurs.
 les dispositifs médicaux mobiles tels que les tensiomètres et les moniteurs de glycémie utilisent des
microcontrôleurs pour afficher les données, offrant ainsi une plus grande fiabilité dans la
fourniture de résultats médicaux.
La famille MCS-51 est une série de produits appréciée

Microcontrôleur 8051 Famille MCs-51

Logiciel de simulation edsim51

3
Chapitre II : Microcontrôleurs

II.1.2 Microcontrôleur PIC

Le contrôleur d'interface périphérique (PIC) est un microcontrôleur développé par Microchip, le


microcontrôleur PIC est un programme rapide et simple à mettre en œuvre par rapport à d'autres
microcontrôleurs comme le 8051. La facilité de programmation et la simplicité d'interfaçage avec d'autres
périphériques PIC deviennent un microcontrôleur réussi.

Nous savons que le microcontrôleur est une puce intégrée composée de RAM, ROM, CPU, TIMER et
COUNTERS. Le PIC est un microcontrôleur qui se compose également de RAM, ROM, CPU, minuterie,
compteur, ADC (convertisseurs analogique-numérique), DAC (convertisseur numérique-analogique). Le
microcontrôleur PIC prend également en charge les protocoles tels que CAN, SPI, UART pour une interface
avec des périphériques supplémentaires. PIC principalement utilisé pour modifier l'architecture Harvard
et prend également en charge RISC (Reduced Instruction Set Computer) par l'exigence ci-dessus RISC et
Harvard, nous pouvons simplement que PIC est plus rapide que les contrôleurs basés sur 8051 qui sont
préparés sur l'architecture Von-Newman.

La famille des PICs est subdivisée en 3 grandes familles :

 La famille BaseLine, qui utilise des mots d’instructions de 12 bits,


 La famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876),
 La famille High-End, qui utilise des mots de 16 bits (18FXXX).

Pour identifier un PIC, on utilise simplement son numéro :

 Les 2 premiers chiffres indiquent la catégorie du PIC, 16 indique un PIC MidRange.


 Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner avec une plage de
tension beaucoup plus tolérante.
 Vient en suite une ou deux lettres pour indiquer le type de mémoire programme :
- C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM
- CR pour indiquer une mémoire de type ROM
- F pour indiquer une mémoire de type FLASH.
 On trouve ensuite un nombre qui constitue la référence du PIC
 On trouve ensuite un tiret suivi de deux chiffres indiquant la fréquence d’horloge maximale que le
PIC peut recevoir.

II.1.2.1 PIC 16F84

Le PIC 16F84 est un microcontrôleur 8 bits. Il dispose donc d'un bus de données de huit bits. Puisqu’il
traite des données de huit bits, il dispose d’une mémoire de donnée dans laquelle chaque emplacement
(défini par une adresse) possède huit cases pouvant contenir chacune un bit. L’organisation générale du

PIC 16F84 est composée par 4 blocs principaux comme la montre la figure suivante :
 Mémoire de programme
 Mémoire de données
 Processeur
 Ressources auxiliaires (périphériques)

4
Chapitre II : Microcontrôleurs

Principe de fonctionnement du PIC

Un microcontrôleur exécute des instructions. On définit «le cycle instruction » comme le temps nécessaire
à l’exécution d’une instruction. Attention de ne pas confondre cette notion avec le cycle d’horloge qui
correspond au temps nécessaire à l’exécution d’une opération élémentaire (soit un coup d'horloge).
Une instruction est exécutée en deux phases : la phase de recherche du code binaire de l’instruction stocké
dans la mémoire de programme la phase d’exécution ou le code de l’instruction est interprété par le
processeur et exécuté. En effet, comme les instructions issues de la mémoire de programme circulent
sur un bus différent de celui sur lequel circulent les données, ainsi le processeur peut
effectuer la phase de recherche d’une instruction pendant qu’il exécute l’instruction
précédente comme montre la figure ci-dessous.

Chaine de compilation

IL existe plusieurs compilateurs à savoir MicroC et MicroPascal utilisés pour la compilation des
programmes. Il existe ainsi des IDEs comme le Mplab qui peut utiliser pour programmer les PICs.

5
Chapitre II : Microcontrôleurs

Le compilateur génère aussi un fichier listing (en assembleur), représentant le code et les emplacements mémoire qui
seront utilisés

6
Chapitre II : Microcontrôleurs

II.1.3 Microcontrôleur AVR

Le microcontrôleur AVR a été développé en 1996 par Atmel Corporation. La conception structurelle de
l'AVR a été développée par Alf-Egil Bogen et Vegard Wollan. AVR tire son nom de ses développeurs et
signifie microcontrôleur Alf-Egil Bogen Vegard Wollan RISC, également connu sous le nom de Advanced
Virtual RISC. L'AT90S8515 était le premier microcontrôleur basé sur l'architecture AVR, bien que le
premier microcontrôleur à arriver sur le marché commercial ait été l'AT90S1200 en 1997.

Les microcontrôleurs AVR sont disponibles en trois catégories

TinyAVR : Moins de mémoire, petite taille, approprié uniquement pour des applications plus simples

MegaAVR : Ce sont les plus populaires ayant une bonne quantité de mémoire (jusqu'à 256 Ko), un plus
grand nombre de périphériques intégrés et appropriés pour les applications modestes à complexes.

XmegaAVR : Utilisé dans le commerce pour des applications complexes, qui nécessitent une mémoire de
programme importante et une vitesse élevée.

II.1.4 Processeur ARM

Un processeur ARM fait également partie d'une famille de processeurs basés sur l'architecture RISC
(ordinateur à jeu d'instructions réduit) développée par Advanced RISC Machines (ARM). Un ARM
fabrique des processeurs multicœurs RISC 32 bits et 64 bits. Les processeurs RISC sont conçus pour
exécuter un plus petit nombre de types d'instructions informatiques afin qu'ils puissent fonctionner à une
vitesse plus élevée, exécutant des millions d'instructions supplémentaires par seconde (MIPS). En
supprimant les instructions inutiles et en optimisant les voies, les processeurs RISC offrent des
performances exceptionnelles à une partie de la demande de puissance de la procédure CISC (complex
instruction set computing).

Les processeurs ARM sont largement utilisés dans les appareils électroniques des clients tels que les
téléphones intelligents, les tablettes, les lecteurs multimédias et autres appareils mobiles, tels que les
appareils portables. En raison de leur jeu d'instructions réduit, ils ont besoin de moins de transistors, ce
qui permet une taille de matrice plus petite du circuit intégré (CI). Les processeurs ARM, une taille réduite,
une difficulté réduite et une consommation d'énergie réduite les rendent adaptés à des appareils de plus
en plus miniaturisés.

7
Chapitre II : Microcontrôleurs

II.1.4.1 Architecture ARM

Le processeur d'architecture ARM est une machine avancée de calcul à jeu d'instructions réduit [RISC] et
c'est un microcontrôleur à jeu d'instructions réduit (RISC) 32 bits. Il a été introduit par l'organisation
informatique Acron en 1987. Cet ARM est une famille de microcontrôleurs développés par des fabricants
comme ST Microelectronics, Motorola, etc. L'architecture ARM est livrée avec des versions totalement
différentes comme ARMv1, ARMv2, etc., et chacune a ses propres avantages et inconvénients.

Le cortex ARM est un microcontrôleur complexe de la famille ARM qui a une conception ARMv7. Il existe
3 sous-familles au sein de la famille des cortex ARM :

 Série ARM Cortex Ax(Application): Cette gamme est principalement destinée aux
applications qui nécessitent d’effectuer des calculs complexes.
 Série ARM-Cortex Rx(Real-time) : Cette gamme est destinée aux systèmes temps réel, ses
processeurs sont caractérisés par leurs hautes performances.
 Série ARM-Cortex Mx(eMbedded) : Les processeurs de cette gamme sont développés pour
des microcontrôleurs avec une consommation d’énergie et un cout réduit.

Il y’a différent modèles dans la gamme cortex-M, on distingue :

 Le cortex-MO/MO+/M1 : Ils permettent de traiter des données générales et des taches d’entrée-
sortie standards.
 Le cortex-M3 : Il permet de traiter des données avancées, et s’occupe de la manipulation des
champs de bits.
 Le cortex-M4 : C’est un M3 mais avec une extension d’un module DSP (Digital Signal Processor),
pour faire du traitement de signal.
 Le cortex-M4F : C’est un M4 avec une FPU (Floatting Point Unit/ Unité à virgule
flottante) en plus.
 Le Cortex-M7 : C’est le plus récent, son niveau de performance est supérieur

8
Chapitre II : Microcontrôleurs

II.1.4.2 STM32

STMicroelectronics est une société de développement et de réalisation de solutions destinées à un grand


nombre d’applications microélectroniques. Elle fournit une vaste gamme de cartes électroniques, comme
la famille microprocesseurs STM32FXXXX. Parmi ces cartes, nous citons la STM32F446RE NUCLEO qui
représente l’élément clé de notre projet.

La carte STM32F446RE NUCLEO est développée autour du microcontrôleur ARM Cortex-M4F 32Bits,
qui a une architecture RISC. Elle s’appuie sur les deux écosystèmes Mbed et Arduino ce qu’il lui permet
une compatibilité avec les Shields Arduino. Elle utilise également un pipeline 3 étages (chargement,
décodage, exécution), ce qui permet l’exécution de plusieurs instructions en un cycle CPU.
Le kit de découverte STM32F4 est fournis avec une bibliothèque logicielle complète (firmware) qui est
STM32Cube, la plateforme matérielle du kit permet ainsi d’accéder aux fonctionnalités du
microcontrôleur, et de développer de nombreuses applications facilement, en exploitant ses capacités.
Les caractéristiques de la carte STM32F446RE NUCLEO sont les suivantes :

 Un microcontrôleur STM32F446RE avec un processeur ARM Cortex-M4F 32 bits fonctionnant à une


fréquence de 180 MHZ , Doté d’une FPU qui permet d’effectuer des calculs en virgule flottante, en
quelques cycles.
 Un DSP : Il permet de faire du traitement de signal car il comporte un ensemble de
fonctions particulières qui lui permettent d’augmenter ses performances dans ce domaine.
 NVIC : Unité de contrôle d’interruption qui peut gérer 240 sources d’interruption
 WIC : Cette unité permet de détecter les interruptions et aussi de réveiller le processeur.
 Debug and trace : Il contient des unités pour le débogage et le traçage de données (ETM, DAP...)
 MPU : Unité de protection de la mémoire, elle permet de contrôler l’accès mémoire.
 SRAM.
 Bus Matrix de 32bits : La société ARM propose le bus AMBA qui repose sur la norme multi-bus multi-
maitres, il est composé de 2 bus : AHB et APB
 Une mémoire flash de 512 Ko, une SRAM de 128 Ko et une SRAM de sauvegarde de 4 K0, trois ADC
de 12 bits avec une fréquence de 2.4 MSPS, deux DAC de 12 bits, SPI, deux UARTs, quatre USARTs,
quatre interfaces I2C de 11,25 Mbits/s, quatre interfaces SPI de 45Mbits/s, DMA à usage général,
RTC,17 TIMERS : 1 SysTick timer, 2 watchdog de timers, 12 timers de 16bits et 2 timers de 32bits
chacun avec une fréquence de 180MHZ.

9
Chapitre II : Microcontrôleurs

 Un ST-LINK/V2 intégré.
 Alimentation de la carte : Par bus USB et par alimentation externe : 3 V ou 5 V
 Interface USB OTG avec connecteur micro-AB.
 Oscillateur à Cristal de 4 à 26 MHZ.
 Oscillateur 32 kHz pour RTC avec étalonnage
 Deux types d’extension : En-têtes de broches d’extension pour les E/S (appelé ST
Morpho headers) pour une connexion rapide à la carte, Connecteurs ARDUINO UNO V3

Logiciel de développement :

Le développement d’applications basées sur la carte STM32-Nucleo ne peut s’effectuer


sans passer par les deux étapes de configuration et de programmation. Pour la phase de
configuration, le software STM32CubeMx est mis à notre disposition afin de générer des
fichiers de configuration en langage de programmation C. Cependant, pour la phase de
programmation des taches à exécuter par le microcontrôleur, plusieurs softwares sont
disponibles dans le marché comme SW4STM32, True Studio, MDK-ARM, EWARM

II.1.5 Différence entre 8051, PIC, AVR et ARM

10
Chapitre II : Microcontrôleurs

II.2 Microcontrôleur de la famille AVR¶

II.2.1 Définitions et architectures

II.3.2 Microcontrôleurs Atmega328p¶

1) Caractéristiques générales
 Nombre de broches : 28 (sur le modèle utilisé en TP)
 Mémoire Flash : 32 ko (programmable par interface série)
 Mémoire Données EEPROM : 1 ko
 Mémoire RAM : 2 ko
 32 registres de travail d'accès rapide pour l'ALU
 Ports parallèles : 3, avec 23 broches E/S
 Fréquence d'horloge : 16 Mhz (maxi tolérée = 20 Mhz)
o donc : 16 cycles d'horloge par micro-seconde
 Périphériques internes
o 6 convertisseur Analogique/Numérique 10 bits, comparateur analogique
o 1 timer 16 bits (T1), 2 timers 8 bits(T0,T2)
o 6 canaux PWM, 1 chien de garde (watchdog)
o SPI, USART, TWI (=I2C)
 26 interruptions
 5 modes d'économie d'énergie

11
Chapitre II : Microcontrôleurs

2) Brochage de l'ATmega 328p¶

 VCC (1), GND (2)


 E/S (=GPIO) : PORTB (8), PORTC (7), PORTD(8)
 AVCC (1) : alimentation CAN
 AREF (1) : entrée comparateur analogique

3) Architecture interne générale de l'ATmega 328¶

12
Chapitre II : Microcontrôleurs

4) Architecture interne de l'unité centrale de l'ATmega 328¶

a) Une architecture performante¶:

 Architecture Harvard : 3 accès mémoires indépendants


o Mémoire Programme (Flash)
 liée directement à l'ALU et au bloc de 32 registres de travail internes
 propre bus de données
o Autres mémoires + autres ressources
 partagent un même bus de données
 Le processeur dispose d'un pipeline à 1 niveau
o l'instruction N s'exécute,
o pendant que l'instruction N+1 est récupérée en mémoire
 Donc : exécution d'1 instruction en 1 cycle d'horloge
o lecture de 2 opérandes dans les registres de travail
o exécution du calcul
o stockage du résultat dans les registres de travail

13
Chapitre II : Microcontrôleurs

b) Organisation de la mémoire¶

Quelques registres essentiels de l'ATmega328¶

Les registres de travail¶

 32 registres 8 bits, R0 à R31


 certains sont utilisables en 16 bits (pour les adressages indirects)
 placés en début de la RAM de donnée

Le registre d'état SREG¶

Constitués de 8 bits, ayant chacun un rôle propre :

 I : autorisation globale des interruptions


 T : bit source ou destinataire pour les instructions de copie de bit seul
 H : demi-retenue (Half-carry) - c.-à-d. du premier quartet - sur opérations arithmétiques
 S : bit de signe
 V : bit de débordement (over flow)
 N : bit de résultat négatif

14
Chapitre II : Microcontrôleurs

 Z : bit de zéro, positionné à 1 lorsque le résultat de certaines opérations est nul


 C : bit de retenue (Carry)

La pile et son registre « pointeur de pile »¶

 La pile est une portion de la SRAM, localisée par un registre de pointeur de pile
 Elle est manipulable via les instructions PUSH et POP
 Elle sert en particulier à sauvegarder le compteur ordinal PC (Program Counter), qui désigne
l'adresse de l'instruction à exécuter
o lors d'un appel de sous-programme
o ou lors d'une interruption
 Sa position en mémoire est définie par le registre « pointeur de pile » :

C) Interruptions de l'ATmega328¶

Définition : Une interruption est un déroutage automatique et « quasi-instantané » du programme en


cours d'exécution, en réponse à un signal émis par un périphérique interne ou par une entrée externe
(appelés sources d’interruption), vers un sous-programme permettant de gérer l’évènement.

 Le mécanisme d’interruption s’oppose à la « scrutation », où le μP interroge régulièrement l’état de


la source, par logiciel
o dans la scrutation, le processeur obéit à des instructions du programme pour vérifier l'état des
sources
o alors que l'interruption est déclenchée automatiquement sur demande d'une source
d'interruption, indépendamment du programme en cours d'exécution
 Exemple du reset

Autorisations, priorités et mécanisme de demande d'interruption¶

 Les interruptions sont désactivables


o globalement
o ou individuellement, par source d'interruption
 La prise en compte de l’interruption peut être retardée si son niveau de priorité est insuffisant
o les niveaux de priorités sont fixes, et fonctions de la source d'interruption
o exemple : reset = interruption de plus forte priorité
 Les sources d'interruptions (périphériques internes, entrées externes) font leur demande
d'interruption en positionnant à 1 un bit dédié (interrupt flag), stocké dans l'un de leurs registres
o ainsi, une demande d'interruption non traitée faute de priorité suffisante ou faute d'autorisation,
n'est pas oubliée pour autant : le drapeau reste levé
 Sur l'ATmega328, il faut de 4 à 6 cycles d'horloge avant que le microcontrôleur exécute la routine
d'interruption

15
Chapitre II : Microcontrôleurs

Déroulement des interruptions¶


 Sur une interruption, voici ce qui se produit

1. l'instruction en cours s'achève


2. le masque d'interruption I est automatiquement mis à 1 pour empêcher d'autres interruptions
3. le compteur ordinal PC est sauvegardé sur la pile (au contraire de SREG)
4. PC est ensuite chargé avec le vecteur d'interruption (qui effectue normalement un saut vers le
sous-programme d'interruption)
 En fin d'exécution de la routine d'interruption, c'est l'inverse
1. PC est chargé avec le dessus de la pile
2. I est remis à 0
3. le programme reprend alors là où il avait été interrompu

Liste des interruptions de l'ATmega328¶

 26 sources d'interruptions
 leurs vecteurs sont constitués de 2 mots d'instructions
 ils sont ordonnés par priorité décroissante
o vecteur 0 = *reset : le plus prioritaire

D) Ports parallèles d'E/S¶


 L'Arduino UNO dispose de 23 broches d'E/S, organisées en 3 ports parallèles numériques

o ce sont les ports B, C et D


o port B : broches numériques 8 à 13
o port C : broches analogiques (0 à 5)
o port D : broches numériques 0 à 7
 Ils sont tous bidirectionnels

16
Chapitre II : Microcontrôleurs

 le port C peut aussi être utilisé comme « port d'entrée analogique » (CAN)
 Leurs lignes peuvent être configurées/utilisées individuellement

Registres de contrôle des ports¶

 Chaque port x (pour B, C ou D) est contrôlé par 3 registres


o DDRx : le registre de direction (sens de transfert) du port
o PORTx : le registre de donnée du port
o PINx : le registre d'entrée du port
 Chacun de leur bit contrôle une ligne particulière du port
o exemple : le port B regroupe les broches numériques 8 à 13
o le bit 0 de ses registres est donc associé à la broche numérique 8

Fonction des registres¶

 Seuls PORTx et DDRx se comportent vraiment comme des variables mémoires


o un composant mémoire leur ait associé, qui joue le rôle de verrou (=latch)
o les écritures dans ces registres sont donc persistentes
 PINx n'est pas un composant mémoire
o il est directement connecté aux lignes du port x, et traduit donc leur tension
 DDRx : détermine la direction de chaque broche du port x
o 0 pour une Entrée, 1 pour une Sortie (« 0/1 » pour « E/S »)
 PORTx
o pour les broches en sortie : 0 pour tension basse, 1 pour tension haute
o pour les broches en entrée : 1 pour activer la résistance « pull-up », 0 sinon
 PINx
o indique la tension des broches : 0 pour tension basse, 1 pour tension haute

17
Chapitre II : Microcontrôleurs

II.2.2 Carte Arduino

Il existe de nombreux modèles de cartes Arduino, la plus populaire étant probablement la Uno. Le
document ci-dessous vous donne un aperçu de l'organisation de la carte (dimensions : 65 x 52 mm) dans
sa version Uno.

II.2.2.1 Le microcontrôleur▲

Le cœur de la carte Arduino Uno est un microcontrôleur de la famille AVR, un Atmel Atmega 328P. Ce
microcontrôleur renferme dans un seul composant :

 un processeur 8 bits à architecture RISC ;


 de la mémoire avec des espaces physiques séparés :
o mémoire Flash (32 Ko) pour les programmes,
o mémoire vive SRAM (2 Ko) pour les données,
o mémoire EEPROM (2 Ko) pour les données de sauvegarde ;
 toute la logique d'horloge (16 MHz) ;
 des circuits d'interface et des périphériques d'entrée-sortie permettant au processeur d'accéder au
monde extérieur :
o des Timers/Counters (T/C) 8 et 16 bits,
o génération des signaux PWM,
o des interfaces de communication série (UART, SPI, TWI compatible I2C…),
o un convertisseur Analogique-Numérique (A/D Conv.),
o etc.

18
Chapitre II : Microcontrôleurs

Schéma bloc de description du microcontrôleur AVR

Un processeur à 16 MHz et 32 Ko de mémoire Flash pour stocker vos programmes, ces chiffres peuvent
prêter à sourire en comparaison des GHz et des Go de votre ordinateur personnel. Mais avec son format
carte de crédit et une consommation inférieure au Watt, la carte Arduino satisfera pourtant vos premières
exigences en termes d'embarqué.

II.2.2.2 Alimentation

Elle a lieu sous une tension de 5 Volts. Elle peut provenir soit de la prise USB lorsque la carte est reliée à
l'ordinateur, soit d'un bloc secteur externe (tension entre 7 et 12 Volts, 1 Ampère) via la prise jack standard.
Comme la carte consomme très peu (0,5 W), elle peut également être alimentée par une simple pile 9 V.

Les régulateurs montés sur la carte permettent de fournir des tensions stabilisées à 3,3 ou 5 Volts pour
alimenter des périphériques (capteurs, shields…).

19
Chapitre II : Microcontrôleurs

II.2.2.3 Les entrées/sorties

Ce sont les deux rangées de connecteurs de part et d'autre de la carte qui permettent sa connexion au
monde extérieur.

Les entrées/sorties numériques D0 à D13

Entrées/sorties numériques D0 à D13

Chacun des connecteurs D0 à D13 peut être configuré dynamiquement par programmation en entrée ou
en sortie. Les signaux véhiculés par ces connecteurs sont des signaux logiques compatibles TTL, c'est-à-
dire qu'ils ne peuvent prendre que deux états HAUT (5 Volts) ou BAS (0 Volt). En pratique, les connecteurs
D0 et D1 réservés pour la liaison série asynchrone (port COM virtuel via le câble USB) ne sont pas exploités
pour d'autres utilisations. À noter que chacun des connecteurs ne peut fournir ou absorber un courant
supérieur à 40 mA environ (200 mA pour l'ensemble des connecteurs).

Certains connecteurs peuvent être spécialisés comme sorties PWM (repérées par un ~) mais nous sortons
ici du cadre de ce tutoriel.

Les entrées analogiques A0 à A5

Entrées analogiques A0 à A5

Par défaut et contrairement aux entrées/sorties numériques qui ne peuvent prendre que deux états HAUT
et BAS, ces six entrées peuvent admettre toute tension analogique comprise entre 0 et 5 Volts. Pour pouvoir
être traitées par le microcontrôleur, ces entrées analogiques sont prises en charge par un CAN
(Convertisseur Analogique Numérique ou ADC pour Analog Digital Converter) dont le rôle est de convertir
l'échantillon de tension VE en une grandeur numérique binaire sur n bits.

Convertisseur Analogique Numérique

Le principe de la conversion Analogique-Numérique est représenté ci-dessous (avec n=3 bits et la tension
de référence Vref=5 Volts) :

20
Chapitre II : Microcontrôleurs

CAN 3 bits - Auteur : Philippe Avi

Le convertisseur de la carte Arduino Uno possède une résolution de 10 bits, soit 2 10 = 1024 possibilités de
0 à 1023. Ainsi, pour n=10 bits et la tension de référence par défaut Vref=5 Volts, si la tension analogique
d'entrée échantillonnée est VE=3,8 Volts , la grandeur numérique N (ici en entier décimal) en sortie du
convertisseur peut être calculée grâce aux relations :

quantum q = Vref/2n = 5 / 210 = 5 / 1024

N = VE / q = 3,8 x 1024 / 5 soit N = 778

Il y aurait encore bien des choses à dire pour avoir une description plus complète de la carte et nous
sommes resté sur l'essentiel.

21
Chapitre II : Microcontrôleurs

II.2.2.4 Environnement de développement

a) Installation

Pour l'installation (Windows, Mac OS X et Linux), on fait références aux indications pas à pas du site
officiel d’arduino.

b) Premier pas dans l'IDE

Voici à quoi ressemble l'IDE (Windows), ici avec le programme de démonstration Blink :

Ce premier programme se contentera de faire clignoter la LED jaune témoin qui se trouve près du
connecteur D13 de la carte Arduino Uno. Avant de télécharger le programme dans la carte, il faut relier
l'ordinateur et la carte via le câble USB :

22
Chapitre II : Microcontrôleurs

Une fois le port activé et reconnu sur l'ordinateur, il faut éventuellement désigner le bon dans l'interface :

Finalement, le processus de rédaction du programme jusqu'à son téléchargement dans la carte peut être
résumé grâce au schéma suivant :

IV-C. Le langage de programmation▲

Sous Windows par exemple, lorsque on lance la compilation dans l'IDE, ce sont les outils de la
suite WinAVR avec son compilateur GCC qui prennent le relais.

En fait, on programme dans un langage propre à Arduino dont la structure s'apparente aux langages
C/C++. Mais lorsque on évoque une fonction Arduino, non standard C/C++, et pourtant reconnue et
coloriée comme un mot-clé dans l'éditeur, vous faites appel en toute transparence à une ou plusieurs
bibliothèques rédigées en C ou C++ qui seront incluses à la compilation.

23
Chapitre II : Microcontrôleurs

En enveloppant le langage C/C++ de cette manière, les concepteurs de l'IDE ont pu simplifier sa syntaxe
et l'adapter aux possibilités de la carte. De nombreuses fonctionnalités de haut niveau sont ainsi proposées
à l'utilisateur novice qui n'a plus à se soucier de la logique interne du microcontrôleur.

Dans les coulisses de l'IDE Arduino, un compilateur AVR GCC.

Revenons au programme de démonstration Blink :

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.

This example code is in the public domain.


*/

// Pin 13 has an LED connected on most Arduino boards.


// give it a name:
int led = 13;

// the setup routine runs once when you press reset:


void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:


void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

La structure d'un programme Arduino, rédigé dans l'éditeur, ressemble à ceci et doit toujours comporter
les fonctions setup() et loop() :

24
Chapitre II : Microcontrôleurs

// Définition des constantes, variables globales


// directives de compilation define, include, etc.

void setup() {
// initialisation des ressources de la carte,
// configuration des entrées/sorties,
// définition de la vitesse de fonctionnement du port série, etc.
// setup() n'est exécuté qu'une seule fois.
}

void loop() {
// les instructions contenues ici sont exécutées indéfiniment en boucle
// Seule une coupure de l'alimentation de la carte ou un appui sur le bouton Reset
// permet de quitter le programme.
}

Nous n'allons pas ici décrire toutes les instructions du langage Arduino, vous trouverez les références et la
syntaxe sur le site officiel :

Language Reference

Nous insistons tout de même sur les fonctions implantées pour la gestion des entrées/sorties de la carte :

Fonction Description (partielle)

pinMode() Configuration des broches numériques en entrée ou en sortie.

Pour une broche numérique configurée en sortie, cette instruction permet de mettre
digitalWrite()
son niveau logique à HAUT ou BAS.

Lecture du niveau logique (HAUT ou BAS) d'une broche numérique configurée en


digitalRead()
entrée.

La carte ne possède pas de Convertisseur Numérique Analogique. Il n'est donc


théoriquement pas possible d'obtenir une tension continue qui soit l'image d'une
valeur numérique (pas de sortie analogique). Il est par contre possible d'en reproduire
analogWrite() le comportement en générant un signal rectangulaire (PWM ou MLI) de rapport
cyclique réglable. Beaucoup de composants (LED, moteur électrique à courant
continu) agissent comme des filtres passe-bas et fonctionnent comme s'ils étaient
alimentés sous une tension continue égale à la valeur moyenne du signal.

Lecture de la valeur de la tension présente sur une entrée analogique (A0 à A5 sur la
analogRead() Uno). La fonction retourne la valeur issue de la Conversion Analogique Numérique,
soit une valeur comprise entre 0 et 1023 (convertisseur 10 bits).

Ainsi, dans la boucle infinie loop() :

void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

25
Chapitre II : Microcontrôleurs

La broche n° 13, reliée à la LED intégrée à la carte, passe alternativement du niveau logique HAUT (HIGH)
au niveau logique BAS (LOW) après un délai d'une seconde, ce qui la fait clignoter.

Comme on le voit à travers cet exemple, les concepteurs du langage ont prévu d'interfacer facilement vos
programmes avec le monde extérieur.

II.2.2.5 Les cartes d'interface ou Shield▲

Une carte Arduino seule, même si on dispose de quelques LED, résistances, boutons poussoir, etc. n'est
pas d'une grande utilité et reste dans ce cas limitée à des fins d'apprentissage. Si on veut aller plus loin et
piloter les moteurs de votre robot, on doit passer par une interface dédiée (des composants sur une carte
électronique).

Une fois de plus, sous la poussée de la communauté Arduino, de nombreux fabricants proposent une
pléthore de cartes d'interface capables de couvrir la majorité des besoins (capteurs, relais de puissance,
commande de moteurs, Internet, affichage sur matrice LED ou écran LCD, communication Wifi…).

Qu'est-ce qu'un shield ?

Un shield est une carte d'interface spécialement dédiée à l'Arduino. Ces cartes ont des dimensions
sensiblement voisines de la carte Arduino et peuvent s'enficher directement sur les connecteurs de celle-
ci.

Il est bien sûr impossible de recenser entièrement ici les centaines de shields existant sur le marché (dont
quelques-uns référencés sur le site officiel). On trouvere une liste de fabricants et/ou distributeurs
de shields pour Arduino dans la sitographie en fin de tutoriel.

a) Pour le prototypage

Sparkfun ProtoShield

Une fois enfichée sur la carte Arduino, ce shield reprend tels quels les connecteurs de part et d'autre de la
carte. On peut alors coller une plaque de câblage rapide (breadboard en anglais) dans la partie centrale
(en plastique vert moulé sur la photo). Cette plaque permet de câbler de nombreux composants sans faire
de soudure et garder le montage entièrement démontable.

Le montage sur plaque d'essai ci-dessous, dessiné avec le logiciel gratuit Fritzing, montre une LED
branchée sur la broche D10 de l'Arduino avec sa résistance en série.

26
Chapitre II : Microcontrôleurs

Montage électronique sur plaque de câblage rapide

Il ne reste plus qu'à reprendre le programme de démonstration Blink au niveau de la ligne :

int led=10;

et le tour est joué pour faire clignoter la LED rouge.

b) LCD shield : Afficheur LCD

Le LCD Keypad shield de DFRobot à l'oeuvre avec un télémètre à ultrasons

Parce que on ne pourra pas toujours faire des affichages à coup de Serial.print sur l’écran de votre PC dans
vos applications censées être embarquées, un affichage sur un petit écran LCD de 2-3 lignes de 16 ou 20
caractères enfiché sur votre Arduino peut s’avérer bien utile. Ce genre de composants nécessitent de
recourir à un contrôleur spécifique et de jouer du fer à souder… sauf si vous disposez d’un shield LCD.
Le LCD Keypad Shield de DFRobot par exemple (monochrome, 2 lignes de 16 caractères, affichage en
négatif avec rétroéclairage) fonctionne avec un contrôleur classique compatible Hitachi (broches rs, w,
enable et quatre broches supplémentaires en mode 4 bits). On n’aura alors aucun mal à piloter
votre shield avec la bibliothèque LiquidCrystal proposée en standard dans l’environnement Arduino.

27
Chapitre II : Microcontrôleurs

Code c++ :

1 #include <LiquidCrystal.h>
2
3 LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
4
void setup()
5 {
6 lcd.begin(16,2);
7 lcd.print("Hello, world!");
8 }
9
10 void loop() {}
11

Ce shield dispose en plus de boutons poussoirs qui nous permettront, par exemple, de faire de la navigation
et de la sélection dans des systèmes de menus. Et si on trouve que le nombre de broches monopolisées est
trop important pour notre application, on tourne vers un équivalent, mais muni cette fois d’un contrôleur
I2C ou SPI.

28

Vous aimerez peut-être aussi