Cours Final
Cours Final
MICROPROCESSEURS
&
MICROCONTROLEURS
Sanae Dahbi
Avant-propos
Ce cours est dédié aux étudiants de L’ESTO inscrits en première année Licence d’éducation
(Spécialité Enseignement Secondaire- Sciences industrielles). Il est enseigné en tant que cours
intégré en semestre 2 pour une charge horaire totale de 48 heures soit une séance d’une 3h par
semaine. Il porte sur des notions de bases sur les microprocesseurs, ainsi que sur des notions
avancées de l’étude & de la programmation des microcontrôleurs et des microcontrôleurs
Arduino où nous avons attribué une attention particulière au PIC16F877 et Arduino UNO.
1
Table des matières
Chapitre I : Représentation Binaire .........................................................................................................4
1. Présentation du binaire .................................................................................................................5
1.1 Le bit ..........................................................................................................................................5
1.2 L’octet .......................................................................................................................................6
1.3 Unités standards ........................................................................................................................7
2. Représentation des nombres naturels en binaire .........................................................................7
2.1 Numérations en base dix, base deux, base seize .......................................................................7
2.2 Conversion d’une base à autre ...................................................................................................9
2.3 Les opérations en binaire ...................................................................................................... 11
2.4 Représentation d'un nombre dans un ordinateur .................................................................. 12
3. Représentation des entiers relatifs et des nombres à virgule ...................................................... 14
3.1 Nombre entier relatif ............................................................................................................. 14
3.2 Nombre à virgule .................................................................................................................... 15
4. Représentation des textes ............................................................................................................. 16
2
1.2 Architecture interne d’un microcontrôleur.....................................................................30
1.3 Familles d’un microcontrôleur .......................................................................................31
2. Les microcontrôleurs de type PIC ......................................................................................32
2.1 Définition de PIC ..........................................................................................................32
2.2 Différentes familles de PIC ............................................................................................32
3. Le microcontrôleur PIC16f877 ...........................................................................................33
3.1 Caractéristiques du PIC16F877 .......................................................................................33
3.2 Alimentation du PIC16F877 ...........................................................................................34
3.3 Cadencement de PIC16F877 ..........................................................................................34
3.4 Circuit Reset MCLR ........................................................................................................35
3.5 Chien de garde..............................................................................................................35
3.6 Ports E/S ......................................................................................................................36
3.7 Les Timers ...................................................................................................................40
3.8 Le module capture comparaison CCP1/CCP2 ..................................................................43
3.9 Convertisseur analogique numérique CAN ......................................................................44
3.10 Interruption ................................................................................................................46
Chapitre IV : Arduino ...................................................................................................................48
1. Système Arduino..............................................................................................................49
1.1 Définition d’un système Arduino .......................................................................................... 49
1.2 Les différentes cartes Arduino .............................................................................................. 49
2. Carte Arduino UNO ................................................................................................................. 51
2.1 Constituants de la carte ........................................................................................................ 51
2.2 Le logiciel Arduino ................................................................................................................. 55
3
CHAPITRE I
Représentation Binaire
4
Introduction
Un ordinateur est composé de différentes parties, dont des entrées (input) : un clavier, un port
USB, un lecteur CD... Et de sortie : carte graphique (CGU en anglais), un graveur, un port
USB, imprimante, … Il contient aussi d'autres composants tout aussi importants (si ce n'est
plus) tels que la mémoire et le processeur (CPU en anglais). La communication entre ces
différents composants se fait par l’envoi d’une information. Une information est une
connaissance qui fait sens pour les personnes concernées et qui peut être représentée par des
symboles. Bien sûr, la notion de sens n’est pas pertinente pour un ordinateur, qui n’est qu’une
machine, et c’est uniquement la représentation de l’information “donnée” sur laquelle il va
agir. Ainsi un traitement d’informations par un ordinateur consiste-t-il en des transformations
de leurs représentations. Ces transformations peuvent être des calculs, des réagencements, des
ajouts, des suppressions, des copies et toute autre opération consistant en des manipulations
de symboles. Cependant, quel que soit leur type, ces contenus sont manipulés par la machine
au travers d’une représentation n’utilisant que des 0 et des 1, qui est dite « binaire ». Nous
présentons dans ce chapitre les principes de cette représentation pour les nombres et les textes.
1. Présentation du binaire
Vers la fin des années 30, Claude Shannon démontra qu'à l'aide de « contacteurs »
(interrupteurs) fermés pour « vrai » et ouverts pour « faux » il était possible d'effectuer des
opérations logiques en associant le nombre 1 pour « vrai » et 0 pour « faux ».
Ce codage de l'information est nommée base binaire. C'est avec ce codage que fonctionnent
les ordinateurs. Il consiste à utiliser deux états (représentés par le chiffre 0 et 1) pour coder les
informations.
1.1 Le bit
Le terme bit (b avec une minuscule dans les notations) signifie « binary digit », c'est-à-dire 0
ou 1 en numérotation binaire. Il s'agit de la plus petite unité d'information manipulable par
une machine numérique. Il est possible de représenter physiquement cette information binaire:
par un signal électrique, magnétique ou lumineux, qui, au-delà d'un certain seuil,
correspond à la valeur 1 ;
grâce à des bistables, c'est-à-dire des composants électroniques qui ont deux états
d'équilibre (l'un correspond à l'état 1, l'autre à 0).
- Avec 1 bit il est ainsi possible d'obtenir deux états : soit 1, soit 0.
- Grâce à 2 bits, il est possible d'obtenir quatre états différents (2*2) :
5
0 0
0 1
1 0
1 1
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
1.2 L’octet
L'octet est une unité d'information composée de 8 bits allant de 0 à 255. Il permet de stocker
un caractère, telle qu'une lettre, un chiffre ... Ce regroupement de nombres par série de 8
permet une lisibilité plus grande. Une unité d'information composée de 16 bits est
généralement appelée mot. Une unité d'information de 32 bits de longueur est appelée double
mot. Pour un octet, le plus petit nombre est 0 (représenté par huit zéros 00000000), et le plus
grand est 255 (représenté par huit chiffres « un » 11111111), ce qui représente 256
possibilités de valeurs différentes.
6
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
Longtemps l'informatique s'est singularisée par l'utilisation de différentes valeurs pour les
unités du système international. Ainsi beaucoup d'informaticiens ont appris que 1 kilooctet
valait 1024 octets. Or, depuis décembre 1998, l'organisme international IEC a fixé les
nouvelles valeurs. Voici donc les unités standardisées :
• Un Téraoctet (To) = 240 octets = 1024 Go = 1 099 511 627 776 octets
7
gauche à droite, cela se traduit par le fait que chaque chiffre dans un nombre est associé à une
puissance de dix, selon sa position.
Par exemple, 2019 est le nombre composé de neuf unités, une dizaine (une dizaine est un
paquet de dix unités), zéro centaine (une centaine est composée de dix paquets de dix unités)
et deux milliers (un millier correspond à dix paquets de dix paquets de dix unités).
Autrement dit :
2019 = 2*1000 + 0*100 + 1*10 + 9*1
= 2* 10* 10* 10 + 0* 10*10 + 1*10 + 9*1
ce qui donne (écrit avec les puissances de dix correspondantes) :
2019 = 2* 103 + 0* 102 + 1* 101 + 9 *100
Par convention, 1 = a0 pour n’importe quel nombre a.
11111011110 = 1*210 + 1*29 + 1*28 + 1*27 + 0*26 + 0*25 + 1*24 + 1*23 + 1*21 + 1*21 + 0*20
On utilise aussi très souvent le système hexadécimal en informatique (base 16) du fait de sa
simplicité d'utilisation et de représentation pour les mots machines (il est bien plus simple
d'utilisation que le binaire). La base hexadécimale consiste à compter sur une base 16, c'est
pourquoi au-delà des 10 premiers chiffres on a décidé d'ajouter les 6 premières lettres : 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Le tableau ci-dessous montre la représentation des nombres
de 0 à 15 dans les bases 10, 2 et 16:
Base 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
8
décimale
Base 0 1 2 3 4 5 6 7 8 9 A B C D E F
hexadéc
imale
Base 00 00 00 00 01 01 01 01 10 10 10 10 11 11 11 11
binaire 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11
Comme un exemple est beaucoup plus explicite qu'un paragraphe théorique, on va appliquer
l'algorithme d'Euclide pour passer le nombre 241 en base 2 et en base 16.
En base 2 :
Notre nombre est 241
241 ÷ 2 = 120 + 1
120 ÷2 = 60 + 0
60 ÷2 = 30 + 0
30 ÷2 = 15 + 0
15 ÷2 = 7 + 1
7 ÷2 = 3 + 1
3 ÷2 = 1 + 1
1 ÷2 = 0 + 1
On a donc 241 = (11110001)2. (La lecture est toujours du bas vers le haut)
En base 16 :
Notre nombre est 241
241 ÷ 16 = 15 + 1
15 ÷16 = 0 + 15
9
On a donc 241 = (F1)16. En base 16, 15 est symbolisé par la lettre F.
10
2.3 Les opérations en binaire
a. L'addition en binaire
Additionner en binaire n’est pas compliqué : c’est le même principe que dans la base
décimale. Il suffit de poser l’opération et de faire attention aux retenues. Il n’y a rien de mieux
qu’un exemple pour comprendre, donc en voici un :
Sur l’opération du milieu, 1+1 en binaire donne 10, donc 0 et une retenue.
Voici un autre exemple, avec des nombres un peu plus grands. La difficulté n’est pas plus
grande, mais il faut parfois faire attention aux retenues qui se propagent :
b. Soustraction en binaire
Pour soustraire des nombre en binaire, il faut raisonner comme on raisonne en décimale, il
suffit de bien faire attention aux retenues. Mais il existe une autre méthode, qui transforme les
soustractions en additions, et simplifie alors toute cette histoire de retenues.
En fait, au lieu de faire A–B, on fera A+(𝐵̅+1). Ici, 𝐵̅ (prononcer « B barre ») est le
complément à 1 de B
- Le complément à 1
Le complément à 1 est un nombre qui existe dans toutes les bases, mais en binaire il est très
facile à trouver : il suffit de changer les 1 en 0 et les 0 en 1. C'est tout :
Nombre (B) Complément (B)
0 1
1 0
0011 1100
11
- Soustraction
Maintenant qu'on a le complément à 1 d'un nombre, il est possible de faire des soustractions.
Souvenez-vous de ce qu'il faut faire : au lieu A – B, on fera A + (B + 1).
Exemple : calculons 001001 – 1010.
Premièrement, il faut commencer à donner le même nombre de rangs à chaque terme : le
premier nombre s'écrit sur 6 bit et le second seulement sur 4. Il faut donc écrire le second sur
6 bit aussi : 1010 devient 001010. C'est de ce nombre qu’il faudra inverser les bits.
On écrit le plus petit nombre avec autant de bits que le grand : 1010 devient 001010.
En inversant tous les bits de 001010 on obtient 110101.
On ajoute 1, ce qui fait 110110.
On fait maintenant 001001 + 110110. Cela donne : 111111.
c. La multiplication en binaire
La multiplication se fait exactement la même chose qu’on base décimale, chaque nombre de
la ligne du bas sera distribué à la ligne du haut. Ensuite, chaque ligne sera sommée (ne pas
oublier les retenues à ce moment-là) et le résultat sera alors obtenu.
Exemple : calculons (1010)b x (101010)b:
On appelle représentation (ou codification) d'un nombre la façon selon laquelle il est décrit
sous forme binaire. La représentation des nombres sur un ordinateur est indispensable pour
que celui-ci puisse les stocker et les manipuler. Toutefois le problème est qu'un nombre
mathématique peut être infini (aussi grand que l'on veut), mais la représentation d'un nombre
dans un ordinateur doit être fait sur un nombre de bits prédéfini. Il s'agit donc de prédéfinir un
nombre de bits et la manière de les utiliser pour que ceux-ci servent le plus efficacement
possible à représenter l'entité.
12
a. Mémoire d’un ordinateur
Puisqu’un ordinateur ne manipule en fin de compte que des mots composés de 0 et de 1, on
dit que le bit est l’unité de base de sa mémoire. En très simplifié, on peut se représenter la
mémoire d’un ordinateur comme un tableau ayant une seule ligne et autant de cases qu’il peut
mémoriser de bits.
Par exemple, on peut imaginer la mémoire d’un ordinateur pouvant stocker huit bits ainsi :
Portion de mémoire stockant la donnée 147 :
1 0 0 1 0 0 1 1
Cependant, il est clair que disposer de dix bits de mémoire est largement insuffisant pour
pouvoir stocker des données intéressantes. Par exemple pour stocker le nombre 2014 par
11111011110 nous aurons besoin de onze bits. Comme 2014 reste un nombre assez petit, on
peut imaginer qu’il faudra beaucoup plus de place dans la mémoire d’un ordinateur.
Ainsi, pour faciliter la lecture par les humains de ces nombres dont la représentation en
binaire est très longue, on a décidé de grouper les bits par paquets de huit « un octet ».
Attention, un octet se dit « byte » en anglais : un byte est un groupe de huit bits, et non pas un
seul bit.
Lorsque l’ordinateur mémorise un nombre, il lui réserve toujours un nombre entier d’octets,
en comblant les cases inutilisées à gauche de la représentation du nombre par des 0. Ainsi
pour stocker 111 11011110, qui est la représentation binaire de 2014, un octet ne peut pas
suffire, puisqu’il y a onze bits. On utilise donc deux octets c’est-à-dire seize bits, et on écrit en
fait 00000111 11011110.
Sur deux octets, c’est-à-dire seize bits, on peut représenter 216 = 65536 nombres différents : le
plus petit d’entre eux est représenté par 00000000 00000000, c’est le nombre 0, et le plus
grand est représenté par 11111111 11111111, c’est le nombre 65535. En résumé, si l’on
dispose de deux octets (16 bits) en mémoire, on peut stocker toute valeur comprise entre 0 et
216- 1 = 65535.
Un processeur 64 bits manipule des paquets de 8 octets, soit 64 bits :
En conclusion, il faut retenir que les nombres manipulés par un ordinateur sont limités par le
nombre d’octets utilisés pour stocker leur représentation binaire.
13
3. Représentation des entiers relatifs et des nombres à virgule
3.1 Nombre entier relatif
Un nombre entiers relatif est un entier qui peut prendre exactement deux valeurs (positif ou
négatif), par conséquent, il suffit d’un bit supplémentaire pour le représenter. On convient que
0 correspond à un nombre positif et 1 à un nombre négatif.
La façon la plus simple de représenter un entier relatif positif ou nul en binaire (base 2)
consiste à le faire présenter comme un entier naturel, à la seule différence que le bit de poids
fort (le bit situé à l'extrême gauche) représente le signe. Il faut donc s'assurer pour un entier
positif ou nul qu'il est à zéro (0 correspond à un signe positif, 1 à un signe négatif). Ainsi si on
code un entier naturel sur 4 bits, le nombre le plus grand sera 0111 (c'est-à-dire 7 en base
décimale). D'une manière générale le plus grand entier relatif positif codé sur n bits sera 2n-1-1.
- On complémente chaque bit (on inverse, c'est-à-dire que l'on remplace les zéros par des 1
et vice-versa)
- On ajoute 1
- de complémenter à 1: 11111100
- d'ajouter 1: 11111101
On remarquera qu'en ajoutant le nombre et son complément à deux on obtient 0 avec une
retenue de 1
14
3.2 Nombre à virgule
La représentation binaire des nombres à virgule utilisée en informatique est du même type que
la notation dite « scientifique » utilisée par les calculatrices : le nombre 201,4 s’écrit ainsi 2,
014˟102. L’exposant peut-être négatif si le nombre est compris entre -1 et 1 : par exemple 0,
00214 s’écrit 2,014˟10-3. On va donc utiliser l'écriture scientifique pour représenter nos
nombres couplés à la norme IEEE. Cette norme se propose de définir trois composantes : On
se place maintenant dans le cas où chaque nombre occupe 4 octets, soit 32 bits :
• On réserve toujours le premier bit pour le signe (0 pour un nombre positif et 1 pour un
nombre négatif).
• Les huit bits suivants sont utilisés pour l’exposant, qui est un nombre relatif compris
entre -126 à 127.
• 23 bits pour la mantisse (les bits situés après la virgule).
A partir de là nous avons déjà deux éléments sur trois : le signe, +, qui est codé par 0. Et la
mantisse, 111011110111100, auquel nous ajoutons des 0 jusqu'à arriver à 23 bits. Ce qui nous
donne : 11101111011110000000000.
15
123,444 = 01000010111101111011110000000000.
16
Les codes ASCII en décimal (base 10), hexadécimal (base 16), octal (base 8) et binaire (base 2). La dernière
colonne donne le caractère correspondant.
Conclusion
Nous avons vu dans ce chapitre le principe du codage de l'information sous forme binaire,
quand cette information est de type numérique ou textuel.
C'est avec ce codage (le langage machine) que fonctionnent tous les systèmes micro-
programmés par l’utilisation des microprocesseurs.
17
CHAPITRE II
Microprocesseur
18
Introduction
Un système numérique, intégrant de l’électronique, fait souvent apparaître des fonctions ayant
pour rôle le traitement d’informations : opérations arithmétiques (addition, multiplication...)
ou logiques (ET, OU...) entre plusieurs signaux d’entrée permettant de générer des signaux de
sortie.
Ces fonctions peuvent être réalisées par des circuits intégrés analogiques ou logiques. Mais,
lorsque le système devient complexe, et qu’il est alors nécessaire de réaliser un ensemble
important de traitements d’informations, il devient plus simple de faire appel à une structure à
base de : microcontrôleur ou microprocesseur.
19
2.1 Unité Arithmétique et Logique (UAL)
Elle dispose de circuits réalisant des opérations des fonctions logiques (ET, OU, comparaison,
décalage,...) ou arithmétique (addition, soustraction,...).
En entrée de l’UAL, on a des commandes permettant d’activer les opérations, venant de
l’unité de contrôle En sortie, on a les résultats des opérations et les conditions qui sont en fait
les entrées de l’unité de contrôle. L'UAL est composé de :
• Les accumulateurs : Ce sont des registres de travail qui servent à stocker un opérande
au début d'une opération arithmétique et le résultat à la fin de l'opération.
• L’Unité Arithmétique et Logique: C'est un circuit complexe qui assure les fonctions
logiques (ET, OU, Comparaison, Décalage, etc...) ou arithmétique (Addition, soustraction...)
• Le registre d'état: Il est généralement composé de 8 bits à considérer
individuellement. Chacun de ces bits est un indicateur dont l'état dépend du résultat de
la dernière opération effectuée par l’UAL. On les appelle indicateur d’état ou flag ou
drapeaux (Retenue (C), signe (S), zéro (Z), ...).
20
Le registre d'instruction et le décodeur d'instruction : Chacune des instructions à
exécuter est transférée depuis la mémoire dans le registre d’instruction puis est décodée par le
décodeur d’instruction.
Le bloc logique de commande (ou séquenceur) : Il organise l'exécution des
instructions au rythme d’une horloge. Il élabore tous les signaux de synchronisation internes
ou externes (bus de commande) du microprocesseur en fonction de l’instruction qu’il a à
exécuter.
21
2.4 Les registres
C'est un espace mémoire interne au processeur. On distingue deux types : à usage général qui
permettent à l'UAL de manipuler des données et les registres d'adresses qui sont connectés au
bus d'adresse.
3. Les mémoires
Le processeur exécute les instructions machines présente dans la mémoire et traite les données
qu'elle contient : le fonctionnement du microprocesseur est entièrement conditionné par le
contenu de celles-ci et sa capacité de mémoriser, c'est-à-dire le nombre d’octet (mot de 8 bits)
ou de bits qu’elle peut stocker. Une mémoire de 2048 octets a pour capacité 2048x8 bits
La mémoire peut être vue comme un ensemble de cellules ou cases contenant chacune une
information : une instruction ou une donnée. Chaque case mémoire est repérée par un numéro
d’ordre unique : son adresse.
Une case mémoire peut être lue ou écrite par le microprocesseur (cas des mémoires vives) ou
bien seulement lue (cas des mémoires mortes).
22
Figure.5 Structure générale d'une mémoire
C’est des mémoires qui gardent en permanence les données sans les perdre quand il n’y a pas
d’alimentation : mémoires non volatiles. Elles sont utilisées pour stocker des données qui sont
rarement modifiées. Leurs principales utilisation est le stockage des programme système, des
tables de correspondance (conversion de code), ... Il existe plusieurs type de ROM :
23
stocker temporairement des programmes et des données au cours de l’exécution d’un
programme. Il distingue deux types RAM :
• SRAM : Ce sont des mémoires qui gardent leur contenu en utilisant des transistors.
Exemple : 6264 est RAM CMOS.
• DRAM : Ce sont des mémoires qui stockent leurs contenus sous formes des charges
dans des petits condensateurs MOS. Une cellule de DRAM est donc très simple, ce qui permet
la construction de très grandes mémoires à bas prix. Cependant, le condensateur se décharge
avec le temps et l'information est perdue si la charge n'est pas rafraichie périodiquement
(rafraichissement 2 à 10 ms). Leurs avantages sur les SRAM est leur grande capacité et la
faible consommation, mais les SRAM sont beaucoup plus rapides.
24
Où n est le nombre de cycle que peut prendre l’instruction.
25
Modes d’adressage immédiat : Le champ adresse contient la valeur de
l’opérande
Ex: MOV #100, R1
a. Recherche de l'instruction
Pour exécuter les instructions dans l’ordre établi par le programme, le microprocesseur doit
savoir à chaque instant l’adresse de la prochaine instruction à exécuter. Le microprocesseur
utilise un registre contenant cette information : Le pointeur d’instruction
Le contenu de PC est placé sur le bus des adresses. L'unité de contrôle (UC) émet un ordre de
lecture, au bout d'un certain temps (temps d'accès à la mémoire) le contenu de la case
26
mémoire sélectionné est disponible sur le bus des données. L'unité de contrôle charge la
donnée dans le registre d'instruction pour décodage.
b. Décodage
Pour savoir quel type d’opération doit être exécuté (addition, soustraction, ...), le
microprocesseur lit le premier octet de l’instruction pointée par le pointeur d’instruction (code
opératoire) et le range dans le registre d’instruction. Le code opératoire est décodé par des
circuits de décodage contenus dans le microprocesseur. Des signaux de commande pour
l’UAL sont produits en fonction de l’opération demandée qui est alors exécutée.
Pendant que l’instruction est décodée, le pointeur d’instruction est incrémenté de façon à
pointer vers l’instruction suivante. Puis, le processus de lecture et de décodage des
instructions recommence.
c. Exécution
Après l’exécution de l’instruction par micro-programme, les indicateurs sont positionnés (O,
S, Z, C). L'unité de commande positionne le compteur ordinal (PC) pour l'instruction
suivante.
27
5.2 Architecture de Harvard
Cette architecture sépare systématiquement la mémoire de programme de la mémoire des
données : l'adressage de ces mémoires est indépendant. Ce type d’architecture est utilisé sur
des microcontrôleurs qui ont connu un développement important ces dernières années.
Quoique cette architecture puisse être complexe mais elle est performante: Gain en terme de
vitesse d’exécution des programmes :
L’exécution d’une instruction ne fait plus appel qu’à un seul cycle machine puisque l’on peut
simultanément, grâce au deux bus, rechercher le code de l’instruction et la ou les données
qu’elle manipule.
Conclusion
A partie de ce que nous avions dit précédemment, on conclure qu’un microprocesseur muni
de mémoire peut être, dans une première approche, considéré comme un « cerveau » capable
d’effectuer des opérations diverses (opérations arithmétiques, logiques) et de les enchaîner
dans un processus cohérent. Tel quel, un microprocesseur (on parle aussi du CPU : Central
Processing Unit) n’a aucune utilité puisqu’il ne peut pas communiquer avec le milieu
extérieur. Pour pouvoir être efficace, un microprocesseur doit disposer d’organes d’entrée-
sortie comme le cerveau qui dispose d’organes d’entrée (oreilles, yeux) et de sortie (paroles,
gestes). Nous appelons "microcontrôleur" cette structure "microprocesseur + périphériques".
28
CHAPITRE III
Microcontrôleur
29
Introduction
La partie principale d’un micro-ordinateur est la « carte mère » sur laquelle sont montés le
microprocesseur, les contrôleurs de périphériques et les lignes qui les connectent entre eux
sous forme de circuit imprimé. Avec les progrès de la miniaturisation, et la généralisation de
l’utilisation des ordinateurs, les besoins les plus courants se sont standardisés et on a pu
disposer toute une carte mère au sein d’une seule et même puce, appelée microcontrôleur.
L’usage de microcontrôleurs est actuellement en plein développement dans toute
l’informatique industrielle, et à tous les degrés de complexité (de 8 pattes à près de 200
pattes). 7 Un système informatique complet regroupe autour d'un microcontrôleur un
ensemble de composants qui lui permettent de fonctionner (essentiellement mémoires) et de
communiquer avec le milieu extérieur (contrôleurs de périphériques)
1. Microcontrôleur
1.1 Définition d’un microcontrôleur
On définit ainsi un microcontrôleur comme étant une unité de traitement de l’information de
type microprocesseur à laquelle on a ajouté des périphériques internes permettant de réaliser
des montages sans nécessiter l’ajout de composants externes.
Il intègre également un certain nombre de périphériques spécifiques des domaines ciblés (bus
série, interface parallèle, convertisseur analogique numérique, ...). Les microcontrôleurs
améliorent donc l'intégration et le coût (lié à la conception et à la réalisation) d'un système à
base de microprocesseur en rassemblant les éléments essentiels d’un tel système dans un seul
circuit intégré. On parle alors de "système sur une puce" (en anglais : "System On chip").
Les microcontrôleurs sont plutôt dédiés aux applications qui ne nécessitent pas une grande
quantité de calculs complexes, mais qui demandent beaucoup de manipulations
d’entrées/sorties. C’est le cas de contrôle de processus.
30
Des interfaces série (synchrones et asynchrones) pour le dialogue avec d’autres unités.
Il peut aussi posséder :
Un chien de garde (Watchdog) qui assure la surveillance du programme.
Une sortie PWM (Pulse Width Modulation) pour la modulation d’impulsion.
Un convertisseur analogique-numérique et numérique-analogique (CAN/CNA) pour le
traitement des signaux analogiques.
31
2. Les microcontrôleurs de type PIC
2.1 Définition de PIC
Un PIC n’est rien d’autre qu’un microcontrôleur. La dénomination PIC est sous copyright de
Microchip. Ses caractéristiques principales sont :
Séparation des mémoires de programme et de données (architecture Harvard) :
On obtient ainsi une meilleure bande passante et des instructions et des données pas
forcément codées sur le même nombre de bits.
Communication avec l'extérieur seulement par des ports : il ne possède pas de bus
d'adresses, de bus de données et de bus de contrôle comme la plupart des microprocesseurs.
Utilisation d'un jeu d'instructions réduit, d'où le nom de son architecture : RISC
(Reduced Instructions Set Construction). Les instructions sont ainsi codées sur un nombre
réduit de bits, ce qui accélère l'exécution (1 cycle machine par instruction sauf pour les sauts
qui requièrent 2 cycles). En revanche, leur nombre limité oblige à se restreindre à des
instructions basiques, contrairement aux systèmes d'architecture CISC (Complex Instructions
Set Construction) qui proposent plus d'instructions donc codées sur plus de bits mais réalisant
des traitements plus complexes.
32
ZZ: Vitesse maximum tolérable.
Dans la suite du chapitre, on va prendre comme exemple le PIC 16F877 et présenter sa
structure interne et externe.
33
- Timer0 : Timer/Compteur 8 bitsavec un prédiviseur 8 bits
- Timer1 : Timer/Compteur 16 bits avec un prédivision de 1, 2, 4, ou 8 ; il peut
être incrémenté en mode veille (Sleep), via une horloge externe,
- Timer2 : Timer 8 bits avec deux diviseurs (pré et post diviseur)
- Deux modules « Capture, Compare et PWM » : Module capture 16 bits avec
une résolution max. 12,5ns, Module Compare 16 bits avec une résolution max.
200ns, Module PWM avec une résolution max. 10 bits,
- Convertisseur Analogiques numériques multi-canal (8 voies) avec une
conversion sur 10 bits,
- Synchronous Serial Port (SSP) SSP, Port série synchrone en mode I2C (mode
maitre/escalve),
- Universel Synchronous Asynchronous Receiver Transmitter (USART) : Port
série universel, mode asynchrone (RS232) et mode synchrone.
34
Oscillateur à quartz de haute fréquence. 4. Le mode RC (Resistor/Capacitor): Oscillateur RC.
Avec l'oscillateur à Quartz, on peut avoir des fréquences allant jusqu'à 20 MHz selon le type
de µC. Le filtre passe bas (Rs, C1, C2) limite les harmoniques dus à l’écrêtage et réduit
l’amplitude de l’oscillation, il n'est pas obligatoire.
Quel que soit l'oscillateur utilisé, l'horloge système dite aussi horloge instruction est obtenue
en divisant la fréquence par 4. Dans la suite de ce document on utilisera le terme Fosc/4 pour
désigner l'horloge système. Avec un quartz de 20 MHz, on obtient une horloge instruction de
5MHz, soit 0.2µs le temps pour exécuter une instruction.
35
Si le μC est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci
permet d’éviter de rester planté en cas de blocage du microcontrôleur par un processus
indésirable non contrôlé
Si le μC est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l'exécution
du programme continue normalement là où elle s'est arrêtée avant de rentrer en mode SLEEP.
Cette situation est souvent exploitée pour réaliser des temporisations.
Un registre direction pour programmer les lignes soit en entrée, soit en sortie TRISA,
TRISB, TRISC, TRISD et TRISE.
Un registre de données pour lire ou modifier l’état des broches. PORTA, PORTB,
PORTC, PORTD et PORTE
Pour déterminer les modes des ports (I/O), il faut sélectionner leurs registres TRISX:
Le positionnement d’un bit à « 1 » place le pin en entrée.
Le positionnement de ce bit à « 0 » place le pin en sortie.
La plupart des broches des PORTs sont partagées avec des périphériques. En général si un
périphérique est utilisé, les broches correspondantes ne peuvent pas être utilisées comme
broches d’entrée/sortie.
Au Reset, les lignes des ports A et E sont configurées en entrées analogiques, les autres lignes
sont configurées en entrées digitales. Le courant absorbé ou fourni peut atteindre 25 mA.
a. Port A
Le tableau ci-dessous décrit les différentes fonctions multiplexées sur le port A.
36
- AN0 à AN3 : Entrées analogiques.
- Vref : Tension de référence, on la fixe par programmation.
- T0CKI : Timer Clock In ; entrée d’horloge du TMR0.
- 𝑆𝑆̅̅̅̅̅̅ : Entrée de sélection esclave pour la communication série synchrone.
b. Port B
Le port B peut être programmé pour un tirage à 5V (pull up) de toutes ses lignes que l'on peut mettre
ou non en service en mode entrée uniquement. Elles sont automatiquement désactivées quand le port
est configuré en sortie. En mode entrée, chaque broche du PORTB doit être maintenue à un niveau
haut par l'intermédiaire de résistances de 10 k pour ne pas déclencher d'interruptions imprévues. Cette
possibilité d'interruption sur un changement d'état associé à la fonction de tirage configurable sur ces 4
broches, permet l'interfaçage facile avec un clavier. Cela rend possible le réveil du PIC en mode
SLEEP par un appui sur une touche du clavier. Le tableau ci-dessous décrit les différentes fonctions
multiplexées sur le port B.
37
c. Port C
Le port C est partagé avec liaisons, les timers 1 et 2 et les modules CCP. Le tableau ci-
dessous décrit les différentes fonctions multiplexées sur le port C.
d. Port D et E
38
3.7 Les Timers
Le Timer permet de réaliser les fonctions suivantes :
- Génération d’un signal périodique modulé ou non en largeur d’impulsion,
- Gé né ration d’une impulsion calibrée,
- Temporisation,
- Comptage d'événements.
Le Pic16F877 comporte trois timers qui sont :
a. Le module TMR0 :
Le timer 0 qui est un compteur sur 8 bits dont on peut choisir le front de déclenchement, le
rapport de division et l’horloge interne ou externe. Tous les bits de configuration de TMR0
sont dans le registre OPTION :
39
• Mode TIMER : Le choix de ce mode se fait par : TOCS = 0 (b5 de OPTION). TMR0
est incrémenté à chaque cycle instruction (Fosc/4), en considérant le pré-diviseur avec
un rapport de 1.
• Mode COMPTEUR : Ce mode est sélectionné si TOCS = 1. TMR0 est alors
incrémenté à chaque front montant ou descendant sur la broche PA4/CLK (pin3). Le
choix du front est fait par le bit TOSE (bit4 de OPTION). Si TOSE = 0 le compteur
s'incrémente à chaque front montant. Si TOSE = 1 c'est le front descendant qui
incrémente le compteur.
• LE PREDIVISEUR : Il est partagé entre le Watchdog et TMR0. L'affectation se fait
par le bit PSA (bit3 d’OPTION).
- Si PSA = 0 le pré-diviseur est affecté à TMR0. Le choix du rapport de division se
fait avec les bits PS2, PS1 et PS0 (bit 2, b1 et b0 de OPTION).
- Si PSA = 1 le pré-diviseur est affecté au Watchdog et le rapport de division pour
TMR0 est fixé à 1.
• INTERRUPTION : Elle est générée quand TMR0 passe de la valeur FF à 00. Le Flag
TOIF (bit2 de INTCON) passe à "1". On peut masquer la génération de l'interruption
en mettant le bit TOIE (bit5 de INTCON) à "0".
Le Flag TOIF dit être remis à zéro par soft dans le sous-programme d'interruption,
avant de re-autoriser cette interruption.
b. Le module TMR1 :
Le timer 1 qui est un compteur sur 16 bits. Ce module peut fonctionner en mode TIMER,
quand il s'incrémente à chaque cycle instruction (Fosc/4 avec le pré diviseur considéré à "1")
ou en mode compteur, quand il s'incrémente à chaque front montant de l'horloge externe. Le
contrôle du TIMER 1 se fait par le registre T1CON :
40
• Bit 3 : T1OSCEN : Bit d'autorisation de l'oscillateur du Timer 1.
- 1 = oscillateur autorisé
- 0 = oscillateur stoppé.
• Bit 2 : T1SYNC : Bit de contrôle de la synchronisation du CLK externe.
- 1 = Pas de synchronisation de l'horloge externe.
- 0 = Synchronisation de l'horloge externe.
• Bit1 : TMR1CS : Bit de sélection de la source horloge.
- 1 = Mode Compteur: Clk externe sur la broche PC0 ou Quartz entre PC0 et
PC1
- 0 = Mode Timer: Clk interne = Fosc/4.
• Bit 0 : TMR1ON : Bit d'autorisation du Timer 1. 1 = Timer 1 en service. 0 = Timer 1
stoppé.
c. Le module TMR2 :
Le module Timer 2 est un compteur 8 bits avec pré-diviseur et post diviseur.
L'entrée du compteur est l'horloge cycle interne : Fosc/4 qui passe à travers un pré-diviseur
programmable par 1, 4 ou 16.
La sortie du compteur passe dans un post diviseur programmable sur 4 bits entre 1 et 16.
Le contrôle du Timer 2 se fait par le registre T2CON :
41
- ....
- ....
- 1 1 1 1 = post divise par 16.
• bit 2 : TMR2ON : mise en service du Timer 2.
- 1= Timer 2 : On.
- 0= Timer 2 : Off.
• bit 1 et bit0 : T2CKPS : Programmation du pré diviseur.
- 0 0= pré divise par 1.
- 0 1= pré divise par 4.
- 1 X= pré divise par 16.
42
- 0 1 1 0 = Mode Capture tous les 4 fronts montants.
- 0 1 1 1 = Mode Capture tous les 16 fronts montants.
- 1 0 0 0 = Mode Compare. Pin de sortie mise à "1" et Flag CCP1IF = 1 à l'égalité.
- 1 0 0 1 = Mode Compare. Pin de sortie mise à "0" et Flag CCP1IF = 1 à l'égalité.
- 1 0 1 0 = Mode Compare. Génération d'une Interrup. et Flag CCP1IF = 1 à
l'égalité.
- 1 0 1 1 = Mode Compare. Evénement spécial généré et Flag CCP1IF = 1 à
l'égalité.
- 1 1 x x = Mode PWM.
3.9 Convertisseur analogique numérique CAN
43
01= Fosc/8.
10= Fosc/32.
11= Oscillateur RC interne.
Le temps de conversion d'un bit est TAD. Pour une conversion totale des 10 bits il faut :
[Link].
Pour que la conversion soit correcte il faut que TAD soit au minimum de 1,6µs. Avec
l'oscillateur interne RC on a : TAD = 4 µs typique (entre 2 et 6 µs).
Figure.5 Temps de conversion TAD en fonction du Quartz et des bits du Clock select
3.10 Interruption
L’interruption est un mécanisme fondamental dans le fonctionnement des microcontrôleurs,
elle permet de prendre en compte des événements extérieurs et de leurs associer un traitement
spécifique. La séquence classique de fonctionnement d’une interruption :
45
- EEPROM: interruption interne fin d’écriture en EEPROM
Le registre qui gère les interruptions est le registre INTCON qui est un registre de 8 bits:
Conclusion
Ce chapitre se veut être une aide à la compréhension de l’architecture et le fonctionnement de
microcontrôleurs. Nous avons donné une attention particulière au microcontrôleur PIC16F877
de micro-Chip. Ce composant intègre un microcontrôleur de 8bits, c.à.d un processeur et des
périphériques, dans un boitier de 40 broches. Il est réalisé en technologie CMOS et peut
cadencer par une horloge allant de 0 à 20 MHZ ; il doit être alimenté par une tension allant de
3 à 5.5Volts.
Cependant, les microcontrôleurs sont en général programmés en C/C++ et nécessitent des
connaissances approfondies en électronique. En revanche, La plate-forme Arduino a apporté
une avancée majeure dans l'accessibilité de cette technologie au plus grand nombre par sa
simplicité d'utilisation et son coût abordable.
46
CHAPITRE IV
Arduino
47
Introduction
1. Système Arduino
1.1 Définition d’un système Arduino
Arduino est un circuit imprimé en matériel libre (dont les plans de la carte elle-même sont
publiés en licence libre mais dont certains composants sur la carte, comme le microcontrôleur
par exemple, ne sont pas en licence libre) sur lequel se trouve un microcontrôleur qui peut être
programmé pour analyser et produire des signaux électriques, de manière à effectuer des
tâches très diverses comme la domotique (le contrôle des appareils domestiques – éclairage,
chauffage…), le pilotage d’un robot, etc. Le système Arduino est composé de deux choses
principales : le matériel et le logiciel.
48
Arduino n’est pas en soi un type de carte ou un microcontrôleur spécifique. Arduino désigne
plutôt toute une famille. Dans le marché, on peut trouver différentes type de carte mais il faut
choisir celle qui convient à votre projet.
49
carte Leonardo et a pour objectif de combiner la puissance de Linux avec la facilité
d’utilisation d’une carte Arduino. Elle est également la première carte Arduino à être dotée
nativement d’un wifi intégré.
Pour ce cours, nous nous baserons sur le plus connu: l'Arduino Uno
50
Figure 2. Constituants de la carte arduino UNO
a. Microcontrôleur
Figure.3 (a) carte arduino UNO avec un microcontrôleur de grande taille (b) carte arduino UNO SMD
51
Lorsqu'on observe une carte Arduino Uno sous rayons X, on constate que la grande puce
contient en réalité un microcontrôleur SMD. Noter aussi les pistes qui relient les broches au
microcontrôleur:
b. Alimentation
Pour fonctionner, une carte Arduino UNO a besoin d'une alimentation. Le microcontrôleur
fonctionnant sous 5V, la carte peut être alimentée en 5V par le port USB ou bien par une
alimentation externe qui est comprise entre 7V et 12V. Un régulateur se charge ensuite de
réduire la tension à 5V pour le bon fonctionnement de la carte.
c. Tension de références
La carte arduino fournit des ports permettant d’accéder à certaines tensions de référence.
GND est la référence de la carte arduino par rapport à laquelle toutes les différences de
tension sont mesurées. Si la carte est reliée à l’ordinateur par un câble USB, cette tension est
celle de la terre.
Les ports 5V et 3V3 donnent accès aux tensions de 5 V et de 3.3 V. Ces tensions sont
normalement régulées et précises. Une exception : quand la carte est branchée sur un port
USB sans alimentation externe, le port 5 V ne provient plus de la carte arduino mais
directement du câble USB, la tension de référence 5 V n’est alors plus aussi bien régulée.
52
Attention : si vous reliez directement le port 5 V au port GND (ou le port 3V3 au port GND,
ou le port 5V au port 3V3), vous provoquerez un court-circuit qui endommagera la carte !
d. Entrées/Sorties Numérique
La carte "ARDUINO Uno" dispose de 14 broches ("pin" en anglais, numérotées de 0 à 13) qui
peuvent être configurées en "entrées digitales" ou en "sorties digitales" susceptibles de
délivrer une intensité maximale de 40 mA sous une tension égale à 0V ou 5V. Les deux
premiers ports sont réservés à la communication série, il ne faut pas les utiliser. Le dernier
port, port 13, possède un indicateur lumineux, une LED qui s’allume quand le port est HIGH,
et qui s’éteint quand le port est LOW.
e. Entrées/Sorties Analogique
Une entrée analogique est une sorte de voltmètre : la carte lit la tension qui est appliquée sur
le port. Cependant le microcontrôleur ne travaille qu’avec des chiffres : il faut donc
transformer la tension appliquée en sa valeur numérique. C’est le travail du convertisseur
analogue/numérique, dit « CAN ».
Le CAN de la carte arduino travaille sur 10 bits : il accepte en entrée une tension comprise
entre 0V et Vref une tension de référence, et fournit au microcontrôleur un chiffre entier
compris entre 0 et 1023 (=210-1). Une tension inférieure à 0V est lue comme 0, une tension
supérieure à Vref est lue comme 1023, une tension intermédiaire est lue comme un entier entre
0 et 1023, avec une relation linéaire. La tension Vref est 5 V par défaut, mais cette valeur peut
être changée dans le programme.
La carte arduino ne possède pas de vraie sortie analogique, capable de produire une tension
d’une valeur arbitraire choisie par l’utilisateur. Certains ports numériques peuvent cependant
servir de sortie analogique en utilisant la technique de PWM (Pulse Width Modulation) : il
53
s’agit des ports 3, 5, 6, 9, 10 et 11 (signalés par un ~ sur la carte). Ces ports peuvent simuler
une tension entre 0 et 5V en basculant rapidement entre leur état LOW (0V) et HIGH (5V).
La valeur moyenne de la tension est alors 2.5V si le port passe autant de temps dans un état
que dans l’autre, mais en changeant ce rapport, la valeur moyenne de la tension peut être
contrôlée de 0 à 5V.
La carte arduino est capable de faire varier la valeur moyenne de ces ports avec une sensibilité
de 8 bits : on fournit un chiffre entier compris entre 0 et 255 (=28-1), et le port délivre une
tension moyenne entre 0 et 5 V (0=0V, 255=5V).
f. Port USB
Le port USB permet à la fois l’alimentation de la carte Arduino et la communication série
entre la carte et l’ordinateur. Une fois connectée, la carte Arduino apparaît dans le
gestionnaire de matériel de votre ordinateur, connecté à un port série (COM1, COM4, …).
Vous devez vérifier que l’IDE (le programme fourni par Arduino) est bien configuré pour
dialoguer sur le bon port COM (et pour le bon type de carte Arduino !).
54
Figure.9 l’interface du logiciel Arduino
E/S analogique
• analogReference()
• analogRead()
• analogWrite() - PWM
E/S avancée
• tone()
• noTone()
• shiftOut()
• shiftIn()
• pulseIn()
Temps
• millis()
• micros()
• delay()
55
• delayMicroseconds()
Bits et octets
• lowByte()
• highByte()
• bitRead()
• bitWrite()
• bitSet()
• bitClear()
• bit()
Interruptions externes
• attachInterrupt()
• detachInterrupt()
Interruptions
• interrupts()
• noInterrupts()
Communication
• Serial
• Stream
Conclusion
Maintenant vous devriez avoir une idée un peu plus précise de ce qu’est (et ce que n’est pas)
un arduino, alors pour résumer:
Un arduino n’est pas un petit PC.
Ses domaines de prédilections sont les systèmes embarqués.
C’est un microcontrôleur simplifié.
L’idéal pour commencer est l’arduino UNO.
Il est possible d’ajouter des cartes offrant des options ou connectiques
supplémentaires à votre arduino (appelé Shield).
Ce projet est open source et sous licence libre, il y a donc des cartes
ressemblant aux arduino (et ayant souvent « duino » dans leurs noms) mais vendu sous une
autre dénomination. Ce ne sont pas des contrefaçons.
56
Bibliographie
- [Link]
- [Link]
57