Download - SYSTEMES A MICROCONTROLEURS
EN-NAHLI MOHAMMED FORMATEUR :OFPPT ISTA RI FES MAROC
SYSTEMES A MICROCONTROLEURS
Version 4
05/10/2015
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 2
Table de matières
Table de matières .............................................................................................................................. 2
Chapitre 1. Introduction aux microprocesseurs. ................................................................... 5
1. Logique câblée et logique programmée :..................................................................... 5
1.1. Logique câblée : ................................................................................................................ 5
1.2. Logique programmée : ..................................................................................................... 5
1.3. Intérêt de la logique programmée : ............................................................................ 5
1.4. Le microprocesseur : c’est quoi ?................................................................................. 6
1.5. Unité arithmétique et logique (UAL ou ALU) ........................................................... 6
2. Exemple d’une UAL : Circuit 74181 ............................................................................ 7
2.1. Le circuit intégré............................................................................................................. 7
2.2. Structure interne ............................................................................................................ 7
2.3. Table de fonctions .......................................................................................................... 8
2.4. Comment exécuter une série de fonctions ................................................................ 9
3. Architecture d’un système à microprocesseur. ...................................................... 10
3.1. Le microprocesseur. ...................................................................................................... 10
3.2. La mémoire ...................................................................................................................... 10
3.3. Les entrées/sorties ...................................................................................................... 12
3.4. Les bus ............................................................................................................................. 12
4. Architecture interne d’un microprocesseur. ............................................................ 13
4.1. Exemple 6809 MOTOROLA ........................................................................................ 14
4.2. Exemple 8080 INTEL ................................................................................................... 18
4.3. Conception d’un système à p :................................................................................... 19
5. COMPLEMENT ................................................................................................................... 20
5.1. Analyse d’un boitier mémoire ..................................................................................... 20
5.2. Association de plusieurs boîtiers mémoire : ........................................................... 20
5.3. Les interfaces avec les périphériques : ................................................................... 21
5.4. Modes d’échange du p avec la mémoire : ...................................................... 22
Chapitre 2. Généralités sur les microcontrôleurs. ............................................................ 24
1. Qu’est ce qu’un microcontrôleur ? .............................................................................. 24
2. Intérêt des microcontrôleurs ....................................................................................... 25
3. Exemple de familles de microcontrôleurs. ............................................................... 25
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 3
4. L’architecture type Von Neumann : ............................................................................... 26
4.1. Principe de l’architecture Von Neumann .................................................................. 26
4.2. Exemple le 68HC11 ........................................................................................................ 26
4.3. Schéma fonctionnel du 68HC11A8 ............................................................................ 27
4.4. Description du schéma fonctionnel ........................................................................... 29
5. L’architecture type Harvard : Exemple les PICs de microchip ................................. 30
5.1. Principe de l’architecture HAvard ...................................................................... 30
5.2. Exemple : microcontrôleurs famille Microchip .................................................... 30
5.3. Structure interne chez Microchip : cas du PIC 16F84 ...................................... 31
Chapitre 3. LES MICROCONTROLEURS DE LA FAMILLE MICROCHIP ................... 33
1. Présentation de la famille MICROCHIP .................................................................. 33
2. LE PIC16F84A ................................................................................................................... 36
2.1. Aspect externe ......................................................................................................... 37
2.2. Architecture interne ............................................................................................... 37
2.3. La mémoire PROGRAMME (FLASH PROGRAM MEMORY) ........................... 38
2.4. La mémoire RAM ...................................................................................................... 41
2.5. Le jeu d’instruction du PIC16F841 .................................................................... 47
2.6. Les modes d’adressage ........................................................................................... 48
2.7. Les ports d’entrées sorties standards .............................................................. 49
2.8. Le module Timer TIMER0 .................................................................................... 51
2.9. La mémoire de données EEPROM ........................................................................ 52
3. Le PIC 16F877A .................................................................................................................... 53
3.1. Structure interne. ......................................................................................................... 54
3.2. Les fonctionnalités communes avec PIC16F84A .................................................... 57
3.3. Le port parallèle ............................................................................................................ 63
3.4. Le port de communication série SSP ....................................................................... 66
3.5. Le port de communication série asynchrone USART ........................................... 73
3.6. Le TIMER compteur programmable .......................................................................... 87
3.7. Le module capture / compare /PWM ........................................................................ 92
3.8. Le convertisseur analogique numérique .................................................................... 97
3.9. Le comparateur de tension ........................................................................................ 102
4. Le PIC 18FXX ...................................................................................................................... 104
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 4
Chapitre 4. MICROCONTROLEURS DE LA FAMILLE ATMEL.................................... 118
1. Le microcontroleur ATMEL ......................................................................................... 118
2. Le microcontroleur ATMEL ......................................................................................... 119
3. La carte de développement ARDUINO ................................................................... 151
Chapitre 5 : Applications ............................................................................................................... 175
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 5
Chapitre 1. Introduction aux microprocesseurs.
1. Logique câblée et logique programmée :
1.1. Logique câblée :
Un système de logique câblée est conçu à l’aide des circuits intégrés logiques
accomplissant une ou plusieurs fonctions logiques et arithmétiques. La logique
câblée relève du matériel (hardware).
Pour modifier la fonction réalisée par une logique câblée il faut modifier la
structure du câblage.
1.2. Logique programmée :
L’apparition des microprocesseurs sur le marché permet de concevoir tout
autrement un système logique. Le microprocesseur est un circuit intégré issu de
la technologie d'intégration à très grande échelle VLSI (Very-Large-Scale Integration)
et qui est capable de réaliser toutes les fonctions logiques et arithmétiques.
A l’aide des instructions (mots binaires), on configure le microprocesseur pour
réaliser une fonction donnée. Ainsi pour réaliser un ensemble d’opérations, il faut
donner une suite d’instructions appelée programme. Une telle logique est dite
logique programmée et qui correspond au logiciel (software).
La modification de la fonction réalisée par une logique programmée est possible
par la simple modification du logiciel.
Le concepteur d’un système à microprocesseur devra alors bien connaître le
microprocesseur et son jeu d’instructions.
1.3. Intérêt de la logique programmée :
logique câblée :
- Rapidité : temps de réalisation d’une opération correspond au temps de
propagation des signaux et au temps de réponse du système.
- Souplesse : pas de souplesse.
logique programmée :
- Souplesse : il suffit de modifier le programme pour modifier ou faire
évoluer une tâche.
- Facilité de mise au point : utilisation des systèmes de développement
évolués pour la mise au point de programmes. Cas de la programmation
graphique.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 6
1.4. Le microprocesseur : c’est quoi ?
Il s’agit d’un ou plusieurs circuits LSI / VLSI qui réalisent des fonctions de
traitement. Les fonctions utiles sont intégrées sur une seule "puce" de silicium.
Sa composante principale de traitement s’appelle unité arithmétique et logique.
1.5. Unité arithmétique et logique (UAL ou ALU)
L'ALU est un circuit logique (logique câblée) conçu pour effectuer un certain
nombre de fonctions (opérations) logiques et arithmétiques.
A, B , F , R, D registres binaires
A et B représentent des opérandes sous forme binaires.
F un code binaire qui représente la fonction (opération) à effectuer.
R le résultat sous forme binaire de l’opération sélectionnée par F et
effectivement effectuée.
D ensemble de bits dits d’état ou Drapeaux
On peut résumer les opérations effectuées par l'ALU ainsi:
Les opérations d'ordre logique comme la conjonction logique OU, la
disjonction ET, la négation NON, les opérations de comparaison (< , > , = ,
décalage à droite, décalage à gauche …, etc).
Les opérations arithmétiques comme l'addition, la soustraction, la
multiplication, la division, les opérations en point flottant.
Les opérations arithmétiques impliquent généralement deux nombres à l'entrée,
comme par exemple les opérations de comparaison et la plupart des opérations
logiques. On appelle opérandes les deux nombres impliqués dans une opération
parce qu'on agit sur eux à l'aide d'un opérateur. Lorsque l'opérateur agit sur
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 7
deux opérandes, on dit qu'il s'agit d'un opérateur binaire ou dyadique. S'il agit
sur un seul opérande, on dit qu'il est unaire ou monoadique. La négation (NON)
est un exemple d'opérateur monoadique.
2. Exemple d’une UAL : Circuit 74181
2.1. Le circuit intégré.
2.2. Structure interne
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 8
2.3. Table de fonctions
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 9
2.4. Comment exécuter une série de fonctions ?
On note :
INSTRUCTION : un code binaire composé du code fonction et du code d’une
opérande ou de deux opérandes.
PROGRAMME : une suite ordonnée d’instructions.
Puisque L’UAL ne peut exécuter qu’une et une seule instruction à la fois, la
conception d’un circuit programmable nécessite une solution pour les contraintes
suivantes :
Le programme ou la série des codes d’instructions doit être logé (sauvegardé)
quelque part.
Solution : Utiliser une mémoire adressable. Chaque instruction sera logée à une
adresse précise.
L’exécution d’un programme nécessite de pointer l’adresse mémoire du début du
programme (1), d’acheminer le code instruction vers les registres A , B , F. puis
donner l’ordre d’exécution. Et une fois l’instruction est exécutée il faut passer à
l’instruction suivantes.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 10
Solution :
Utiliser un registre dit COMPTEUR PROGRAMME . sa valeur va servir pour
pointer l’adresse de la case mémoire de la prochaine instruction à exécuter
(écriture sur le bus d’adresse. Voir loin).
Installer un mécanisme d’incrémentation du dit compteur de programme par une
horloge et de pouvoir modifier sa valeur selon une condition donnée.
(Branchement)
Utiliser des registres supplémentaires pour faciliter le transfert de données.
D’autres contraintes doivent êtres résolues (voir suite).
3. Architecture d’un système à microprocesseur.
Bus de données (n lignes)
Mémoire
Unité centrale de
traitement
microprocesseur
Entrées/Sorties
Bus de contrôle
Bus d'adresses m lignes
3.1. Le microprocesseur.
C’est l'implantation en un seul boîtier, d'une unité centrale de traitement de
données CPU et d’une unité arithmétique et logique ALU. Son principal travail est
de fournir aux autres éléments, qui lui sont raccordés, la synchronisation
nécessaire et fonctionnelle du traitement des informations qui lui sont
acheminées.
Autrement dit répondre aux entrées pour produire des sorties d'une façon
déterminée par une séquence d'instructions stockées dans une mémoire
(programme).
3.2. La mémoire
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 11
Zone de stockage des programmes exécutables et des données à traiter. Il
existe deux types de mémoires avec des variantes pour chaque type.
3.2.1. Mémoire morte ROM (Read Only Memory)
C'est une mémoire de lecture, elle contient le programme (système
d’exploitation). Son contenu n’est pas perdu si le système n'est plus alimenté.
La ROM contient toujours un programme de chargement initial (moniteur) pour
permettre le fonctionnement du système dès la mise sous tension.
Les variantes des ROM sont :
PROM :(Programmable Read Only Memory) qui ne peut être programmée
qu'une seule fois.
EPROM :peut être effacée et reprogrammée plusieurs fois et peut être lue à
l'infini. Les EPROM possèdent une fenêtre transparente permettant le
passage de rayons ultraviolets nécessaires à l'effacement. La programmation
de l'EPROM nécessite de la positionner physiquement sur un appareil dédié à
cette opération (programmateur).
EEPROM : (Electrical Erasable Programmable Read-Only Memory) peut être
effacée électriquement, sans qu'il soit nécessaire de la retirer du montage
qui l'utilise.
3.2.2. Mémoire vive :RAM (Random Access Memory)
C'est une mémoire de lecture et d’écriture. Le contenu de ce type de mémoire
est perdu lorsque l'on coupe l'alimentation. La mémoire vive (RAM) est soit
chargée avant utilisation soit en cours de l’utilisation.
Les variantes des RAM sont :
RAM statique SRAM
Un bit mémoire d'une RAM statique (SRAM) est composé d'une bascule. Tant
que le circuit est alimenté, l'information est sauvegardée. Chaque bascule
contient 6 transistors.
RAM dynamique : DRAM
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 12
Une RAM dynamique stocke un bit d'information sous la forme d'une charge
électrique. Elle utilise pour cela l'effet capacitif de certaines fonctions des
semi-conducteurs (capacité grille substrat d'un transistor MOS).
Une Cellule mémoire d'une RAM dynamique occupe 4 fois moins de place que
celle d'une RAM statique.
Cependant, la charge stockée dans le condensateur élémentaire fuit (résistance
de fuite) et au bout de quelques millisecondes, elle est presque entièrement
perdue (décharge du condensateur).
Pour préserver cette information, il faut la rafraîchir toutes les 2 ms : cycle de
lecture et d’écriture qui rétablit l'information.
3.3. Les entrées/sorties
Se sont des circuits d’interfaces avec l’environnement du système. Permettent
au microprocesseur de communique avec le monde extérieur et, évidemment,
avec l'utilisateur.
Plusieurs variantes existent :
Interfaces parallèles : échange de plusieurs bits à la fois.
Interfaces séries : l’échange des mots binaires se fait bits par bit.
Interfaces de conversions analogiques numériques ou numériques analogiques.
Interfaces spécialisées tel que la gestion des claviers, les contrôleurs
d’écrans, les interfaces de communication…..
3.4. Les bus
Évidemment, pour que le système fonctionne, il doit y avoir une communication
entre le microprocesseur, la mémoire et les entrées/sorties. Cette
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 13
communication est réalisée à l'aide de trois bus qui regroupent les signaux, selon
leur fonction.
Le Bus est un ensemble de fils électriques (cuivre) où apparaît une information
binaire (0 ou 1) c'est à dire (0V ou 5V) sur chaque fil.
Le bus de données
Il permet de véhiculer des données du microprocesseur vers un composant ou
d'un composant vers le microprocesseur. Il est donc bidirectionnel.
Le nombre de fils de ce bus varie suivant les microprocesseurs (8 / 16 / 32 / 64
bits). Dans la littérature, les différents fils de ce bus sont appelés D0, D1, ...,
Dp-1 si le bus est composé de "p" fils.
Le bus d’adresses
Il s'agit d'un bus unidirectionnel (16 bits pour un 6809), émanant du
microprocesseur et se propageant vers les dispositifs qu'il peut adresser. Le
code binaire présent sur le bus permet d'atteindre (pointer) une case mémoire
ou un registre spécifique.
Si un ordre d’écriture est fourni sur le bus de contrôle, la valeur de la donnée
présente sur le bus de donnée est alors écrite dans la case pointée.
Si un ordre de lecture est fourni sur le bus de contrôle, la valeur de la donnée
présente dans la case pointée est alors écrite sur le bus de donnée, et par
conséquent celle-ci peut être récupérée sur un registre.
Le bus de contrôle
C'est un groupe de lignes issues de ou allant vers le microprocesseur et reliant
ce dernier à d'autres dispositifs. Son rôle est de véhiculer les signaux destinés à
assurer la synchronisation et la commande de l'ensemble du système. Par
exemple, la ligne Reset et R/W (lecture/écriture), les lignes d'interruptions et
l'horloge appartiennent à ce bus.
Quelques signaux particuliers permettent de faire certaines commandes
particulières du p, par exemple une initialisation, une commande d’interruption
de traitement, une commande d’attente momentanée avant une entrée de donnée.
4. Architecture interne d’un microprocesseur.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 14
4.1. Exemple 6809 MOTOROLA
Il est composé de plusieurs registres et d'une unité arithmétique et logique.
Rôle des registres
PC
U
S
Y
X
A
B
CCDP
ALU
D {
16
Registre
d'instruction
Contrôle des
interruptions
Contrôle
des Bus
Horloge
vccvss
A0-A15DO-D7
8
/RESET
/NMI
/FIRQ
/IRQ
/DMAR/W
/HALT
BA
BS
XTAL
EXTAL
MRDY
EQ
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 15
X - Registre d'index
Y - Registre d'index
U - Pointeur de pile de l'utilisateur
S - Pointeur de pile du système
PC - Compteur de programme
A - Accumulateur B - Accumulateur
D
DP
E F H I N Z V C
Registres pointeurs
Compteur de programme
Accumulateurs
Registre de page direct
CC - Registre de condition
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 16
Les registres d'index X et Y (16 bits chacun)
Les registres d'index sont employés avec le mode d’adressage indexé. Ils
servent généralement au traitement d'un bloc mémoire et sont utilisés pour
pointer les données en mémoire. On peut, par exemple, effacer un bloc mémoire
ou déplacer le contenu d'une région mémoire.
Les pointeurs de piles U et S (16 bits chacun)
Ce sont des registres de 16 bits qui servent à pointer l'adresse des données
temporaires dans une région mémoire appelée pile. Le 6809 possède deux
pointeurs de piles; le registre S est le pointeur de pile du système tandis que le
registre U, est le pointeur de pile de l'utilisateur. Le pointeur de pile S est
automatiquement utilisé pendant les appels de sous-routines ou les interruptions
alors que le pointeur U est contrôlé exclusivement par le programmeur.
Le compteur de programme ou PC
Ce registre de 16 bits agit comme un compteur binaire à seize (16) bits avec une
valeur de départ programmable. On lui spécifie la valeur de départ par
l'intermédiaire d'une commande. L'utilisateur peut aussi, à l'intérieur de son
programme, changer le contenu du PC par une instruction de branchement. Le
rôle de ce registre est exclusivement de signaler au microprocesseur à quel
endroit se situe la prochaine instruction à exécuter. Dans la recherche de
l'instruction par le microprocesseur, le contenu du PC est mis sur le bus
d’adresses et au même moment, un signal de lecture est généré permettant ainsi
à la donnée, contenue dans la case mémoire adressée, de se propager à travers le
bus de données vers le microprocesseur pour être traitée. De façon automatique,
le PC s'incrémente de 1 après que le CPU ait reçu la donnée de manière à pointer
la prochaine instruction.
Les accumulateurs
Le MC6809 possède 2 accumulateurs : l'accumulateur A et l'accumulateur B. Ce
sont des registres de 8 bits servant à traiter des données. Toutes les opérations
arithmétiques ou logiques se font par l'intermédiaire des accumulateurs et de
l'ALU. Le MC6809 a la particularité de pouvoir combiner les deux accumulateurs
A et B pour en former un seul de seize bits, appelé accumulateur D, permettant
ainsi la réalisation d’opérations sur 16 bits. Lorsque les accumulateurs A et B
sont jumelés pour obtenir l'accumulateur D, les 8 bits les plus significatifs
proviennent de l'accumulateur A tandis que les 8 bits les moins significatifs, de
l'accumulateur B.
Le registre de page direct
Supposons que la plage mémoire de 64K octets est répartie en 256 pages de 256
octets, ce qui fait un total de 64K. Le registre de page permet d'indiquer quelle
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 17
page parmi les 256 pages est accessible. Ce registre peut être modifié avec une
valeur désirée. Il est implicitement utilisé lorsque le CPU exécute une instruction
dans le mode d'adressage direct. Ce registre est automatiquement remis à zéro
lors d’une réactivation matérielle reset.
Le registre de condition
Ce registre permet de connaître les résultats d'une opération effectuée par
l'ALU. Le bit Z, mis à 1, indique que le résultat donne zéro; le bit N, mis à 1,
indique que le résultat est un nombre négatif, etc. Les bits de ce registre sont
mis à jour après l'exécution de certaines instructions. Le registre de condition
est utilisé pour prendre des décisions et de réaliser des sauts conditionnels dans
un programme.
Le registre de condition
7 6 5 4 3 2 1 0E F H I N Z V C
Position des bits
Carry = bit de reportoVerflow = bit de dépassementZero = bit indiquant un résultat de 0Negatif = résultat < 0Irq = masque de l'interruption IRQHalf carry = bit de demi reportFirq = masque d'interruption FIRQEntire flag = indicateur d'empilement
Nom des drapeaux
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 18
4.2. Exemple 8080 INTEL
AH AL AX
BX BH BL
CX CH CL
DX DH DL
SP
BP
SI
DI
IP
CS
SS
DS
ES
BUS interne
Unité arithmétique et logique
Génération adresses
Tampon
File d'attente
PSW
Unité de commande
BUS externes
Unité d'exécution
Unité d'interface
bus (BIU)
MICROPROCESSEUR 8088
Registres opérationnels
Registres d'adressage
Pointeur d'instruction
Registres de segments
Registre d'état
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 19
4.3. Conception d’un système à p :
Il faut distinguer les deux parties :
étude du matériel :
- le p proprement dit
- la mémoire
- les interfaces d’entrée/sortie
l’étude du logiciel :
Ensemble des programmes nécessaires pour le bon fonctionnement du
système à p ainsi ce qui concerne l’étude et la mise au point de ces
programmes.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 20
5. COMPLEMENT
5.1. Analyse d’un boitier mémoire
Parmi les connexions qui sortent d’un boitier, on trouve :
- Les connexions d’alimentation : Vcc=+5V et Gnd=0V
- Les connexions d’adresses (A0 à An-1) : le nombre de mots mémoire contenus
dans un boitier (capacité) est de 2n.
- Des connexions de données (D0 à Dm-1) : le nombre de ces fils correspond au
nombre de bits de chaque mémoire.
- Des connexions de contrôle, permettant de commander une lecture ou une
écriture d’une donnée de la mémoire.
- Une ou plusieurs entrée de sélection (CS), permettant de sélectionner un
boitier parmi plusieurs.
Pour accéder à ce boitier, il faut :
- Sélectionner le boîtier
- Présenter l’adresse du mot sur les fils d’adresse ;
- Commander l’opération désirée (lecture ou écriture) ;
- L’information pourra alors transiter par l’intermédiaire des fils de données.
5.2. Association de plusieurs boîtiers mémoire :
o Extension de la capacité : Pour augmenter La capacité de la mémoire, on associe plusieurs boîtiers. Le bus
de donnée est commun à tous les boitiers. Certaines lignes du bus d’adresses
sont décodées pour pouvoir sélectionner un seul boitier à la fois.
On utilise en général des décodeurs d’adresses pour différencier les boitiers.
2n mots de m bits
A0 ------- An-1
CS
OE
R/W
D0 ------- Dm-1
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 21
o Longueur des mots : Pour augmenter la longueur des mots (taille du bus de données), on associe
plusieurs boitiers avec le même bus d’adresse en les sélectionnant en même
temps pour chaque opération de lecture où d’écriture. chaque boitier possède ses
propres lignes de données. Ainsi le nombre de lignes qui composent le bus de
données est égal au total des lignes.
Exemple :
o Réaliser une mémoire de 1K x 8 bits avec des boitiers de 1K x 4 bits. o Réaliser une mémoire de 2 KO à partir de boîtiers mémoire de 1KO o Réaliser une mémoire de 4KO, pour un microprocesseur ayant un bus
d’adresse de 16 bits, à l’aide de boîtiers mémoire de 1KO. Cette zone commencera à l’adresse $0000.
5.3. Les interfaces avec les périphériques :
5.3.1. interfaçage : Une interface est un organe nécessaire entre le p et le périphérique et ce pour
assurer une compatibilité :
Au niveau du type de transmission (série ou parallèle) ;
Au niveau du code ;
Au niveau de la vitesse de transmission ;
Au niveau logique (adaptation de tension).
5.3.2. Adressage des périphériques : Pour adresser un périphérique il faut :
Sélectionner le boîtier d’interface (CS) ;
Sélectionner l’un des deux ou trois tampons disponibles par boîtier (port).
Cet adressage se fait bien entendu par le bus d’adresse. Toutefois, deux
possibilités sont offertes :
Entée/sortie par instructions mémoires : Dans ce cas on considère le port comme une position mémoire, il suffit donc de
réserver une adresse mémoire pour chaque port et de commander la lecture d’un
périphérique comme celle d’une mémoire, de même pour l’écriture.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 22
C’est une solution simple que tous les processeurs offrent et qui est souvent
désignée par «Memory Mapped I/O».
Entrée/sortie par instruction E/S : Certains processeurs ont deux autres signaux pour commander une lecture ou
une écriture dans un périphérique. Ceci libère des positions mémoires en un
nombre non négligeables.
Cette structure est assez souvent désignée par «Isolated I/O».
5.4. Modes d’échange du p avec la mémoire :
5.4.1. Échange synchrone : Le p va chercher en mémoire les adresses ou les données, il communique donc
sans arrêt avec la mémoire soit pour une écriture, soit pour une lecture. Le
temps pour une opération de lecture ou d’écriture est connu, fixe et
caractéristique du p, c’est le temps de cycle, qui est également appelé cycle
mémoire. Durant un tel cycle. Cela suppose que la mémoire soit au moins aussi
rapide que le p. Dans ce cas le p gère les échanges avec la mémoire en
synchronisme avec l’horloge du p : c’est le mode synchrone.
5.4.2. Échange asynchrone : Si la mémoire a un temps d’accès supérieur au temps de cycle du p, les échanges
se font alors avec un autre mode, qui comprend à une demande de service du p à
la mémoire.
5.4.3. Modes de commande des transferts E/S : Un transfert E/S peut se faire selon 3 modes :
Mode programmé avec ou sans test d’état :
Les transferts e/s sont prévus à des moments bien précis dans le programme
utilisateur. C’est donc le p qui a l’initiative de commander le transfert et ceci
par la rencontre d’une instruction de transfert : il s’agit du mode programmé.
Une amélioration possible consiste à aller tester l’état libre ou occupé du
périphérique avant d’effectuer le transfert.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 23
Mode interruptible :
Les transferts peuvent également s’effectuer à l’initiative du périphérique et
non plus du p. Ainsi, le périphérique envoi une demande d’interruption au p qui
répond par l’envoi d’un signal pour indiquer qu’il a reçu la demande, termine
l’exécution de l’instruction en cours de traitement et se mettra à la disposition
du périphérique.
Accès direct à la mémoire :
Lorsqu’un périphérique a un nombre important d’informations à échanger, le
transfert par interruption est long. Un mode de transfert E/S particulier est
alors possible : c’est l’accès direct à la mémoire. Le périphérique peut alors
échanger directement avec la mémoire, les bus d’adresses, de données et de
commande étant déconnectés du p par leur mise à l’état haute impédance.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 24
Chapitre 2. Généralités sur les microcontrôleurs.
1. Qu’est ce qu’un microcontrôleur ?
Un microcontrôleur est un circuit intégré qui rassemble sous le même boitier les
éléments essentiels d'un ordinateur à savoir :
Le processeur UAL et l’unité de contrôle.
La mémoire morte pour le programme.
La mémoire vive pour les données.
Les circuits d’interfaces d'entrées-sorties avec les périphériques.
Des circuits de ressources auxiliaires (TIMER, CAN…..).
Les microcontrôleurs se caractérisent par un plus haut degré d'intégration, une
plus faible consommation électrique, un coût réduit par rapport aux systèmes à
microprocesseurs polyvalents utilisés dans les ordinateurs personnels.
Les microcontrôleurs sont fréquemment utilisés dans les systèmes embarqués,
comme les contrôleurs des moteurs automobiles, les télécommandes, les
appareils de bureau, l'électroménager, les jouets, la téléphonie mobile, etc.
Une étude menée en l’an 2004 montre qu’en moyenne, un foyer américain héberge
environ 240 microcontrôleurs.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 25
Des modèles de voitures récentes sont équipés par plusieurs dizaines de
microcontrôleurs.
2. Intérêt des microcontrôleurs
La plus grande partie des systèmes électroniques complexes utilisés de nos jours
sont des systèmes embarqués : téléphones mobiles, horloges, baladeurs,
récepteurs GPS, électroménager, automobile, transport aérien/maritime/fluvial.
Les systèmes embarqués se démarquent des systèmes informatiques
traditionnels selon plusieurs aspects :
Ils sont soumis à des contraintes de taille (intégration), de consommation
électrique (autonomie) et de coût importantes (grande série) ;
Ils sont en général assignés à une tâche bien précise. La taille des
programmes et la quantité de mémoire (vive et morte), dont ils disposent,
sont modestes (face à un micro-ordinateur) ;
Ils doivent communiquer avec des dispositifs d'entrées-sorties (IO) :
boutons, relais, résistances variables, optocoupleurs, moteurs électriques,
LED, circuits intégrés logiques, etc. ;
Ils n'ont parfois aucun dispositif d'interface homme-machine : ni clavier,
ni écran, ni disque, ni imprimante, etc. Par exemple, le contrôleur
d'injection de carburant du moteur d'une automobile est totalement
invisible pour le conducteur.
3. Exemple de familles de microcontrôleurs.
la famille Atmel AT91 ;
la famille Atmel AVR (utilisée par des cartes Arduino) ;
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, 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 des PIC de Microchip ;
la famille des ST6, ST7, STM8, ST10, STR7, STR9, STM32 de
STMicroelectronics ;
la famille PICBASIC de Comfile Technology;
la famille MSP430 de Texas Instruments ;
la famille 8080, dont les héritiers sont le microprocesseur Zilog Z80
(désormais utilisé en tant que contrôleur dans l'embarqué) et le
microcontrôleur Rabbit ;
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 26
4. L’architecture type Von Neumann :
4.1. Principe de l’architecture Von Neumann
Les programmes et les données partagent la même mémoire.
Les instructions et les données transitent sur un même bus de données.
4.2. Exemple le 68HC11
L'appellation MC 68HC11 regroupe une famille de microcontrôleurs fabriqués par
l'industriel américain Motorola. Toutes les versions ont le même cœur de circuit
(68HC11A8) Les différences portent essentiellement sur la quantité de mémoire
et sur le nombre d'entrées/sorties disponibles. Il existe plus de 40 versions
différentes, avec des boîtiers allant de 40 broches pour le 68HC711D3 à 88
broches pour le 68HC711P2.
Le MC 68HC11 est un microcontrôleur 8 bits (pouvant toutefois effectuer des
opérations sur 16 bits) de technologie HCMOS, alimenté sous 5V. Il est
architecturé autour d’une unité centrale CISC (Complete Instruction Set
Computers) de 145 instructions de type 6809. Ses modes de fonctionnement,
ses multiples entrées/sorties et sa facilité d'utilisation l'ont rendu très
populaire dans le monde de l'électronique numérique.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 27
La référence du constructeur donne sous une forme codée des informations sur
la technologie, le boîtier etc. Un aperçu des caractéristiques de cette famille se
trouve présenté sous une forme résumée dans le tableau suivant.
4.3. Schéma fonctionnel du 68HC11A8
Mémoires
programmes
Mémoires
données
Références ROM EEPROM RAM Commentaires
MC68HC11A8 8K 512 256 Base de la famille
MC68HC11A1 - 512 256 A8, avec ROM inhibée
MC68HC11A0 - - 256 A8, avec ROM et EEPROM
inhibées
MC68HC811A8 8K EEPROM 512 256 Emulateur du A8
MC68HC11E9 12K 512 512 A8 avec plus de mémoire
MC68HC11E1 - 512 512 E9 avec ROM inhibée
MC68HC11E0 - - 512 E9 avec ROM et EPROM
inhibées
MC68HC711E9 12K EPROM 512 512 E9 avec EPROM pour petites
séries
MC68HC11D3 4K - 192 Pas de convertisseur A/D
MC68HC711D3 4K EPROM - 192 Pas de convertisseur A/D
MC68HC11F1 - 512 1K Bus non multiplexé et ports en
plus
MC68HC11L6 16K 512 512 A8 avec port en plus
MC68HC11G5 16K - 512 Timer et compteur
supplémentaires
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 28
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 29
4.4. Description du schéma fonctionnel
Autour de L'unité centrale 68HCll proprement dite on trouve :
De la mémoire. Elle se subdivise au maximum en trois blocs distincts dont la
taille et la présence varient selon les références du circuit.
o La RAM ou mémoire vive, de 256 octets au moins est toujours
présente.
o La ROM ou mémoire morte peut être présente ou absente. Lorsqu'elle
est présente, elle peut être du type ROM programmable par masque
(lors de la fabrication du circuit) ou du type EPROM (programmable par
l’utilisateur). Dans ce dernier cas, cette mémoire EPROM peut être non
effaçable (programmable une fois) ou effaçable type EEPROM
(programmable et effaçable électriquement). Dans tous les cas, cette
mémoire destinée au programme ne doit pas être confondue avec la
petite EEPROM visible sur ce synoptique qui est destinée aux données.
Un certain nombre de ports parallèles baptisés port A à port E (F, G suivant
les versions). Ils peuvent être bidirectionnels ou unidirectionnels selon le cas.
Certaines lignes de ces ports sont également partagées avec d'autres
ressources internes et ne sont donc pas nécessairement accessibles
directement en permanence. Ainsi par exemple le port E est commun avec le
convertisseur analogique/digital.
Des entrées / sorties séries sont aussi disponibles et peuvent fonctionner en
mode synchrone ou asynchrone selon que l'on utilise la SPI ou la SCI.
Un module de timers est également disponible. Il comporte plusieurs timers
très évolués ainsi qu'un accumulateur d'impulsions.
Une horloge temps réel et un "chien de garde" ou COP (pour Computer
Operating Properly) destiné à surveiller le fonctionnement du
microcontrôleur.
Un convertisseur analogique/digital à huit entrées complète cette panoplie de
ressources internes déjà bien riche.
Toute la logique nécessaire, tant au traitement des interruptions qu'à la
génération de l'horloge est évidemment intégrée dans le 68HCll dont la mise en
œuvre matérielle est ainsi fort simple puisque, dans de nombreux cas, un quartz
(généralement 8Mhz) et une cellule R-C pour le Reset sont les seuls composants
externes indispensables pour le pilotage de cette logique.
Remarquez aussi en partie basse du schéma fonctionnel que le circuit peut
fonctionner selon deux modes : un mode "single chip" ou circuit seul et un mode
"expanded" ou étendu qui lui permet alors d'adresser des circuits externes
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 30
comme n'importe quel microprocesseur ordinaire. Dans ce dernier cas, les lignes
des ports B et C se transforment en lignes d'adresses et de données.
5. L’architecture type Harvard : Exemple les PICs de microchip
5.1. Principe de l’architecture HAvard
L’architecture de type Harvard est une conception qui sépare physiquement la
mémoire de données et la mémoire programme. L’accès au deux mémoires
s’effectue via deux bus distincts.
Les instructions et les données sont clairement différenciées et sont véhiculées
sur des bus différents.
La structure Harvard permet ainsi de faire fonctionner des programmes plus
rapidement par comparaison avec les microcontrôleurs qui utilisent une
architecture interne dite de Von Neumann.
5.2. Exemple : microcontrôleurs famille Microchip
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 31
Microchip propose des microcontrôleurs 8 bits, 16 bitset 32 bits. Certaines
versions existent en ROM d'autres en EEPROM, ou encore en mémoire Flash,
mais toutes les familles existent en versions OTP.
Microchip a été la première société à utiliser la technologie RISC (Reduced
Instruction Set Computer) ou circuit à jeu d'instructions réduit (35
instructions) et une structure dite Harvard dans leurs microcontrôleurs. Ces
innovations ont permis de grandes avancées.
L'utilisation d'une architecture RISC contribue à accroître la vitesse
d'exécution des programmes par opposition à l'architecture traditionnelle dite
CISC (Complex Instruction Set Computer).
Les principales caractéristiques du RISC sont les suivantes :
Un petit nombre d'instructions élémentaires.
Exécution d'une instruction en un cycle d'horloge instruction (qui peut
être différente de l'horloge processeur).
Une structure de pipe line qui permet au circuit d'exécuter une
instruction et de charger la suivante en même temps.
Voici les principales différences entre les familles de microcontrôleurs à unité
centrale 8 bits :
- PIC12CXXX : boîtier 8 broches et jeu d'instruction sur 12 ou 14 bits
- PIC16C5X : boîtier de 18, 20 ou 28 broches, jeu d'instruction sur 12 bits
- PIC16CXXX : convertisseur analogique/numérique intégré d'une capacité
de 12 bits, boîtier de 18 à 68 broches, jeu d'instruction sur 14 bits
- PIC17CXXX : jeu étendu d'instructions sur 16 bits
Les versions à unité centrale 16 bits sont référencés PIC18CXXX. Elles
présentent un jeu de 68 instructions toutes exécutables en un cycle d'horloge.
5.3. Structure interne chez Microchip : cas du PIC 16F84
Cette structure sera détaillée par la suite de ce cours.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 32
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 33
Chapitre 3. LES MICROCONTROLEURS DE LA FAMILLE MICROCHIP
Présentation de la famille MICROCHIP
PIC10 8 références
PIC12 20 références
PIC16 153 références
PIC18 220 références
PIC24F 132 références
PIC24H et PIC24E 65 références
dsPIC30 24 références
dsPIC33F et dsPIC33E 195 références
La variété des références mises sur le marché est due aux domaines
d’application.
Brochage 6 à 100 pins
Capacité mémoire 0,5 k à 256K
Type de mémoire FLASH OTP ROM SANS ROM
PIC10
PIC16
PIC18
PIC24F
PIC24H
dsPIC30
dsPIC32
PIC32
PIC12 Performance
Fonctionnalités
8 bits
16 bits
32 bits
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 34
Type d’interfaces intégrés : (interfaces de communication USART , SSI ,
USB , bus CAN, Ethernet,.. ), CAN , PWM , gestion LCD, commande
moteurs…..
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 35
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 36
LE PIC16F84A
Voir le fichier de référence Microchip : \PIC16F84A Microchip
Voir le fichier: \PIC16F84A résume français (Pour un résumé en Français)
Voir le fichier : \PIC16F84A BIGONOFF part1-R6 (document complet en
français)
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 37
1. Aspect externe
2. Architecture interne
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 38
3. La mémoire PROGRAMME (FLASH PROGRAM MEMORY)
La mémoire programme offre 1024 cases mémoires de 14b bits chacune.
(1kx14bits). Chaque case possède sa propre adresse. Les adresses sont souvent
exprimées en hexadécimale et vont de Hx00 à Hx3FF. Le contenu de chaque
case représente une instruction.
Le registre PC « program counter» ou compteur programme permet de générer
l’adresse de la prochaine instruction à exécuter.
Le contenu de la case pointée par le compteur programme est placé dans le
registre d’instruction avant qu’il soit acheminé vers l’UAL pour l’exécution.
La valeur du compteur programme est automatiquement incrémentée après
chaque exécution d’une instruction ou bien modifié par l’instruction elle-même.
Le vecteur reset hx0000
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 39
A la mise sous tension ou à la demande d’une initialisation du microcontrôleur, la
valeur hx0000 est écrite dans le conteur programme. La case d’adresse hx000
s’appelle vecteur RESET. Le programmeur doit y écrire la première instruction
de son programme.
Le vecteur d’interruption hx0004
Une interruption est une suspension de la tache en cours (tache principale) suite
à un événement dans le but d’exécuter une tache secondaire liée à cet
événement. La tâche suspendue est reprise une fois la tache secondaire est
exécutée.
Exemple : lorsqu’on tape une touche d’un clavier, le microprocesseur suspend la
tache en cours pour scruter le clavier et décoder la touche qui a été tapée.
Le PIC16F84A possède 5 sources d’interruptions. (voir loin), une interruption
peut être soit autorisée soit masquée.
Lorsqu’une interruption autorisée est valide on a :
o Un drapeau relatif à la source d’interruption qui est mis à 1.
o Le contenu du compteur programme PC est placé dans la pile.
o La valeur hx0004 est placée dans le PC.
o Le microcontrôleur exécute l’instruction à l’adresse hxOOO4 puis poursuit
l’exécution du programme selon la logique programmée (programme
d’interruption).
o A la rencontre de l’instruction RETFI, la valeur placée dans la pile est
restituée dans le PC. Ceci va permettre la poursuite de l’exécution de la
tache principale là ou elle a été suspendue.
L’utilisateur doit sauver l’état du registre d’état avant d’exécuter le programme
d’interruption et de le restituer avant la reprise de la tache qui a été suspendue.
La pile
Dans le cas général des microprocesseurs, une pile est un espace mémoire
destiné à sauvegarder/ restituer l’état des registres. Une pile est soit de type
LIFO (Last IN first OUT) soit de type FIFO ( first IN first OUT)
La pile du PIC16F84A est de type LIFO, elle possède 8 niveaux, donc un total de
8 programmes imbriqués à ne pas dépasser.
L’oscillateur.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 40
L’horloge est nécessaire au fonctionnement du PIC16F84A. Elle peut être
externe ou interne avec 4 modes d’oscillateurs.
Externe :
Interne avec résonateur céramique ou cristal (mode HS ; XT ; LP)
Interne avec circuit (mode RC)
Cycle d’exécution d’une instruction
Un cycle instruction Tcy est décomposé en 4 cycles ( 4 étapes Q1 à Q4) du
signal fourni par l’oscillateur.
Etape Q1 : décodage de l’instruction (ou NOP).
Etape Q2 : lecture (ou NOP).
Etape Q3 : calcul (ou NOP).
Etape Q4 : écriture (ou NOP).
Donc fcy = fosc /4
Circuit de RESET à la mise sous tension
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 41
Voir la documentation du microchip pour les options de RESET.
4. La mémoire RAM
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 42
On constate que cette mémoire est séparée en deux pages (Bank 0 et Bank ). De
plus, on remarque que tant pour la page 0 que pour la page 1, les premiers octets
sont réservés ( SFR pour Special File Register ). Ces emplacements sont en
effet utilisés par le microcontrôleur pour configurer l’ensemble de son
fonctionnement. On les appelle « registres spécifiques » et nous verrons au
chapitre suivant leurs rôles.
Le bus d’adresse qui permet d’adresser la RAM est composé de 7 fils ce qui veut
dire qu’il est capable d’adresser 128 emplacements différents. Or, chaque page
de la RAM est composée de 128 octets, le bus d’adresse ne peut pas donc
accéder aux deux pages, c’est pourquoi on utilise une astuce de programmation
qui permet de diriger le bus d’adresse soit sur la page 0, soit sur la page 1. Cela
est réalisé grâce à un bit d’un registre spécifique (le bit RP0 du registre
STATUS ) dont nous verrons le fonctionnement plus loin.
.4.1. Les registre à usage générale :GPR
La RAM de données proprement dite se réduit donc à la zone notée GPR
(Registre à usage générale ) qui s’étend de l’adresse 0Ch ( 12 en décimale )
jusqu’à 4Fh ( 79 en décimale ) soit au total 68 registres en page 0 et autant en
page 1, mais on constate que les données écrites en page 1 sont redirigées en
page 0 cela signifie qu’au final l’utilisateur dispose uniquement de 68 registres
(donc 68 octets de mémoire vive) dans lesquels il peut écrire et lire à volonté en
sachant qu’à la mise hors tension, ces données seront perdues.
.4.2. Les registres spéciaux SFR
Les registres spécifiques permettent de configurer le PIC, nous allons les
détailler un à un et voir comment on peut accéder à la page 0 ou la page 1
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 43
adresse 00 et 80 ,INDF .
Cette adresse ne contient pas de registre physique, elle sert pour l’adressage indirect.
adresse 01 , TMR0 .
Contenu du Timer (8 bits). Il peut être incrémenté par l’horloge (fosc/4) c'est à dire
tous les 4 coups d'horloge ou par un signal d’horloge présent sur la broche RA4.
adresse 02 et 82 , PCL .
8 bits de poids faibles du compteur programme PC. Les 5 bits de poids forts (13-8)
sont dans PCLATH.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 44
adresse 03 et 83 , STATUS Registre d’état .
Les cinq bits de poids faible de ce registre sont en lecture seule, ce sont des témoins
(drapeaux ou flag en anglais) caractérisant le résultat de l’opération réalisée par l’UAL.
Le bit RP0 est lui en lecture /écriture et c’est lui qui permet de sélectionner la page
dans la mémoire RAM .
Si RP0=0 : on accède à la page 0 et si RP0=1 on accède à la page 1 .
Au reset, seul le bit RP0 de sélection de page est fixé ( RP0=0 : page 0 )
TO/ (Time Out) : débordement du timer WDT
PD/ : (Power Down) caractérise l’activité du chien de garde WDT
Z (zéro) résultat nul pour une opération arithmétique et logique.
DC (digit carry) retenue sur un quartet ( 4 bits )
C (carry) retenue sur un octet ( 8 bits ).
adresse 04 et 84 , FSR .
Registre de sélection de registre : contient l’adresse d’un autre registre. Permet
l’adressage indirect.
adresse 05 , PORTA .
Ce registre contient l’état des lignes du port A ( voir chapitre sur les ports ).
adresse 06 , PORTB .
Ce registre contient l’état des lignes du port B ( voir chapitre sur les ports ).
adresse 08 , EEDATA .
Contient un octet lu ou à écrire dans l’EEPROM de données.
RP0
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 45
adresse 09 , EEADR .
Contient l’adresse de la donnée lue ou écrite dans l’EEPROM de données.
adresse 0A et 8A, PCLATH .
Voir l’adresse 02 PCL.
adresse 0B et 8B , INTCON .
Sert pour configurer et contrôler les 4 interruptions
Masques des interruptions :
GIE : (Global Interrupt Enable) : masque global d’interruption.
EEIE : (EEProm Interrupt Enable) autorise l'interruption venant de l'EEPROM.
T0IE : (Timer 0 Interrupt Enable) autorise l'interruption provoquée par le
débordement du TIMER0
INTE: ( Interrupt Enable) autorise l’interruption provoquée par un changement d'état
sur broche RB0/INT
RBIE: (RB Interrupt Enable) autorise les interruptions provoquées par un changement
d'états sur l'une des broches RB4 à RB7.
Si ces bits sont mis à 1 , ils autorisent les interruptions pour lesquels ils sont dédiés .
Drapeaux des interruptions :
T0IF : (Timer 0 Interrupt Flag) débordement du timer
INTF ( Interrupt Flag) interruption provoquée par la broche RB0/INT
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 46
RBIF ( RB Interrupt Flag) interruption provoquée par les broches RB4-RB7.
adresse 81 , OPTION
8 bits (tous à 1 au RESET) affectant le comportement des E/S et du timer .
RBPU/ (RB Pull Up) Résistances de tirage à Vdd des entrées du port B ( voir le détail du
fonctionnement au chapitre port ).Si RBPU/=0 les résistances de pull-up sont
connectées en interne sur l'ensemble du port B.
INTEDG (Interrupt Edge) sélection du front actif de l’interruption sur RB0/INT ( 1
pour front montant et 0 pour front descendant ).
TOCS ou RTS (Real Timer Source) sélection du signal alimentant le timer 0 : 0 pour
horloge interne, 1 pour RA4/T0CLK
TOSE ou RTE (Real Timer Edge) sélection du front actif du signal timer ( 0 pour front
montant).
PSA (Prescaler assignment) 0 pour Timer 0 et 1 pour chien de garde WDT.
PS2..0 (Prescaler 210 ) sélection de la valeur du diviseur de fréquence pour les timers.
adresse 85 , TRISA . Direction des données pour le port A : 0 pour sortie et 1 pour
entrée ( voir chapitre sur les ports ).
adresse 86 , TRISB . Direction des données pour le port B : 0 pour sortie et 1 pour
entrée ( voir chapitre sur les ports ).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 47
5. Le jeu d’instruction du PIC16F841
Le PIC16F84A dispose de 35 instructions. Chaque instruction est codée sur 14
bits. Afin de comprendre la fonction de chaque instruction, la notation adoptée
pour les données et les adresses manipulées par les instructions est la suivante :
f représente un registre (0x00 à 0x7F)
b représente un numéro de bit en sachant que 0 correspond toujours au bit
de poids faible et 7 au bit le plus à droite dans le registre
k représente une donnée aussi appelé littéral (constante codée sur 8 bits)
w registre de travail
x non significatif. 0 ou 1
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 48
.5.1. Instructions sur bits
Se sont des instructions qui manipulent directement des bits d’un registre ou
d’une case mémoire.
.5.2. Instructions sur constantes
.5.3. Instructions sur variables
Se sont des instructions qui manipulent des données sous forme d’octets.
.5.4. Sauts et appels de sous programmes.
Se sont des instructions qui provoquent la rupture dans la séquence du
déroulement du programme. La valeur K indique la destination du saut.
6. Les modes d’adressage
Immédiat : la valeur de l’opérande est fournie directement, elle fait
partie de code de l’instruction.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 49
Direct : l’instruction utilise une adresse de la ram (SFR ou GPR) qui
contient de la donnée à traiter.
Indirect : l’opérande de l’instruction représente l’adresse de l’adresse
mémoire qui contient la donnée à traiter. Le PIC16F84A utilise les
registres FSR et INDF pour l’adressage indirect. (voir TD)
7. Les ports d’entrées sorties standards
Le PIC16F84A possède deux ports d’entrées / sorties.
PORTA avec 5 lignes notées RA0 à RA4.
PORTB avec 8 lignes notées RB0 à RB7.
Les registres TRISA et TRISB permettent de configurer le sens des broches.
Chaque ligne peut être configurée soit en entrée soit en sortie indépendamment
des autres broches.
Structure interne des broches RA0 à RA3
Structure interne de la broche RA4
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 50
La broche RA4 à la particularité d’être de type « drain ouvert ». Une résistance
du rappel doit être branchée entre la broche et VDD en cas d’utilisation en
sortie.
Structure interne des broches RB0 à RB3
Une résistance PULL-UP peut être activée ou désactivée. (voir TP gestion des
boutons poussoirs).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 51
La broche RB0 peut être configurée pour déclencher une interruption.
Structure interne des broches RB4 à RB7
Une résistance PULL-UP peut être activée ou désactivée. (idem que RB0 à RB3).
Un changement d’état sur une des 4 broches peut déclencher une interruption.
(Voir TD/TP clavier).
8. Le module TIMER0
C’est un compteur 8 bits :
Il s’incrémente soit par une horloge interne (fosc/4) soit par une horloge
externe appliquée sur la broche RA4 du PORTA. Le choix se fait par le bit TOSC
du registre OPTION_REG.
Dans le cas de la source externe on peut choisir le sens du front qui fait
incrémenter le compteur.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 52
Un pré diviseur ( prescaler) peut être inséré avant le timer0. La valeur de la pré
division est configurée par les bits PS2…PS0 du registre OPTION_REG.
Lorsque le compteur déborde (passage de la valeur de 0xFF à 0x00) le bit
drapeau TOIF est mis à 1 et une interruption est déclenchée s’elle est
autorisée. (Voir TP)
9. La mémoire de données EEPROM
L’accès à cette mémoire se fait à l’aide des registres suivant.
EEADR contient l’adresse de la case à lire ou à y écrire.
EEDATA contient la donnée lue ou écrite.
EECON1 contrôle de l’écriture ou de lecture.
EECON2 (non implémenté physiquement)
L’écriture dans une case de l’EEPROM n’étant pas rapide, le PIC16F84A peut
être configurée pour déclencher une interruption à la fin de l’écriture dans une
case mémoire.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 53
Le PIC 16F87XA
Voir le fichier de référence Microchip : \PIC16F87XA microchip
Pour les résumés en français : voir l’un des fichiers :
\PIC16F876-877 resume1 français
\PIC16F876-877 resume2 français
\PIC16F87X resume3 français
Pour une documentation complète en française : voir le dossier de BIGONOFF
\BIGONOFF_PIC16F87XA
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 54
1. Aspect externe.
Il existent sous d’autres formes de boitiers PLCC , TQFP, QFN ,PDIP…..
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 55
2. caractéristiques
Ces types de microcontrôleurs utilisent une UAL identique à celle du PIC16F84A
avec un jeu d’instructions de 35 instructions, mais avec plus de fonctionnalités.
Les principales caractéristiques sont :
une mémoire programme de type EEPROM flash jusqu’à 8K mots de 14 bits.
Une RAM de données jusqu’à 368 octets.
Une mémoire EEPROM jusqu’à 256 octets.
Ports d’entrées sorties A, B , C , D et E.
Convertisseur analogique numérique 10 bits jusqu’à 8 canaux.
Port série USART avec mode asynchrone (RS232) ou synchrone.
Port série synchrone SSP supportant la norme I2C.
Trois TIMERS programmables.
Deux modules de comparaison et de capture CCP1 et CCP2.
Un chien de garde.
Jusqu’à 15 sources d’interruptions.
Programmation par mode ICSP (in circuit serial programming).
Possibilité d’accéder à la mémoire programme par le programme.
Jeux d’instructions de 35 instructions.
Horloge jusqu’à 20 Mhz.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 56
3. Structure interne.
PIC16F873A / 876A
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 57
PIC16F877A / 874A
Seul le PIC16F877A sera traité par la suite du cours.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 58
4. Organisation de la mémoire programme du PIC16F877A
La cartographie de la mémoire programme est linéaire, les adresses vont de
0000h à 1FFFh (8K mots de 14 bits), avec un seul vecteur d’interruption 0004h
et une pile de 8 niveaux.
Le jeu d’instruction est le même que celui étudié pour le PIC16F84A.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 59
5. Organisation de la mémoire RAM
La sélection d’une zone Bank se fait par les bits RP1 :RP0 du registre STATUS
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 60
6. Les registres Spéciaux
Se sont des registres utilisés par l’unité centrale et les modules périphériques
pour le contrôle des opérations. Ils sont implantés dans la RAM statique.
Pour les détails de chaque registre voir la documentation de référence de
microchip.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 61
Les registres spéciaux (suite)
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 62
7. Les ports du PIC16F877A
Le PIC16F877A possède 5 ports :
PPORTA : 6 broches RA0 à RA5
PPORTB : 8 broches RB0 à RB7
PPORTC : 8 broches RC0 à RC7
PPORTD : 8 broches RD0 à RD7
PPORTE : 3 broches RE0 à RE2
La figure ci-dessous montre que certaines broches possèdent des fonctions
multiples.
Le port A
Les 5 broches peuvent être configurées en E/S simples ou bien servir comme :
Entrée du TIMER0 (RA4).
Entrées analogiques (RA0, RA1, RA2,RA3, RA5).
Entrées de références pour le convertisseur analogique numérique
(RA2,RA3).
Sorties des comparateurs RA4/C1OUT et RA5/C2OUT
Il faut noter que RA4 est à drain ouvert.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 63
Le Port B
Dispose de 8 broches utilisées en entrées sorties simples ou servir comme suit :
RB3/PGM, RB6/PGC , RB7/PGD programmation ICS/ICD.
RB0 entrée d’interruption matérielle.
RB4 à RB7 entrées d’interruption sur changement d’état.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 64
Le port C
Possède 8 broches d’entrées sorties simples qu’il partage avec :
Le TIMER1
La liaison SPI/I2C
L’USART
Le module de capture.
Le port D et E
Les deux ports utilisent la même structure.
Le port parallèle D est un port de communication parallèle, il est complètement
piloté par le port E :
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 65
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 66
8. Le port de communication série MSSP (Master Synchronous Serial
Port)
Permet d’échanger les données en mode série synchrone avec d’autres
équipements comme les mémoires EEPROM séries, les convertisseurs A/N série,
les capteurs, l’horloge en temps réel, les modules d’affichage….
Il peut fonctionner en deux modes :
Mode SPI (Serial Peripheral Interface)
Mode I2C (Inter Integrated circuit).
.8.1. Mode SPI
Le port de communication de type SPI utilise:
Une entrée de données série (SDI Serial Data Input) : broche RC4
Une sortie de données série (SDO Serial Data Output) : broche RC5
Une entrée sortie horloge (SCK Serial ClocK) : broche RC3
Une entrée optionnelle de sélection du microcontrôleur en cas de plusieurs
esclaves (SS Slave Select) : broche RA5.
On donne ci-dessous l’exemple de la réception de l’octet 1001 1010. La
synchronisation et les niveaux varient d’un circuit à l’autre.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 67
On donne ci-dessous le schéma bloc du module MSSP du PIC16F877A
L’octet à transmettre est écrit dans le registre SSPBUF, cette donnée est
recopiée automatiquement dans le registre SSPSR (registre de sérialisation non
accessible au programmeur) dès que celui-ci est disponible.
La sérialisation commence par la sortie du bit 7 sur la ligne SDO et le décalage
de tous les bits. Le bit 0 peut alors recevoir un bit depuis la ligne SDI en même
temps que la sortie du bit7. Le mécanisme se poursuit jusqu’à ce que les 8 bits de
l’octet soient transmis et un octet est alors reçu dans le registre SSPSR, puis
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 68
celui-ci est copié automatiquement dans le registre SSPBUF accessible au
programmeur.
Il est évident que du coté récepteur c’est le même processus qui se déroule.
Remarque :
Toute émission s’accompagne automatiquement d’une réception, et
réciproquement toute réception nécessite une émission. L’octet non
nécessaire (reçu ou émis) est sans signification est appelé « dummy ».
La broche SDO conserve l’état qu’elle avait lors de la dernière émission.
Mode SPI Master : C’est le maitre qui envoie le signal d’horloge et c’est lui
qui décide de l’instant de la transmission.
Si l’on désire un transfert unidirectionnel mais en utilisant une seule ligne,
il faut alors connecter SDI à SDO et de placer SDO en haute impédance
lors de la réception d’un octet pour ne pas influencer la ligne lors de la
réception.
En cas d’un maitre connecté à plusieurs esclaves, il faut procéder à la
sélection de l’esclave. Ceci est possible par l’utilisation de simples broches
configurées en sorties.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 69
Registres associés au module SPI
SSPSAT en mode SPI master.
b7 : SMP (0= milieu 1 =fin). Ce bit détermine à quel moment du cycle
d’horloge il faut effectuer la capture du bit présent sur la ligne SDI.
b6 :CKE clock edge select (0 repos vers actif, 1 actif vers repos). Determine
la transition de l’horloge qui place le bit sur la ligne SDO.
b0 :Buffer Full ( 0= registre buffer vide, 1= registre buffer plein sgnifi
octet reçu). Ce bit est à lecture seule , pour l’effacer il faut lire le registre
SSPBUF.
SSPCON1 en mode SPI master.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 70
b5 :SSPEN SSP Enable ( 1= module SSP en service : broches SDI SDO
SCK déconnectées du port C cependant il faut configurer la direction des
broches par le registre TRISC).
b4 :CKP Clock Polarty (donne le niveau de l’état de repos : 0= niveau
bas 1= niveau haut).
b2 :SSPM3 SSP mode bit 3
b2 :SSPM3 SSP mode bit 2
b1 :SSPM3 SSP mode bit 1
b0 :SSPM3 SSP mode bit 0
Les bits drapeaux :
Bit SSPIF du registre PIRB est mis à 1 dès que l’échange d’informations
est terminé. Il est aussi possible de configurer une interruption dans ce cas.
Bit BF du registre SSPSAT est mis à 1 dès qu’une donnée est reçue est
inscrite dans le registre SSPBUF. Ce bit est effacé par lecture de SSPSAT.
Mode SLAVE
Registre SSPSTAT en mode SPI Slave.
b7 doit être positionné à 1 (lecture en milieu du cycle).
b6 CKE CKE clock edge select (0 repos vers actif, 1 actif vers repos).
b0 drapeau buffer plein.
Si le registre SSPBUF est plein et n’est pas lu, la prochaine réception d’un octet
donne une erreur « overflow » l’octet ne sera pas alors transféré dans SSPBUF.
Il sera donc perdu. En mode Slave il faut lire chaque octet reçu pour ne pas
arrêter la réception.
Registre SSPCON en mode SPI Slave.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 71
b7 WCOL Write COlision detect bit ( indique qu’il ya écriture dans le
registre SSPBUF alors qu’un octet est en cours de transmission)
b6 SSPOV SSP receive overflow indicator bit (1= perte de l’octet recu)
b5 SSPEN SSPEnable (1 module SSP en service)
b4 CKP Clock polarity select bit (donne le niveau de l’état de repos).
b3 SSPM3 SSPmode bit 3
b2 SSPM2 SSPmode bit 2
b1 SSPM1 SSPmode bit 1
b0 SSPM0 SSPmode bit 0
Les bits SSPmode donnent le mode de fonctionnement. Ici plus question de
vitesse de transmission puisque celle-ci est déterminée par le maitre.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 72
Synthèse :
Initialisation du mode SPI Master.
On initialise le bit SMP (moment de capture de la donnée : milieu ou fin du cycle). On in initialise le bit CKP en fonction de l’état de repos de ligne d’horloge (polarité). On sélectionne le bit CKE selon le front d’horloge souhaité pour l’écriture d’un bit sur
SDO.
On choisit la vitesse de l’horloge suivant SSPMX
On met le module en service par le bit SSPEN.
On configure SCK et SDO en sortie et SDI en entrée (registre TRISC)
Le démarrage de l’émission et la réception simultanée commence par l’écriture d’un octet
dans le registre SSPBUF.
La fin de l’émission (et donc de la réception) est signalée par le bit drapeau BF.
Initialisation du mode SPI SALVE.
On in initialise le bit CKP en fonction de l’état de repos de ligne d’horloge (polarité). On sélectionne le bit CKE selon le front d’horloge souhaité pour l’écriture par le maitre
d’un bit sur SDI.
On choisi la misse en service ou non de SS via SSPMX.
On met le module en service par le bit SSPEN.
On configure SDO en sortie et SDI et SCK en entrée (registre TRISC)
On configure SS (RA) en entrée via TRISA et ADCON1.
Le démarrage de transfert commence lors de la première transition de SCK (si CKE=0) ou
lors du front descendant de SS (si CKE=1).
La fin du transfert est signalée par le bit BF ou en gérant le bit drapeau SSPIF si
l’interruption est autorisée.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 73
.8.2. Mode I2C (Inter Integrated Circuit)
L bus I2C permet de relier plusieurs équipements et de leur offrir le pouvoir
d’échanger des informations en mode série synchrone. Ses principales
caractéristiques sont :
Communication bidirectionnelle sur 2 lignes (SDA et SCL) + masse.
Une adresse unique pour chaque équipement.
Bus multi-maitre avec détection des collisions et arbitrage.
Echange de données sur 8 bits à 100 Kbps, 400 Kbps et 3.2Mbps.
Filtrage intégré : réjection des parasites.
Avant de traiter la technique de communication sur le bus I2C, il est important
de montrer le principe des sorties à collecteur ouvert (ou drain ouvert)
permettant de relier plusieurs sorties qui communiquent sur une même ligne.
La figure ci-dessous montre l’exemple de 3 équipements reliés sur le même bus.
3 fils sont nécessaires pour la communication.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 74
SDA signal de données.
SCL signal d’horloge.
GND ou VSS
Pendant une communication, l’un des circuits est un maitre. C’est lui qui gère
l’horloge et contrôle les séquences de la transmission. L’autre est l’esclave, il
subit l’horloge du maitre mais il peut émettre ou recevoir des données sur la
ligne SDA.
Chaque esclave possède une adresse.
Le maitre initie la communication par l’envoi de l’adresse de l’esclave avec qui il
veut communiquer, celui-ci reconnait son adresse et répond, les autres restent
muets.
Pour prendre le contrôle du bus, il faut que celui-ci soit libre (SDA et SCL= 1).
Lorsqu’un circuit prend le contrôle du bus il en devient le maitre. C’est lui qui
gère le signal d’horloge et c’est lui qui initie l’échange des données.
Voici ci-dessous comment s’effectue l’échange.
START condition
SDA passe à 0 tandis que SCL est encore à 1
Transmission d’un bit
On place le bit à transmettre sur la ligne SDA, ensuite on envoie une impulsion
d’horloge sur la ligne SCK (SCL). C’est cette impulsion qui informe le slave qu’il
doit lire la donnée sur SDA.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 75
Stop condition
A la fin d’une séquence d’échange, le master génère un stop condition après
lequel le bus devient libre. Pour cela à partir de l’état SDA=0 et SCK=0 le master
commence par placer SCL à 1 et place ensuite SDA à 1.
NB :
Une séquence de transmission peut contenir plusieurs Start conditions avant de
rencontrer un stop condition synonyme de fin de transmission.
L’acknowledge
C’est un accusé de réception. Il est placé sur la ligne SDA par le circuit qui
recroit juste après la réception du 8ème bit. C’est l’émetteur qui le lit.
En conclusion : voici la trame d’échange d’un octet. Ceci nécessite 9 bits.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 76
Puisque on peut brancher plusieurs composants sur le bus I2C, il est utile de
définir une adresse pour chacun. Le master démarre une séquence d’échange en
envoyant les bits qui composent l’adresse (7bit , le standard supporte 10bits)
suivis d’un bit R/W qui indique au slave le mode émission ou réception.
Adresses
Plusieurs composants peuvent être connectés sur le même bus, l’adressage du
destinataire du message est réalisé par logiciel. Seul l’esclave ayant l’adresse
celle envoyée par le maitre va répondre.
La première norme I2C limitait la taille des dresses à 7 bits. Actuellement on
peut étendre l’adresse sur 10 bits.
Certaines adresses sont réservées pour des commandes spécifiques.
B’0000 0000’ adressage simultané de tous les périphériques.
B’0000 0001’ accès aux composants CBUS (ancêtre de I2C).
B’0000 0010’ réservée pour d’autres systèmes de bus.
B’0000 0011’ réservée pour utilisation futur.
B’0000 01xx’ pour les composants de haute vitesse.
B’1111 11xx’ réservée pour utilisation future.
B’1111 1xy0’ permet de préciser une adresse sur 10 bits. les bits xy vont
représenter les deux bits du poids fort associés avec un octet reçu pour
former 10 bits.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 77
Structure d’une Trame
Une transmission commence par un Start Condition (S).
Ensuite l’adresse sur 7 bits complétée par un bit R/W ou 10 bits (R /W doit
être 0 dans ce cas).
chaque octet envoyé est accompagné d’un accusé de réception (ACK).
Trame avec une adresse sur 7 bits.
Trame avec une adresse sur 10 bits.
Chronogrammes dans le cas de 10 bits.
Le bit R/W est 0 (écriture) puisque l’esclave doit lire le deuxième octet.
Pour lire, le maitre doit envoyer un « repeat start » condition puis envoyer le
premier octet d’adresse mais avec R/W=1.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 78
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 79
En résumé :
Écriture avec adresse sur 7 bits
le maitre envoie le start condition S.
le maitre envoie l’octet de l’adresse avec R/W à0 (écriture)
l’esclave réponde par ACK.
Le maitre envoie le premier octet de la donnée.
L’esclave répond par ACK
…..
Le maitre envoi le dernier octet de la donnée.
L’esclave répond par ACK ou par NOACK.
Le maitre envoie le stop condition.
Remarque : l’esclave peut envoyer un NOACK pour signaler d’arrêter l’envoi des données (mémoire
pleine ou erreurs.).
Lecture
Le maitre envoie le start condition.
Le maitre envoie le premier octet de l’adresse.
L’esclave réponde par ACK.
L’esclave envoie le premier octet de la donnée.
Le maitre répond par ACK.
….
L’esclave envoi le Nème octet de la donnée.
Le maitre envoie NOACK pour signaler la fin du transfert. ( noter que c’est le maitre qui
décide de maitre fin à la réception)
Le maitre envie un stop condition.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 80
Le module MSSP en mode I2C du PIC16F877A
Horloge SCL broche RC3/SCK/SCL à configurer en entrée.
Donnée SDA broche RC4/SDI/SDA à configurer en entrée.
Le module permet de :
Gérer le mode esclave, maitre et multi maitre.
Générer et détecter le start et le stop condition.
Générer et reconnaitre les signaux ACK.
Générer NOACK en cas de problème logiciel.
De gérer le mode d’adressage sur 7 bits ou 10 bits.
D’utiliser toutes les vitesses de transfert compatibles.
Rôle des registres :
SSPSR registre à décalage transmission / réception.
SSPBUF registre tampon pour l’écriture de la donnée à envoyer ou la lecture
de la donnée reçue.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 81
SSPSTAT.
Bit SMP : filtre activé ou non (0 activé)
Bit CKE : 0 pour niveaux d’entrées compatibles avec I2C.
Bit D_A : indique si le dernier octet reçu ou transmis est une donnée (1) ou une adresse
(0).
Bit P : indicateur dernier événement détecté est un stop condition (1).
Bit S : indicateur dernier événement détecté est un start condition
Bit R_W :En I2C maitre ce bit indique si un transfert est en cours (1). En I2C
esclave il indique l’état du bit R/W du premier octet qui suit le start condition.
Bit UA : indicateur utilisé uniquement par l’esclave sur adresse 10 bits. Prévient quand il
faut mettre l’adresse à jour en mode I2C.
Bit BF : indicateur registre SSPBUF plein (1) en réception. Sert aussi comme indicateur
pour l’état de la transmission.
SSPCON
SSPADD
Possède deux fonctions selon le mode maitre ou esclave
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 82
En mode esclave c’est le registre qui contient l’dresse du PIC. Si l’adresse utilise
10 bits, alors il faut placer les 2 bits du poids for dans SSPAD, le bit UA du
registre SSPSTAT vous prévient de placer les bits du poids faible pour
compléter l’adresse.
En mode maitre, ce registre permet de déterminer la valeur de la fréquence
d’horloge.
SSPCON2
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 83
Synthèse.
Séquence Mode MSSP en mode I2C maitre
Configurer le module MSSP.
Envoyer un Start condition.
Envoyer l’adresse de l’eclave concerné avec b0=0 (écriture).
Envoyer la donnée à écrire.
Envoyer repeated start condition (SR).
Envoyer l’adresse de l’esclave concernée avec b0= 1 (lecture).
Lancer la lecture.
Envoyer un NOACAK pour fin de reception.
Envoyer un stop condiion.
MSSP en mode I2C esclave 7 bits (SSPMx = 0110)
Séquence de réception d’une adresse :
Placer l’adresse de l’esclave dans le registre SSPADD. Le bit b0 à 0. Le
module du PIC surveille alors la ligne.
Si l’adresse émise par le maitre n’est pas celle de l’esclave, il n’y aura aucune
réaction de l’esclave. Si l’adresse est celle de l’esclave alors on les
événements suivants :
L’adresse sera transmise dans le registre SSPBUF.
Le bit BF est positionné pour indiquer que le buffer est plein.
Le bit SSPIF est aussi positionné et une interruption est possible.
Le bit D_A du registre SSPSTAT est mis à 0 (adresse présente).
Le bit R_W sera mis à 0 (écruiture).
L’accusé de réception ACK est généré.
Il faut alors lire SSPBUF (même si ce n’est pas utile). Si non la prochaine donnée
ne sera pas traitée.
Séquence de réception d’une donnée
La réception d’un octet de donnée est similaire à la réception d’un octet
d’adresse. La seule différence est au niveau du bit D_A (positionné pour
indiquer que l’octet est une donnée).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 84
Réception d’adresse en mode lecture
L’esclave reçoit un repeat start condition après l’adresse mais avec R/W
=1.
L’adresse sera transférée dans SSPBUF avec R/W =1.
Le bit SSPIF sera positionné et une interruption aura lieu.
Le bit D_A du registre SSPSTAT est mis à 0 (adresse présente).
Le bit R_W est mis à 1.
L’accusé de réception ACK est généré.
Emission d’un octet
Une fois l’esclave détecte que le maitre avait besoin d’une donnée, il met
automatiquement le bit CKP à 0. Ceci place la ligne SCL à 0 et donc génère une
pause le temps nécessaire à écrire la donnée dans SSPBUF. Le bit CKP doit être
placé à 1 pour libérer la ligne SCL et permettre au maitre de recevoir la donée.
Le bit BF est positionné après écriture dans SSPBUF et remis à 0 une fois
l’octet est totalement transmis.
MSSP en mode I2C esclave 10 bits
Écriture
L’esclave Reçoit le bit start condition.
Puis reçoit le premier octet d’adresse avec R/W=0.
Génère ACK.
Reçoit le second octet d’adresse.
Génère ACK.
Reçoit le premier octet.
…….
Lecture :
L’esclave Reçoit le bit start condition.
Puis reçoit le premier octet d’adresse avec R/W=0.
Génère ACK.
Reçoit le second octet d’adresse.
Génère ACK.
Reçoit le repeated start condition.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 85
Reçoit le premier octet d’adresse avec R/W =1.
Génère ACK.
Envoie le premier octet demandé.
…..
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 86
9. Le port de communication série asynchrone USART
Une liaison série permet de faire dialoguer 2 équipements en sérialisant les bits
des données.
La trame d’une émission en mode série asynchrone est donnée ci-dessous :
La trame est composée de :
1 bit START.
5 à 8 bits DATA (donnée), poids faible en tête.
1 bit de vérification de parité qui permet de détecter les erreurs de
transmission sur la ligne.
Un , un et demi, ou 2 bits STOP (T, (3/2)T, ou 2T)
Lorsqu’il n’ya pas de transmission sur la ligne celle-ci est à l’état haut.
La vitesse de communication (en baud) doit être la même pour les deux
machines. (En mode asynchrone, chaque machine dispose de son générateur de
vitesse de communication. Il est donc impossible d’avoir les mêmes valeurs de
fréquence. Le programmeur doit veiller à ce que l’écart n’influence pas des
erreurs de transmission)
La norme RS232 utilise des signaux en +/- 12v pour la transmission
(+12V=niveau logique "0" et - 12V= niveau logique "1"). Elle peut exploiter des
lignes supplémentaires pour le contrôle de la transmission.
Le module USART du PIC16F877A dispose des fonctionnalités suivantes :
Fonctionnement en FULL DUPLEX (émission et réception des données en
même temps).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 87
Communication compatible avec la norme RS232 moyennement une adaptation
des niveaux. Il est commode d'utiliser le circuit MAX232 pour effectuer la
translation des niveaux de la logique (0/+5V) vers la transmission (+12V/-12V)
si l’on désire faire communiquer un microcontrôleur avec un équipement qui
dispose d’un port RS232.
La communication se fait sur la broche RC6/TX (transmission) et la broches
RC7/RX (réception). Les deux broches doivent êtres configurées en entrées
(oui en entrées).
La vitesse de communication est fixée par le registre SPBRG et le bit
TXSTA.BRGH.
La parité n’est pas gérée d’une façon matérielle. En cas de besoin elle doit
être gérée par logiciel.
La configuration et le contrôle de la communication se fait par les registres
TXSTA et RCSTA.
L’accès au port en lecture se fait par le registre RCREG, l’écriture se fait
par le registre TXREG.
.9.1. Transmission d’un caractère de 8 bits
Séquence d’émission d’un caractère.
Configurer la broche TX/RC6 en entrée.
Configurer le registre TXSTA (exemple mode 8 bits, valider mode
asynchrone BRGH)
Initialiser le registre SPBRG pour définir la vitesse de transmission.
Configurer l’interruption (validée ou masquée : TXIE).
Valider le port avec le bit RCSTA.SPEN
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 88
(*) Vérifier que le registre de transmission est vide (par interruption si
validée si non il faut tester le bit drapeau PIR1.TXIF).
Placer la donnée à transmettre dans le registre TXREG. La donnée est alors
placée automatiquement dans le registre à décalage dès que celui-ci est libre
puis les bits sont sérialisés.
Recommencer depuis (*) tant qu’on a des données à transmettre.
.9.2. Réception d’un caractère de 8 bits
Séquence de réception d’un caractère
Configurer la broche RX/RC7 en entrée.
Configurer le registre SPBRG pour définir la vitesse de transmission.
Masquer ou valider l’interruption.
Configurer le mode asynchrone (bit BRGH du registre TXSTA).
Configurer le registre RCSTA (validation du port, mode 8 bits, validation de
réception en continu).
(*)Attendre l’interruption ou tester le drapeau RCIF qui passe à 1 pour
annoncer la fin de la réception d’un octet.
Lire la donnée reçue dans le registre RCREG.
Recommencer à partir de (*).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 89
10. Les modules TIMER.
TIMER0
Le TimerO est identique à celui du PIC16F84A, c’est un compteur 8 bits
d’impulsions externes (broche RA4) ou internes (base du temps interne fosc/4)
avec pré division par 2, 4, 8 ,…. , 256.
Le timer0 peur être configuré pour générer une interruption lorsque sa valeur
déborde.
Le s registres associés au timerO sont :
OPTION_REG
INTCON bit <2 à 5>
TIMERO
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 90
TIMER1
C’est un compteur de 16 bits qui fonctionne sur le même principe que celui du
TIMER0. Les 16 bits sont ceux des registres TMR1H :TMR1L
Le bit TMR1ON active ou désactive le timer1.
Le bit TMR1CS sélectionne la source d’horloge (0 interne 1 externe RC0)
Le bit /T1SYNC permet de choisir si l’horloge du timer1 est synchronisée
ou non sur l’horloge de microcontrôleur.
Les bits T1CKPS1 :T1CKPS0 permettent de choisir la valeur de
présélection du signal d’horloge. 4 valeurs sont possibles.
Le bit TMR1IF est un bit d’état qui passe de 0 à 1 lorsque le timer1
passe de FFFF à OOOO. Ce bit doit être remis à 0 par logiciel.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 91
TIMER2
C’est un compteur 8 bits, l’horloge est interne (fosc/4), celle-ci peut être pré
divisée ou nom. Les bits T2CKPS1 :T2CKPS0 permettent de choisir la valeur de
la prévision (1 ,4 ,16).
Le registre du TIMR2 est comparé au registre PR2. Si ces deux registres sont
égaux alors une impulsion d’horloge est générée (TMR2 output) et le contenu du
timer2 est remis à 00h. Le signal généré peut être pré-divisé par le
« postscaler ». les valeurs de division sont 1 ,2 , 3, ,,, 16
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 92
11. Le module CCP1 et CCP2 (capture / compare /PWM)
Ces deux modules peuvent fonctionner dans l’un des trois modes suivants :
Mode capture : sert pour la mesure du temps.
Mode comparaison : sert pour générer des événements périodiques.
Mode PWM : sert pour générer des signaux à largeur d’impulsion modulée.
Ces modules sont associés aux broches RC2/CCP1 et RC1/T1OSI/CCP2.
Les modules CCP1 et CCP2 utilisent le timer 1. Les modes capture et comparaison
utilisent le timer1, le mode PWM utilise le timer2.
Le mode capture (Timer1)
Ce mode permet de mémoriser la valeur de timer1 dans les registres
CPP1RH :CPP1RL ou CPP2RH :CPP2RL quand un événement se produit sur l’une des
broches CCP1 ou CCP2.
Le transfert peut avoir lieu :
A chaque front montant.
A chaque front descendant.
Tous les 4 fronts montants.
Tous les 16 fronts montants.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 93
Registres CCP1CON et CCP2CON (x=1 ou 2)
A la fin de la capture, le bit drapeau CCPx1F est positionné, une interruption est
déclenchée si elle a été validée.
Remarques:
Pour déclencher la capture par un signal externe, il faut configurer la broche
RCx associée en entrée.
La capture peut être déclenchée par programme, dans ce cas il faut
configurer RCx en sortie pour pouvoir modifier l’état par programmation.
Avant de modifier le mode capture il faut masquer l’interruption CCPxI pour
éviter une interruption indésirable.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 94
Le mode comparaison
Ce mode permet de comparer en permanence le registre CCPR1 au TMR1. Quand
il ya égalité le drapeau CCPxIF est mis à 1 et différentes actions sont accomplies
selon le mode défini par les bits CCPxM3 : CCPxM0
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 95
Le mode PWM
Il s’agit de générer un signal carré de fréquence fixe et du rapport cyclique
variable.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 96
Supposons CCP vaut 0 et Le TIMER2 compte.
TMR2 arrive à la valeur PR2.
Au cycle suivant, TMR2 passe à 0 et l’état de CCPx passe à 1.
En même temps, la valeur programmée comme consigne est copiée dans le
registre final de comparaison.
(TMR2 + 2 bits) arrive à la valeur de la seconde consigne (8bits+ 2 bits) ,
CCPx passe à 0.
Tmr2 arrive à la valeur PR2 et au cycle suivant TMR2 passe de nouveau à 0 et
CCPx passe à 1 et le cycle continu.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 97
12. Le convertisseur analogique numérique
Le PIC16F877A dispose de 8 entrées analogiques multiplexées vers un seul
convertisseur analogique numérique à approximations successives de résolution
10 bits.
Registre ADCON1
Permet la configuration du module convertisseur analogique numérique.
Le type du résultat.
Horloge du convertisseur.
La configuration des broches.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 98
Le bit ADFM permet de choisir entre deux types de justification pour le
résultat.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 99
Le registre ADCON0
Ce registre permet de définir l’horloge de conversion, de choisir le canal à
convertir et de placer le convertisseur en fonctionnement.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 100
Pour convertir une voie analogique il faut suivre les étapes suivantes :
Configurer les broches d’entrées analogiques et la référence de la tension
analogique. (ADCON1)
Sélectionner le canal à convertir (ADCON0)
Sélectionner l’horloge de conversion (ADCON0 et ADCON1)
Activer le module de conversion (ADCON0).
Configurer l’interruption (si désirée) mettre ADIF=0,ADIE =1 =PEIE =GIE
Attendre la stabilité du signal.
Démarrer la conversion par la mise à 1 du bit GO:/DONE du registre
ADCON0.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 101
Attendre la fin de la conversion (par la technique du Polling par test du statut
GO:/DONE=0 ou bien présence de l’interruption).
Lire la valeur du résultat de la conversion dans les registres
ADRESH :ADRESL.
Pour la prochaine conversion il faut reprendre les mêmes étapes.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 102
13. Le comparateur de tension
Le module comparateur contient deux comparateurs analogiques indépendants.
Les entrées des comparateurs sont multiplexées.
8 possibilités d’utilisation.
Les registres associés aux comparateurs sont donnés ci-dessous :
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 103
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 104
Le PIC 18FXX
1. Exemple de circuits : caractéristiques
Les PIC18FXXX sont des microcontrôleurs 8 bits de la famille microchip avec
des instructions codées sur 16 bits.
Pour les PIC16FXX, une instruction est codée sur 14 bits et mémorisée en une
seule adresse mémoire de largeur 14 bits. Au contraire pour les PIC18FXX, une
instruction est codée sur 16 bits et mémorisée sur deux emplacements mémoires
de 8bits chacun (2 adresses).
Une instruction se trouve à l’adresse paire avec le poids fort à l’adresse impaire.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 105
Les principales caractéristiques sont :
Plus de 10 modes d’oscillateurs
7 modes de gestion de l’alimentation.
Présence d’un circuit de multiplication de 8 bits x8 bits.
Plusieurs sources d’interruptions.
Chaque port des entrées sorties possède 3 registres TRISX PORTX et LATx
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 106
2. Exemple de structure interne
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 107
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 108
3. Organisation de la mémoire programme
L’intégrité de la mémoire programme est accessible sans gérer les modifications
du registre PCLATH comme dans le cas des PIC16F
Instructions de sauts
Une instruction du saut possède trois formes :
Saut absolu.
Exemple : goto destination
L’instruction goto est codée sur 16bits, la destination est codée sur 16
bits.
Saut relatif long.
Exemple : bra distance
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 109
On donne la distance du saut par rapport à l’emplacement de l’instruction
suivante (instruction située immédiatement après bra).
La distance est exprimée sur 11 bits et codée en complément à 2. Les valeurs
limites de la distance est donc -1024 et +1023
(L’adresse de destination = l’adresse courante +2 + 2*distance)
Saut relatif court.
Un saut relatif court utilise une destination relative codée sur 8 bits. Ceci
permet un déplacement de -128 à 127.
Le registre de travail WREG
Il s’agit du registre de travail (comme W pour les PIC16FXX) à la différence que
WREG est maintenant accessible comme tous les registres FSR c’est-à-dire on
peut effectuer des opérations directement sur ce registre (décalage rotation ..).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 110
4. Organisation de la mémoire de données :
La mémoire de données et divisée en 15 banques. Mais les instructions du
PIC18FXXX permettent d’écrire des programmes sans changement de banques
comme dans le cas des PIC16FXX.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 111
5. Les registres spéciaux de configuration
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 112
6. Les modes d’adressage
Adressage immédiat (litéral) : la valeur de l’opérande est fournie
directement après l’instruction.
Exemple : movlw 0X55
Adressage direct de type banked
C’est le même adressage utilisé par les PIC16FXX. Il faut passer d’un bank à un
autre par la modification de certains bits (statut pour pic16xx).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 113
La syntaxe pour le PIC18FXX est un peu différente. On ajoute directement une
valeur ‘banked’ à l’instruction. Cette valeur va sélectionner la banque.
Exemple : movf varaible,w, banked
Adressage direct en access bank
Movf variable,w,a
Si a=0 Accès à 96 octets de la ram en bank0 et 160 octets de bank 15.
Si a=1 le registre BSR indique la bank utilisée de l’instruction .
Adressage à accès direct long
Les OIC18FXXX disposent des instructions qui permettent d’accédre à
l’intégrité de l’espace RAM sans avoir besoin de changer de banques. Ces
instructions sont codées sur 32 bits et contiennent l’adresse complète de la
variable de façon explicite.
Adressage indirect simple
L’adressage indirect permet de d’accéder à une adresse pontée par un registre.
Les PIC18FXX disposent de 3 registres d’accès indirect (contre 1 pour
pic16fxx).
Les registres d’indirection sont nommés FSR0, FSR1 ,FSR2 . chaque registre est
en fait composé de 2 octets contenant le poids faible et le poids fort de
l’adresse.
Le PIC18FXXX dispose de plusieurs variantes de l’adressage indirect :
Adressage indirect simple
Adressage indirect post-décrémenté (décrémentation après indirection)
Adressage indirect post-incrémenté (incrémentation après indirection)
Adressage indirect pré-incrémenté (incrémentation avant indirection)
Adressage indirect pré-indexé (un offset en plus de l’indirection).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 114
7. Jeu d’instruction
Le jeu d’instructions de cette famille comporte au moins 75 instructions.
Format générale des instructions
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 115
Table des instructions
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 116
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 117
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 118
Chapitre 4. LES MICROCONTROLEURS DE LA FAMILLE ATMEL
Documentation sur les microcontrôleurs ATMEL
Voir les fichiers de référence ATMEL
\Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-
2561_datasheet
\Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-
168A-168PA-328-328P_datasheet_Complete
Pour une documentation en Français voir les fichiers :
\AtMega32_Document bases_Francais_ a exploiter
\AtMega32_Assembleur_francais_ a exploiter
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 119
1. Exemple de modèles de microcontrôleurs ATMEL
.1.1. Aspect externe/ exemple atmega 2560
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 120
.1.2. Exemple de structure interne
Le cœur des microcontrôleurs AVR est une unité arithmétique riche en jeux
d’instructions (131 instruction). Pour rappel microchip 16F8771 possède 35
instructions.
32 registres spéciaux travaillent en collaboration directe avec l’UAL.
Selon la version, les ports d’E/S sont nommés PORTA, PORTB, PORTC ..…
jusqu’à PORTL.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 121
Dans la suite du cours on va traiter le circuit ATMEGA 2560
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 122
2. Plan de la mémoire de l’ATmega2560
La série ATMEGA utilise trois types de mémoires, la mémoire programme
FLASH, la mémoire de données SRAM et la mémoire morte EEPROM.
.3.1. La mémoire programme
Permet de stoker et de faire fonctionner le programme. La capacité dépend du
circuit utilisé.
.3.2. La mémoire morte
De type EEPROM contient la configuration du programme et les données qui
seront sauvées pendant la perte d’alimentation électrique.
.3.3. La mémoire de données
Contient les 32 registres de travail, les 64 registres de commande et la
mémoire SRAM pour les variables du programme.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 123
3. Les registres de travail (accumulateurs)
32 registres du travail (équivalents au registre W de microchip) collaborent avec
l’UAL.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 124
4. Tableau des registres E/S
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 125
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 126
5. Le jeu d’instructions
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 127
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 128
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 129
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 130
6. Les modes d’adressage.
Les instructions de cette famille de microcontrôleurs possèdent plusieurs modes
d’adressage :
Mode adressage direct simple registre (Rd)
L’opérande de l’instruction est le contenu d’un registre Rd. Rd est codé sur 5 bit
donc 32 possibilités.
Mode Accès direct à deux registres : opérateurs (Rr et Rd).
Le résultat est placé dans Rd.
Mode Adressage direct des entrées sorties
Mode Adressage direct des données
K représente une adresse, elle est exprimée sur deux octets. La donnée de
l’opérande est pointée par l’adresse k.
Adressage indirect (X Y Z)
L’adresse de l’opérande est obtenue par le contenu du registre X , Y, Z
Adressage indirect avec déplacement (q)
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 131
L’adresse de l’opérande est obtenue par la valeur du registre (X, Y ,Z) + q
Adressage indirect avec pré-décrémentation (-X ,-Y ,-Z)
L’adresse de l’opérande est obtenue par la valeur du registre (X, Y ,Z)
décrémentée de 1. (Décrémentation puis indexation).
Adressage indirect avec post-incrémentation (X ,Y ,Z)
L’adresse de l’opérande est obtenue par la valeur du registre (X, Y ,Z). Le
contenu du registre est automatiquement incrémenté de 1 après l’exécution de
l’instruction.
Adressage de la mémoire programme : instructions LPM, ELPM , SPM
Les 15 bits du poids fort du registre Z forment l’adresse d’une constante
(octet) de la mémoire programme. On note ZLSB le bit du poids faible de Z.
Pour l’instruction LPM : Si le bit ZLSB =0 , l’opérande est l’octet poids faible de
l’adresse . Si ce bit est à 1 alors l’opérande est l’octet du poids fort.
Pour l’instruction SPM : ZLSB doit être à 0.
Si l’instruction ELPM est utilisée alors le registre RAMPZ est utilisé pour
étendre l’adresse composée par Z.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 132
Adressage de la mémoire programme avec post incrémentation : instructions
LPM Z+ ELPMZ+
L’adresse de l’octet constante dans la mémoire est spécifiée par le contenu du
registre Z.
Instruction PLMZ+ : ZLSB permet la sélection de l’octet poids faible (si 0) ou le
poids fort (si 1).
Instruction EPLMZ+ le registre RAMPZ sert pour étendre l’adresse.
Le registre Z est incrémenté par 1 après l’exécution de l’instruction.
Adressage direct de la mémoire programme avec les instructions JMP et
CALL
L’exécution du programme continue à l’adresse spécifiée par la valeur immédiate
composée des 22 bits après le code de l’instruction. Càd la nouvelle valeur du
compteur programme est fourni les 22 bits.
Adressage indirect avec les instructions IJMP et ICALL
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 133
La nouvelle valeur dans le compteur programme est fournie par la valeur du
registre Z.
Adressage relatif pour les instructions RJMP et RCALL
La nouvelle valeur du compteur programme PC est PC+ k +1
K étant une valeur comprise entre -2048 et 2047
Les instructions de branchement conditionnelles
Une instruction de branchement conditionnelle permet de faire un saut ou non
selon l’état d’un bit du registre d’état. (voir jeux d’instructions).
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 134
7. Les interruptions
Un vecteur d’interruption représente l’adresse de début du programme associé à
cette interruption.
On donne ci-dessous la liste des vecteurs d’interruptions classés par ordre
décroissant d’importance.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 135
Le vecteur RESET possède la priorité la plus grande. Un programme doit
correspondre à une interruption. Si une interruption n’est pas utilisée il faut
alors faire un branchement sur un programme générique qui contient une
instruction RETI.
On montre ci-dessous un exemple de déclaration des vecteurs d’interruptions.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 136
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 137
8. Les PORTS d’entrées sorties
Les microcontroleurs ATMEL possèdent des PORTs d’entrées sorties pour
communiquer avec les périphériques. Ces ports sont multifonctionnels et
configurables broches à broches.
Ports en mode E/S numériques (TOR)
Pour contrôler le mode de fonctionnement de chaque broche, 3 registres sont
mis à disposition pour chaque port
DDRx registre de direction (mode entrée sortie.
PORTx registre de données (donnée à lire ou à écrire).
PINx registre d’état (donnée disponible).
X représente le nom du port (A ; B ; C ; ….)
On donne ci-dessous les configurations possibles
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 138
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 139
9. Le comparateur logique
Permet de comparer les niveaux de tension entre la broche positive AIN0 et la
broche négative AIN1. Lorsque U AIN0 > U AIN1 la sortie du comparateur ACO
passe à 1.
Ce module peut être utilisé pour déclencher la fonction de capture d’entréedu
TIMER / compteur1. Il peut aussi générer une interruption.
L’utilisateur peut choisir le front montant ou descendant de ACO pour
déclencher l’interruption.
L’entrée AIN1 peut être l’une des entrées analogiques de l’ADC.
Le comparateur utilise un registre propre au module ACSR et partage deux
autres registres avec d’autres modules SFIOR et ADMUX.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 140
10. Le convertisseur analogique numérique
Le module de conversion analogique numérique est de type à approximations
successives et de résolution 10 bits.
8 à 16 entrées analogiques (selon le circuit) peuvent êtres multiplexées.
Le convertisseur possède des entrées différentielles normales et des entrées
différentielles avec un gain programmable.
La tension de référence peut être externe ou interne.
A compléter selon le besoin
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 141
11. Les TIMERS
.12.1. Le pré diviseur des TIMER0 et TIMER1
Le timer / compteur0 et Le timer / compteur1 partagent le même prédiviseur,
mais le fonctionnement des deux modules est différent.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 142
.12.2. Le TIMER0/ COMPTEUR0 8 bit
Ce module permet d’effectuer le comptage du temps, d’événements et de
générer des signaux.
C’est un compteur 8 bits avec les particularités suivantes :
Remise à zéro du compteur sur comparaison (rechargement automatique).
Générateur de signaux type PWM
Générateur de fréquence.
Compteur d’événements externes.
Horloge à 9 bits avec prédiviseur
Source d’interruption sur débordement ou comparaison.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 143
Le registre compteur TCNT0 est un compteur de 8 bits, incrémenté et comparé
en permanence au registre OCR0. il peut générer des actions sur la sortie OCO
(PB3).
La source d’horloge peut être interne via le prédiviseur ou externe sur la broche
T0 (PB0) ou absente (Timer inactif) si aucune source n’est choisie.
Le registre TCCR0 permet de choisir un mode de fonctionnement parmi 4.
Mode Normal
Ce mode est identique à celui traité pour les PIC.
Mode Timer à remise à zéro sur comparaison (CTC)
Le compteur s’incrémente selon la source d’horloge configurée. Lorsque sa valeur
est égale à la valeur dans le registre OCR0 le compteur est remis à zéro et le
drapeau OCF0 est mis à 1 pour déclencher une interruption.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 144
Mode modulation de largeur d’impulsion rapide PWM R (FAST PWM)
Ce mode permet de produire des impulsions de largeur variable en fonction de la
valeur dans le registre WGM01 :0.
Le bit OC0 (PB3) est mis à 1 au début du comptage puis il est mis à 0 lors de la
comparaison du registre TCTN0 et du registre OCR0.
Pour faire varier la période il suffit de modifier la valeur initiale de compteur
après chaque interruption.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 145
Mode PWM correct (PWMC)
Ce mode utilise le compteur dans les deux sens. Quand la valeur définie dans le
registre OCR0 est atteinte, la sortie OCO est inversée et le compteur repart à
l’envers. Quand il arrive à la vamleur 00 la valeur de OC0 est à nouveau changée.
Les registres associés
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 146
.12.3. Le timer1/ compteur1 à 16 bits
Permet le cadencement précis des programmes, la gestion des événements, la
génération des signaux.. 15 modes sont disponibles avec ce module.
Ses principales caractéristiques sont :
Une conception 16 bits
Trois unités de comparaison indépendantes.
trois comparateurs
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 147
Une unité de capture à faible bruit.
Comparateur avec remise à zéro automatique.
Générateur de modulation de phase en largeur d’impulsion correct.
Générateur d’onde PWM périodique.
Compteur d’événement externe.
Quatre sources indépendantes d’interruption.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 148
12. L’interface série synchrone SPI
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 149
13. L’interface série USART
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 150
14. L’interface I2C
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 151
Chapitre 5. La carte de développement ARDUINO
1. Introduction
Le système Arduino simplifie la façon de travailler avec les microcontrôleurs,
tout en offrant plusieurs avantages :
Pas cher : les cartes Arduino sont relativement peu coûteuses comparativement
aux autres plateformes.
Multi-plateforme : Le logiciel Arduino, écrit en Java, tourne sous les
systèmes d'exploitation Windows, Macintosh et Linux. La plupart des systèmes à
microcontrôleurs sont limités à Windows.
Un environnement de programmation clair et simple: L'environnement de
programmation Arduino (= le logiciel Arduino) est facile à utiliser pour les
débutants, tout en étant assez flexible pour que les utilisateurs avancés puissent
en tirer profit également.
Logiciel Open Source et extensible : Le logiciel Arduino est publié sous
licence open source, disponible pour être complété par des programmateurs
expérimentés. Le langage peut être aussi étendu à l'aide de librairies C++, et les
personnes qui veulent comprendre les détails techniques peuvent reconstruire le
passage du langage Arduino au langage C pour microcontrôleur AVR sur lequel il
est basé. De la même façon, vous pouvez ajouter du code du langage AVR-C
directement dans vos programmes Arduino.
Matériel Open source et extensible : Les cartes Arduino sont basées sur
les microcontrôleurs Atmel ATMEGA8, ATMEGA168, ATMEGA 328, etc... Les
schémas des modules sont publiés sous une licence Creative Commons, et les
concepteurs de circuits expérimentés peuvent réaliser leur propre version des
cartes Arduino, en les complétant et en les améliorant.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 152
2. Le matériel
Il existe plusieurs versions de cartes Arduino. On donne ci-dessous deux
exemples de cartes.
La carte Arduino UNO : C'est la révision
la plus récente de la carte de base
Arduino USB. Elle se connecte sur
l'ordinateur avec un câble USB standard
et contient tout ce dont vous avez besoin
pour programmer et utiliser la carte. Elle
peut être complétée avec toute une
variété de circuits : des cartes-filles
personnalisées avec des caractéristiques
spécifiques.
La carte Arduino Mega2560 : La version
de la Mega est sortie en même temps que
la carte UNO. Cette version est basée
sur l'ATmega2560 qui dispose de deux
fois plus de mémoire, et utilise également
l'ATMega 8U2 pour la communication
USB-vers-série
Par la suite on va exploiter la carte Arduino Mega2560
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 153
Carte Arduino Mega 2560
La carte Arduino Mega 2560 est une carte à microcontrôleur basée sur un
ATmega2560 (voir fiche technique).
Cette carte dispose :
de 54 broches numériques d'entrées/sorties (dont 14 peuvent être utilisées
en sorties PWM (largeur d'impulsion modulée),
de 16 entrées analogiques (qui peuvent également être utilisées en broches
entrées/sorties numériques),
de 4 UART (port série matériel),
d'un quartz 16Mhz,
d'une connexion USB,
d'un connecteur d'alimentation jack,
d'un connecteur ICSP (programmation "in-circuit"),
et d'un bouton de réinitialisation (reset).
D’une mémoire programme flash de 256 KB dont 8KB utilisés par le
bootloader.
D’une mémoire RAM de 8 KB.
D’une mémoire EEPROM de 4 KB.
D’une Horloge de 16 MHZ.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 154
L’alimentation électrique.
Microcontrôleur ATmega2560
Tension de fonctionnement 5V
Tension d'alimentation (recommandée) 7-12V
Tension d'alimentation (limites) 6-20V
Intensité maxi disponible par broche
E/S (5V)
40 mA (ATTENTION : 200mA cumulé
pour l'ensemble des broches E/S)
Intensité maxi disponible pour la sortie
3.3V 50 mA
Intensité maxi disponible pour la sortie
5V
Fonction de l'alimentation utilisée - 500
mA max si port USB utilisé seul
La carte Arduino Mega 2560 peut-être alimentée soit via la connexion USB (qui
fournit 5V jusqu'à 500mA) ou à l'aide d'une alimentation externe. La source
d'alimentation est sélectionnée automatiquement par la carte.
L'alimentation externe (non-USB) peut être soit un adaptateur secteur (pouvant
fournir typiquement de 3V à 12V sous 500mA).
La plage idéale recommandée pour alimenter la carte est entre 7V et 12V.
Les broches d'alimentation sont les suivantes :
VIN. La tension d'entrée positive lorsque la carte Arduino est utilisée avec
une source de tension externe (à distinguer du 5V de la connexion USB ou
autre source 5V régulée). Vous pouvez alimenter la carte à l'aide de cette
broche, ou, si l'alimentation est fournie par le jack d'alimentation, accéder à
la tension d'alimentation sur cette broche.
5V. La tension régulée utilisée pour faire fonctionner le microcontrôleur et
les autres composants de la carte. Le 5V régulé fourni par cette broche peut
provenir soit de la tension d'alimentation VIN via le régulateur de la carte, ou
bien de la connexion USB (qui fournit du 5V régulé) ou de tout autre source
d'alimentation régulée.
3V3. Une alimentation de 3.3V fournie par le circuit intégré FTDI (circuit
intégré faisant l'adaptation du signal entre le port USB de votre ordinateur
et le port série de l'ATmega) de la carte est disponible : ceci est intéressant
pour certains circuits externes nécessitant cette tension au lieu du 5V).
L'intensité maximale disponible sur cette broche est de 50mA
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 155
GND. Broche de masse (ou 0V).The power pins are as follows:
Le bootloader est un programme préprogrammé une fois pour toute dans
l'ATméga et qui permet la communication entre l'ATmega et le logiciel Arduino
via le port USB, notamment lors de chaque programmation de la carte.
Les entrées et sorties numériques
Chacune des 54 broches numériques de la carte Mega peut être utilisée soit
comme une entrée numérique, soit comme une sortie numérique, en utilisant les
instructions pinMode(), digitalWrite() et digitalRead() du langage Arduino. Ces
broches fonctionnent en 5V. Chaque broche peut fournir ou recevoir un maximum
de 40mA d'intensité et dispose d'une résistance interne de "rappel au plus"
(pull-up) (déconnectée par défaut) de 20-50 KOhms. Cette résistance interne
s'active sur une broche en entrée à l'aide de l'instruction digitalWrite(broche,
HIGH).
De plus, certaines broches ont des fonctions spécialisées :
Communication Serie:
Port Serie Serial : 0 (RX) and 1 (TX);
Port Serie Serial 1: 19 (RX) and 18 (TX);
Port Serie Serial 2: 17 (RX) and 16 (TX);
Port Serie Serial 3: 15 (RX) and 14 (TX).
Utilisées pour recevoir (RX) et transmettre (TX) les données séries de niveau
TTL. Les broches 0 (RX) et 1 (TX) sont connectées aux broches correspondantes
du circuit intégré ATmega8U2 programmé en convertisseur USB-vers-série de la
carte, composant qui assure l'interface entre les niveaux TTL et le port USB de
l'ordinateur.
Interruptions Externes:
Broches 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20
(interrupt 3), et 21 (interrupt 2).
Ces broches peuvent être configurées pour déclencher une interruption sur un
niveau bas, sur un front montant ou descendant, ou sur un changement d’état.
Voir l'instruction attachInterrupt() pour plus de détails.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 156
Impulsion PWM (largeur d'impulsion modulée):
Broches 0 à 13. Fournissent une impulsion PWM 8-bits à l'aide de l'instruction
analogWrite().
SPI (Interface Série Périphérique):
Broches 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Ces broches supportent la
communication SPI (Interface Série Périphérique) disponible avec la librairie
pour communication SPI. Les broches SPI sont également connectées sur le
connecteur ICSP qui est mécaniquement compatible avec les cartes Uno,
Duemilanove et Diecimila.
I2C:
Broches 20 (SDA) et 21 (SCL). Supportent les communications de protocole I2C
(ou interface TWI :Two Wire Interface - Interface "2 fils"), disponible en
utilisant la librairie Wire/I2C . Noter que ces broches n'ont pas le même
emplacement que celui sur les cartes Uno, Duemilanove ou Diecimila.
LED DE TEST:
Broche 13. Il y a une LED incluse dans la carte connectée à la broche 13. Lorsque
la broche est au niveau HAUT, la LED est allumée, lorsque la broche est au
niveau BAS, la LED est éteinte.
Broches analogiques
La carte Mega2560 dispose de 16 entrées analogiques, chacune pouvant fournir
une mesure d'une résolution de 10 bits ( 1024 niveaux soit de 0 à 1023) à l'aide
de la fonction analogRead() du langage Arduino. Par défaut, ces broches
mesurent entre le 0V (valeur 0) et le 5V (valeur 1023), mais il est possible de
modifier la référence supérieure de la plage de mesure en utilisant la broche
AREF et l'instruction analogReference() du langage Arduino.
NB: les broches analogiques peuvent être utilisées en tant que broches
numériques.
Autres broches
Il y a deux autres broches disponibles sur la carte :
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 157
AREF : Tension de référence pour les entrées analogiques (si différente du 5V).
Utilisée avec l'instruction analogReference().
Reset : Mettre cette broche au niveau BAS entraîne la réinitialisation (= le
redémarrage) du microcontrôleur.
Communications UART
La carte Arduino Mega2560 dispose de toute une série de facilités pour
communiquer avec un ordinateur, une autre carte Arduino, ou avec d'autres
microcontrôleurs.
L'ATmega2560 dispose de quatre UARTs (Universal Asynchronous Receiver
Transmitter ou émetteur-récepteur asynchrone universel en français) pour la
communication série de niveau TTL (5V).
L’un des ports série de l'ATmega 2560 est disponible sur les broches 0(RX) et
1(TX). Un circuit intégré ATmega8U2 sur la carte assure la connexion entre
cette communication série et le port USB de l'ordinateur qui apparaît comme un
port COM virtuel pour les logiciels de l'ordinateur. Le code utilisé pour
programmer l'ATmega8U2 utilise le driver standard USB COM, et aucun autre
driver externe n'est nécessaire. Cependant, sous Windows, un fichier .inf est
requis.
Le logiciel Arduino inclut une fenêtre terminal série (ou moniteur série) sur
l'ordinateur et qui permet d'envoyer des textes simples depuis et vers la carte
Arduino. Les LEDs RX et TX sur la carte clignotent lorsque les données sont
transmises via le circuit intégré ATmega8U2 utilisé en convertisseur USB-vers-
série et la connexion USB vers l'ordinateur (mais pas pour les communications
série sur les broches 0 et 1).
Une librairie Série Logicielle permet également la communication série (limitée
cependant) sur n'importe quelle broche numérique de la carte UNO.
Programmation
La carte Mega2560 peut être programmée avec le logiciel Arduino. Sélectionner
"Arduino Mega" dans le menu Tools > Board. Pour plus de détails sur le langage
Arduino, voir la référence du langage Arduino et pour apprendre à programmer
en langage Arduino voir la page Apprendre.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 158
Le microcontrôleur ATmega2560 présent sur la carte Arduino Mega2560 est
livré avec un bootloader (petit programme de démarrage) préprogrammé qui vous
permet de transférer le nouveau programme dans le microcontrôleur sans avoir à
utiliser un matériel de programmation externe. Ce bootloader communique avec
le microcontrôleur en utilisant le protocol original STK500 (reference, fichiers
C).
Vous pouvez bien sûr passer outre le bootloader et programmer le
microcontrôleur via le connecteur ICSP ( In-Circuit Serial Programming -
"Programmation Série Dans le circuit" en français); voir ces instructions (en
anglais) pour plus de détails.
Le code source du code pour le circuit intégré ATmega8U2 est disponible.
L'ATmega8U2 est chargé avec un bootloader DFU qui peut être activé en
connectant le cavalier au dos de la carte ( ?) et en réinitialisant le 8U2. Vous
pouvez alors utiliser le logiciel FLIP de chez Atmel (Windows) ou le programmeur
DFU (Mac OS X et Linux) pour charger le nouveau code. Ou bien vous pouvez
utiliser le connecteur ICSP avec un programmateur externe (pour réécrire le
bootloader DFU).
Réinitialisation (logicielle) automatique
Plutôt que de nécessiter un appui sur le bouton poussoir de réinitialisation avant
un transfert de programme, la carte Arduino Mega2560 a été conçue de telle
façon qu'elle puisse être réinitialisée par un logiciel tournant sur l'ordinateur.
Une des broches matérielles de contrôle du flux (DTR) du circuit intégré
ATmega8U2 est connecté à la ligne de réinitialisation de l'ATmega2560 via un
condensateur de 100 nanofarads. Lorsque cette broche est mise au niveau BAS,
la broche de réinitialisation s'abaisse suffisamment longtemps pour réinitialiser
le microcontrôleur. Le logiciel Arduino utilise cette possibilité pour vous
permettre de transférer votre programme dans la carte par un simple clic sur le
bouton de transfert de la barre de boutons de l'environnement Arduino. Cela
signifie que le bootloader peut avoir un temps mort plus court, la mise au niveau
bas de la broche DTR étant bien coordonnée avec le début du transfert du
programme.
Ce fonctionnement a d'autres implications. Quand la carte Mega2560 est
connectée à un ordinateur fonctionnant soit sous Mac Os X ou Linux, la carte se
réinitialise à chaque fois qu'une connexion se fait entre elle et le logiciel (via le
port USB). Pendant la demi-seconde suivante, le bootloader s'exécute sur la
carte Mega2560. Puisqu'il est programmé pour ignorer les données mal
formatées (càd toute donnée en plus du transfert d'un nouveau programme), il
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 159
interceptera les quelques premiers octets de données envoyés à la carte après
qu'une connexion soit établie. Si un programme s'exécutant sur la carte reçoit
une configuration initiale ou d'autres données quand il démarre, assurez-vous que
le logiciel avec lequel il communique attend une seconde après l'ouverture de la
connexion avant d'envoyer ces données.
La carte Mega2560 comporte une piste (du circuit imprimé) que vous pouvez
couper pour désactiver la réinitialisation automatique. Les bords de chaque côté
de la piste peuvent être solidarisés ensembles pour la réactiver. Vous pouvez
également désactiver la réinitialisation automatique en connectant une
résistance de 110 Ohms entre le +5V et la ligne de réinitialisation (reset).
Protection du port USB contre la surcharge en intensité
La carte Arduino Mega2560 intègre un polyfusible réinitialisable qui protège le
port USB de votre ordinateur contre les surcharges en intensité (le port USB
est généralement limité à 500mA en intensité). Bien que la plupart des
ordinateurs aient leur propre protection interne, le fusible de la carte fournit
une couche supplémentaire de protection. Si plus de 500mA sont appliqués au
port USB, le fusible de la carte coupera automatiquement la connexion jusqu'à ce
que le court-circuit ou la surcharge soit stoppé.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 160
3. Le logiciel
Le logiciel Arduino a pour fonctions principales :
De pouvoir écrire et compiler des programmes pour la carte Arduino
De se connecter avec la carte Arduino pour y transférer les programmes
De communiquer avec la carte Arduino
Le langage Arduino est basé sur les langages C/C++ et supporte toutes les
instructions standards du langage C et quelques-unes des outils du C++. Le
langage Arduino repose sur l'utilisation du compilateur C pour les
microcontrôleurs AVR, AVR Libc, et vous permet d'utiliser la plupart de ses
fonctions. Voir le manuel utilisateur pour plus de détails.
Structure du programme
Fonctions de base
Ces deux fonctions sont obligatoires dans tout programme en langage Arduino :
void setup()
void loop()
Structures de contrôle
if
if...else
for
switch case
while
do... while
break
continue
return
goto
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 161
Syntaxe de base
; (point virgule)
{} (accolades)
// (commentaire sur une ligne)
/* */ (commentaire sur plusieurs lignes)
#define
#include
Opérateurs arithmétiques
= (égalité)
+ (addition)
- (soustraction)
* (multiplication)
/ (division)
% (modulo)
Opérateurs de comparaison
== (égal à)
!= (différent de)
< (inférieur à)
> (supérieur à)
<= (inférieur ou égal à)
>= (supérieur ou égal à)
Opérateurs booléens
&& (ET booléen)
|| (OU booléen)
! (NON booléen)
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 162
Pointeurs
* pointeur
& pointeur
Opérateurs bit à bit
& (ET bit à bit)
|(OU bit à bit)
^(OU EXCLUSIF bit à bit)
˜(NON bit à bit)
<< (décalage à gauche)
>> (décalage à droite)
Voir également :
Manipulation des Ports
Opérateurs composés
++ (incrémentation)
-- (décrémentation) (à revoir)
+= (addition composée)
-= (soustraction composée)
*= (multiplication composée)
/= (division composée)
&= (ET bit à bit composé)
|= (OU bit à bit composé)
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 163
Variables et constantes
Les variables sont des expressions que vous pouvez utiliser dans les programmes
pour stocker des valeurs, telles que la tension de sortie d'un capteur présente
sur une broche analogique.
Constantes prédéfinies
Les constantes prédéfinies du langage Arduino sont des valeurs particulières
ayant une signification spécifique.
HIGH | LOW
INPUT | OUTPUT
true | false
A ajouter : constantes décimales prédéfinies
Expressions numériques
Expressions numériques entières
Expressions numériques à virgule
Types des données
Les variables peuvent être de type variés qui sont décrits ci-dessous.
Synthèse des types de données Arduino
void
boolean
char
byte
int
unsigned int
long
unsigned long
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 164
float (nombres à virgules)
double (nombres à virgules)
Les chaînes de caractères
objet String NEW
Les tableaux de variables
le mot-clé void (fonctions)
word
PROGMEM
Voir également :
Déclaration des variables
Pour info : les type de données avr-c
Conversion des types de données
char()
byte()
int()
long()
float()
word()
Portée des variables et qualificateurs
static
volatile
const
Utilitaires
sizeof() (opérateur sizeof )
Référence
Code ASCII
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 165
Fonctions
Entrées/Sorties Numériques
pinMode(broche, mode)
digitalWrite(broche, valeur)
int digitalRead(broche)
Entrées analogiques
int analogRead(broche)
analogReference(type)
Sorties "analogiques" (génération d'impulsion)
analogWrite(broche, valeur) - PWM
Entrées/Sorties Avancées
tone()
noTone()
shiftOut(broche, BrocheHorloge, OrdreBit, valeur)
unsigned long pulseIn(broche, valeur)
Temps
unsigned long millis()
unsigned long micros()
delay(ms)
delayMicroseconds(us)
Math
min(x, y)
max(x, y)
abs(x)
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 166
constrain(x, a, b)
map(valeur, fromLow, fromHigh, toLow, toHigh)
pow(base, exposant)
sq(x)
sqrt(x)
Pour davantage de fonctions mathématiques, voir aussi la librairie math.h : log,
log10, asin, atan, acos, etc...
Trigonométrie
sin(rad)
cos(rad)
tan(rad)
degrees(rad)
radians(deg)
PI
Nombres randomisés (hasard)
randomSeed(seed)
long random(max)
long random(min, max)
Bits et Octets
lowByte()
highByte()
bitRead()
bitWrite()
bitSet()
bitClear()
bit()
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 167
4. Interruptions Externes
attachInterrupt(interruption, fonction, mode)
detachInterrupt(interruption)
Interruptions
interrupts()
noInterrupts()
Voir également la librairie interrupt.h.
Communication
Serial
Stream
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 168
5. Librairie arduino
Librairie Serial pour la communication série
La librairie Serial est utilisée pour les communications par le port série entre la
carte Arduino et un ordinateur ou d'autres composants. Toutes les cartes
Arduino ont au moins un port Série (également désigné sous le nom de UART ou
USART) : Ce port série communique sur les broches 0 (RX) et 1 (TX) avec
l'ordinateur via le port USB. C'est pourquoi, si vous utilisez cette fonctionnalité,
vous ne pouvez utiliser les broches 0 et 1 en tant qu'entrées ou sorties
numériques.
Vous pouvez utiliser le terminal série intégré à l'environnement Arduino pour
communiquer avec une carte Arduino. Il suffit pour cela de cliquer sur le bouton
du moniteur série dans la barre d'outils puis de sélectionner le même débit de
communication que celui utilisé dans l'appel de la fonction begin().
La carte Arduino Mega dispose de trois port série supplémentaires : Serial1 sur
les broches 19 (RX) et 18 (TX), Serial2 sur les broches 17 (RX) et 16 (TX),
Serial3 sur les broches 15 (RX) et 14 (TX).
Les fonctions de la librairie .
begin()
available()
read()
flush()
print()
println()
write()
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 169
La librairie pour afficheur LCD alphanumérique
Cette librairie permet à une carte Arduino de contrôler un afficheur LCD
alphanumérique standard à cristaux liquides basé sur le circuit intégré Hitachi
HD44780 (ou compatible), ce qui est le cas de la plupart des afficheurs
alphanumériques LCD disponibles. La librairie fonctionne aussi bien en mode 4
bits qu'en mode 8 bits (càd utilisant 4 ou 8 broches numériques en plus des
broches de contrôle RS, Enable et RW en option). Ainsi, en mode 4 bits, 6
broches numériques de la carte Arduino suffisent pour contrôler un afficheur
LCD alphanumérique.
Le constructeur de classe
LiquidCrystal
Fonctions disponibles.
Fonctions d'initialisation
begin()
Fonctions d'écriture
print()
write()
Fonctions de gestion de l'écran
clear()
display()
noDisplay()
Fonctions de positionnement du curseur
home()
clear()
setCursor()
Fonctions modifiant l'aspect du curseur
cursor()
noCursor()
blink()
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 170
noBlink()
Fonctions de contrôle du comportement du curseur
autoscroll()
noAutoscroll()
leftToRight()
rightToLeft()
Fonctions d'effets visuels
scrollDisplayLeft()
scrollDisplayRight()
Fonction de création de caractère personnalisé
createChar()
Principe d'utilisation
Pour inclure la librairie LiquidCrystal dans un programme, on ajoutera au début
du programme la ligne suivante :
#include <LiquidCrystal.h>
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 171
La librairie Servo pour le contrôle des servomoteurs
Cette librairie permet à une carte Arduino de contrôler les servomoteurs de
modélisme. Les servomoteurs intègrent un mécanisme et un axe qui peut-être
contrôlé avec précision. Les servomoteurs standards permettent de positionner
l'axe à différents angles, habituellement entre 0 et 180 degrès (ces
servomoteurs permettent de maintenir l'axe à une position précise). Les
servomoteurs à rotation continue permettent des rotations de l'axe à
différentes vitesses.
A partir d'Arduino 0017, la librairie Servo supporte jusqu'à 12 servomoteurs sur
la plupart des cartes Arduino (la Duemilanove par exemple) et 48 sur l'Arduino
Mega. Sur les cartes autres que la Mega, l'utilisation de la librairie Servo
désactive l'instruction analogWrite() sur les broches 9 et 10, qu'il y ait ou non un
servomoteur sur ces broches. Sur la Mega, jusqu'à 12 servomoteurs peuvent
être utilisés sans interférer avec la fonction PWM (càd avec l'instruction
analogWrite); utiliser de 12 à 23 servomoteurs désactivera les impulsions PWM
sur les broches 11 et 12. (Note : PWM pour Pulse Width Modulation ou
Modulation de Largeur d'Impulsion).
Avec Arduino 0016 et précédent, la librairie Servo utilise la fonction fournie par
le matériel (càd l'ATmega de la carte), et fonctionne uniquement sur les broches
9 et 10 (et ne fonctionne pas sur l'Arduino Mega). Dans ce cas, si seulement un
servomoteur est utilisé, l'autre broche ne peut pas être utilisée pour générer
une sortie PWM normale avec l'instruction analogWrite(). Par exemple, avec
Arduino 0016 et précédent, vous ne pouvez avoir un servomoteur sur la broche 9
et une sortie PWM sur la broche 10.
Circuit à réaliser 2.
Les servomoteurs ont 3 fils de connexion :
le +
le - (ou la masse)
la commande du servomoteur : une impulsion modulée en largeur (PWM) qui
définit la position de l'axe du servomoteur.
Dans cas de l'utilisation d'un à 2 servomoteur(s) standard(s) :
Le fil du +, est typiquement rouge, et doit être connecté à la broche 5V de la
carte Arduino.
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 172
Le fil de la masse est typiquement noir ou marron et doit être connecté au 0V (=
à la masse) de la carte Arduino.
Le fil de l'impulsion de commande est typiquement jaune, orange ou blanc et doit
être connecté à une broche numérique de la carte Arduino.
Dans le cas de l'utilisation de plusieurs servomoteurs ou de servomoteurs
nécessitant une tension supérieure à 5V et/ou une intensité importante :
Noter que les servomoteurs nécessitent parfois une tension supérieure à 5V
et/ou une intensité importante. Donc si vous devez utiliser plus d'un ou deux
servomoteur(s), vous aurez alors besoin d'utiliser une alimentation différente du
5V de la carte Arduino.
Dans le cas de l'utilisation d'une alimentation séparée de la carte Arduino, bien
connecter ensemble les masses (le 0V) de la carte et de l'alimentation externe.
Le constructeur
Servo
Fonctions de la librairie Servo .
attach()
write()
writeMicroseconds()
int read()
boolean attached()
detach()
Principe d'utilisation
Pour inclure la librairie Servo dans un programme, on ajoutera au début du
programme la ligne suivante :
#include <Servo.h>
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 173
La librairie Stepper pour le contrôle des moteurs pas à pas
Cette librairie vous permet de contrôler des moteurs pas à pas unipolaires et
bipolaires. Les moteurs pas à pas sont des moteurs capables d'exécuter des
rotations "cran par cran" d'une grande précision. Pour utiliser cette librairie
avec votre carte Arduino, vous avez besoin d'un moteur pas à pas et d'une
interface de puissance adaptée pour contrôler le moteur.
Fonctions de la librairie
setSpeed(vitesse)
step(nombre_pas)
Information technique
Pour info, les séquences générées par la librairie sont :
dans le cas d'une connexion 4 fils :
Pas C0 C1 C2 C3
1 1 0 1 0
2 0 1 1 0
3 0 1 0 1
4 1 0 0 1
Dans le cas d'une connexion 2 fils (cas des interfaces mot CC avec broches de
vitesse et sens) :
Pas C0 C1
1 0 1
2 1 1
3 1 0
4 0 0
Principe d'utilisation
Pour inclure la librairie Stepper dans un programme, on ajoutera au début du
programme la ligne suivante :
#include <Stepper.h>
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 174
EN-NAHLI MOHAMMED Formateur à OFPPT / ISTA RI Fès Maroc Page 175
Chapitre 6. Applications
A SUIVRE