Académique Documents
Professionnel Documents
Culture Documents
introduction
1
RST(S6)-ENSA -KENITRA
Définition Systèmes embarqués
2
RST(S6)-ENSA -KENITRA
Spécificités d’un système embarqué
Caractéristiques générales:
Dédié à une application spécifique
4
RST(S6)-ENSA -KENITRA
Spécificités d’un système embarqué
Architecture d’un système embarqué :
Réalisé autour d’un micro-contrôleur (uC)
uC est un système à processeur dans un seul chip (SoC)
5
RST(S6)-ENSA -KENITRA
Systèmes Embarqués
--Systèmes à Microcontrôleurs--
Chapitre I:
Introduction au PIC de Microchip
RST(S6)-ENSA
LP IS(S6)-EST -GUELMIM
-KENITRA 6
Plan
Introduction
Domaines d’application
Principaux constructeurs
Processus de compilation et de programmation
PIC de Microchip
Familles de PIC
Acronymes
7
RST(S6)-ENSA -KENITRA
Introduction
8
RST(S6)-ENSA -KENITRA
Introduction
9
RST(S6)-ENSA -KENITRA
Domaines d’application
11
RST(S6)-ENSA -KENITRA
Processus de compilation et de programmation
12
RST(S6)-ENSA -KENITRA
Processus de compilation et de programmation
Program.asm
Program.hex
assembler/ (machine language)
translator 11 00xx 0010 0000 programmer
MOVLW 0x20
13
RST(S6)-ENSA -KENITRA
PIC de Microchip
14
RST(S6)-ENSA -KENITRA
PIC de Microchip
Les PICs sont des processeurs dits RISC (Reduced Instruction Set Computers):
• Processeur à jeu d’instruction réduit
• Plus on réduit le nombre d’instructions, plus facile et plus rapide en est le décodage, et plus
vite le composant fonctionne
• Cependant, il faut plus d'instructions pour réaliser une opération complexe
15
RST(S6)-ENSA -KENITRA
Familles de PIC
Les modèles de PIC courants sont repérés par une référence de la forme :
• 2 chiffres : famille du PIC (10, 12, 16, 18, 24 ,32) ou dsPIC (30, 33)
• 1 lettre : type de mémoire de programme (C ou F).
F indique en général qu'il s'agit d'une mémoire Flash (reprogrammable et
effaçable électriquement)
C indique en général que la mémoire ne peut être effacée que par exposition
aux ultra-violets
o (exception pour le PIC16C84 qui utilise une mémoire EEPROM effaçable
électriquement)
CR indique que la mémoire est une PROM
L peut être ajouté devant cette première lettre pour indiquer qu'il s'agit d'un
modèle basse tension (exemple : 2 V à 5,5 V si LF — 4,2 V à 5,5 V si F).
• Un nombre de 2 à 4 chiffres : modèle du PIC au sein de la famille. Toutefois il y
a maintenant des exceptions : PIC18F25K20 ou PIC18F96J60 par exemple
• Un groupe de lettres pour indiquer le boîtier et la gamme de température
16
RST(S6)-ENSA -KENITRA
Familles de PIC
Exemple 1 : PIC18LF4682-I/P
• Microcontrôleur de la famille PIC18
• Basse tension (L)
• Mémoire flash (F)
• Modèle 4682
• Gamme de température industrielle (I) (-40°/+85°)
• Boîtier DIL40 (p)
17
RST(S6)-ENSA -KENITRA
Familles de PIC
Exemple 2 : PIC16F84-04
• Microcontrôleur de la famille PIC16
• Mémoire flash (F)
• Modèle 84
• Capable d’accepter une fréquence d’horloge de 4 MHz
18
RST(S6)-ENSA -KENITRA
Familles de PIC
19
RST(S6)-ENSA -KENITRA
Familles de PIC
--PIC 8 bits--
PIC10 et PIC12
• Ce sont des composants récents. Ils ont comme particularités d'être
extrêmement petits (existe en boîtier SOT-23 à 6 broches de moins de 3×3 mm),
simples et économiques
PIC16
• Les PICs de la famille 16C, 16F ou 16CR sont des composants de milieu de
gamme
• C'est la famille la plus riche en termes de dérivés
• La Famille 16 dispose de 3 sous-familles :
La sous-famille avec le cœur Baseline : instructions sur 12 bits
La sous-famille avec le cœur Middle-Range : instructions sur 14 bits
La sous-famille avec le cœur High end : instructions sur 16 bits
20
RST(S6)-ENSA -KENITRA
Familles de PIC
--PIC 8 bits--
PIC18
• Cette famille a un jeu d'instruction plus complet (75 instructions)
• On peut les utiliser avec un quartz fonctionnant jusqu'à 64 MHz (16 MIPS)
• Cette famille propose une multitude de dérivés intégrant l'USB, ETHERNET
(MAC(Medium Access Control)+PHY(PHYsical Layer)),CAN et canaux de
MLI (Modulation de largeur d’impulsion) dédiés au contrôle moteur
21
RST(S6)-ENSA -KENITRA
Familles de PIC
--PIC 8 bits--
Exemple : Famille PIC16
22
RST(S6)-ENSA -KENITRA
Acronymes
UAL : Unité Arithmétique et logique
SOT : Small Outline Transistor
DIL: Dual In Line
MIPS: Million Instruction Per Second
MAC: Medium Access Control
PHY: PHYsical Layer
MIPS : Microprocessor without Interlocked Pipeline Stages
USB OTG: USB On The Go
UART : Universal Asynchronous Receiver/Transmitter
RTCC : Real time calendar/clock
QVGA: Quarter Video Graphics Array
WQVGA: Wide Quarter Video Graphics Array
CAN : Convertisseur Analogique Numérique
CNA : Convertisseur Numérique Analogique
JTAG : Joint Test Action Group
XLP: eXtreme Low Power
FFT : Fast Fourier Transform
DSP : Digital Signal Processor
IIR : Infinite Impulse Response
FIR : Finite Impulse Response
23
RST(S6)-ENSA -KENITRA
Acronymes
CAN : Controller Area Network
OSEK : Öffene Système und deren Schnittstellen für die Elektronik im
Kraftfahrzeug which stanads for « Ooen Systems and the Corresponding
Interfaces for Automotive Electronic »
Kio : Kibioctet (1 Kio=1024 octets)
24
RST(S6)-ENSA -KENITRA
Systèmes Embarqués
--Systèmes à Microcontrôleurs
Chapitre II:
Architecture :PIC 16F84A
RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 25
Plan
Brochage
Principales caractéristiques
Architecture interne
Organisation de la mémoire
L’ALU et le registre W
Horloge
LP IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 26
Brochage
Port A
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 28
Brochage
Port B
RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 29
Principales caractéristiques
Seulement 35 instructions
Tout les instructions se font en un cycle machine (4 cycles d’horloges) sauf les
instructions de branchement qui se font en deux cycles machine
Vitesse allant jusqu’à 20 MHz, soit une instruction sur 200 ns
14 bits pour coder les instructions
8 bits pour les données
15 registres pour les fonctions spéciales
1K mots de mémoire Flash
68 octets de mémoires de données RAM
64 octets de mémoire de données EEPROM
1 Timer/compteur 8 bits avec une prédivision programmable et cadencé par une
horloge interne ou externe
4 sources d’horloge sélectionnable
Mode sleep (pour une faible consommation)
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 30
Principales caractéristiques
8 niveaux de pile
4 sources d’interruptions
1000 cycles d’effacements/écriture possible dans la mémoire du programme
Flash
10 000 000 cycles d’effacements/écriture possible dans la mémoire de données
EEPROM
Programmation par ICSP ( In Circuit Serial Programming) via deux broches RB6
(clock) et RB7 (data)
Protection de code
RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 31
Architecture interne
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 32
Architecture interne
RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 33
Architecture interne
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 34
Organisation de la mémoire
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 35
Organisation de la mémoire
Mémoire de programme
• Le compteur programme de 13 bits
est capable d’adresser 213=8K mots
de 14 bits
• Seulement le premier 1K mots de 14
bits (0000h à 03FFh) qui est
physiquement implémenté et
accessible
• L’adresse 0000h contient le vecteur
du reset (Il s’agit du branchement
vers début du programme)
• L’adresse 0004h contient le vecteur
d’interruption (Il s’agit Branchement
vers début du programme
d’interruption)
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 36
Organisation de la mémoire
Mémoire de la pile
• La pile est une zone mémoire qui permet de stocker les adresses (contenu du
compteur programme) de retour d’un sous programme ou d’une routine
d’interruption
• Elle peut contenir 8 valeurs (adresses de retours) de 13 bits chacune
• Elle n’a pas d’adresse dans la plan mémoire
• Ce sont des zones réservées par le système
RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM *
Organisation de la mémoire
Mémoire de données Mémoire de données RAM
• La mémoire RAM est constituée de deux
parties :
Les registres SFR : ce sont les registres
utilisés par le CPU et les périphériques
pour contrôler une opération désirée par
le PIC
o Ils sont situés dans les zones 00h-0Bh
et 80h-8Bh
Les registres GPR (General Purpose
Registers) sont des positions mémoire que
l'utilisateur peut utiliser pour stocker ses
variables et ces données
oIls sont situés dans la zone 0Ch-4Fh et
mappés dans la zone 8Ch-CFh
• Les zones 07h,87h, 4Fh-7Fh et CFh-FFh
ne sont pas implémentées
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 38
Organisation de la mémoire
STATUS Registre d’état
• La mémoire RAM est organisée en deux banques (pages): Bank0 et Bank1
Pour accéder à un registre, il faut d'abord se placer dans la banque où il se
trouve
L’accès à la page est réalisé en positionnant le bit RP0 du registre STATUS
(Adresse 03h ou 83h)
RP0 = 0 → Bank 0
RP0 = 1 → Bank 1
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 39
Organisation de la mémoire
40
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
Organisation de la mémoire
41
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
OPTION REGISTER (81h):
8 bits (tous à 1 au RESET) affectant le comportement des E/S et des timers.
42
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
Organisation de la mémoire
• Registres SFRs du PIC16F84A
SFRs du BANK0
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 43
Organisation de la mémoire
SFRs du BANK1
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 44
Organisation de la mémoire
INDF (00h ou 80h) : Utilise le contenu de FSR (File Select Register) pour
l’accès indirect à la mémoire
TM0(01h) : Registre lié au Compteur/Timer0
PCL (02h ou 82h) : Contient les 8 bits du poids faible du compteur programme
(PC)
STATUS (03h ou 83h) : Il contient l’état de l’unité arithmétique et logique ainsi
que le bit de sélection des banques
FSR (04h ou 84h) : Permet l’adressage indirect
PORTA (05h) : Donne l’accès en lecture ou en écriture du port A
PORTB (06h) : Donne l’accès en lecture ou en écriture du port B
EEDATA (08h) : Permet l’accès aux donnés dans la mémoire EEPROM
EEADR (09h) : Permet l’accès aux adresses de la mémoire EEPROM
RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 45
Organisation de la mémoire
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 46
Organisation de la mémoire
Mémoire EEPROM
• Le PIC possède une zone EEPROM de 64 octets
• Accessible en lecture et en écriture par le programme
• Les données sont conservées même si l’alimentation est éteinte
• L’accès à cette mémoire requiert l’utilisation des registres dédiés
• La lecture et l’écriture ne peuvent s’exécuter que selon des séquences
particulières
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 47
L’ALU et le registre W
C'est une ALU 8 Bits qui réalise les opérations arithmétique et logique entre
l'accumulateur W (Work register) et n'importe quel autre registre 'F‘ (File registre)
ou constante K
L'accumulateur W est un registre de travail 8 bits, il n'a pas d'adresse comme les
autres SFR
Pour les instructions à deux opérandes, c'est toujours lui qui contient un des
deux opérandes
Pour les instructions à un opérande, celui-ci peut être soit W soit n'importe quel
registre F
Le résultat de l'opération peut être placé soit dans le registre de travail W soit
dans le registre F
Exemple :
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 48
Horloge
Le PIC16F84A peut fonctionner avec 4 sources d’oscillateurs différentes :
• LP : Low Power Crystal
• XT : Crystal/Resonator
• HS : High Speed Crystal
• RC : Resistor/Capacitor
Le choix de la source d’horloge se fait par les deux bits de configurations Fosc1
et Fosc0
L’horloge peut être externe ou interne. Cette dernière est constituée d'un
oscillateur à quartz ou d'un oscillateur RC
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 49
Horloge
Avec l'oscillateur à Quartz, on peut avoir des fréquences allant jusqu'à 20 MHz
selon le type du μC
Avec un oscillateur RC, la fréquence de l'oscillation est fixée par Vdd, Rext et
Cext. Elle peut varier légèrement d'un circuit à l'autre
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 50
https://www.microchip.com/wwwprod
ucts/en/PIC16F84A
51
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
Systèmes Embarqués
--Systèmes à Microcontrôleurs--
RST(S6)-ENSA -KENITRA 52
Plan
Introduction
Instructions opérant sur registre
Instructions opérant sur un bit
Instructions opérant sur une constante
Instructions de saut et d’appel de procédures
RST(S6)-ENSA -KENITRA 53
introduction
RST(S6)-ENSA -KENITRA 54
Instructions opérant sur registre
Ce sont des instructions qui manipulent un octet se trouvant dans la RAM. Ça
peut être un registre de configuration SFR ou une case mémoire quelconque
(Registre GPR)
RST(S6)-ENSA -KENITRA 55
Instructions opérant sur registre
F (File) désigne une adresse, qui appartient (0x00 à 0x7F), de n'importe quel
registre SFR ou GPR
Pour les registres SFR, on peut utiliser leurs noms à condition d'inclure le fichier
p16F84A.inc dans le programme
W (Work register) : registre de travail qui fait la fonction d’un accumulateur
d (Destination select)
• d=0 ou W : Stockage du résultat dans W
• d=1 ou f : Stockage du résultat dans F(File)
RST(S6)-ENSA -KENITRA 56
Instructions opérant sur registre
• Exemples
Écrire la partie du programme qui permet de faire l’addition des contenus des
cases mémoires d’adresses 0x1Ch et 0x1Dh et mettre le résultat dans la case
mémoire d’adresse 0x1Eh
RST(S6)-ENSA -KENITRA 57
Instructions opérant sur un bit
b : numéro du bit dans un registre de 8 bits, qui peut être remplacé le nom du
bit si le fichier p16F84A.inc est inclus dans le programme
RST(S6)-ENSA -KENITRA 58
Instructions opérant sur un bit
• Exemples
Écrire la partie du programme qui permettra de mettre 1 le bit RB5 du PORTB
BSF 0x06, 5 ; on peut aussi faire BSF PORTB,RB5
Écrire la partie du programme qui permet de mettre à zéro le bit 3 du port A et
le bit 5 du port B
BCF PORTA,3 ; mettre à 0 le bit 3 du port A
BCF PORTB,5 ; mettre à 0 le bit 5 du port B
BSF STATUS, RP0 ; Mettre à 1 le bit RP0 du STATUS: se mettre sur ;BANK1
RST(S6)-ENSA -KENITRA 59
Instructions opérant sur une constante
Elles manipulent les données qui sont codés directement dans l’instruction. Ce
sont les instructions entre l’accumulateur W est une constante K
RST(S6)-ENSA -KENITRA 60
Instructions opérant sur une constante
• Exemples
Écrire la partie du programme qui permettra de faire l’addition entre la valeur
0x55 et le contenu du registre W
ADDLW 0x55 ; W contiendra le résultat W+0x55
Écrire la partie du programme qui permet d’écrire la valeur 0x12 sur le port B
MOVLW 0x12 ; mettre 0x12 dans le registre W
MOVWF PORTB ; transférer W=0x55 sur PORTB
RST(S6)-ENSA -KENITRA 61
Instructions de saut et d’appel de procédures
RST(S6)-ENSA -KENITRA 62
Instructions de saut et d’appel de procédures
• L’instruction GOTO
Instruction 1
Instruction 2
Goto bonjour
Instruction 3
Instruction 4
Instruction 5
bonjour Instruction 6
Instruction 7
RST(S6)-ENSA -KENITRA 63
Instructions de saut et d’appel de procédures
• L’instruction CALL
L’instruction call permet d’appeler une fonction
Une fonction est un sous programme écrit à la
suite du programme principal. Sa première ligne
doit comporter une étiquette et elle doit se
terminer par return
RST(S6)-ENSA -KENITRA 64
Systèmes Embarqués
--Systèmes à Microcontrôleurs--
RST(S6)-ENSA -KENITRA 65
Plan
RST(S6)-ENSA -KENITRA 66
Plan
RST(S6)-ENSA -KENITRA 67
Programmation en langage machine
RST(S6)-ENSA -KENITRA 68
Programmation en langage machine
RST(S6)-ENSA -KENITRA 69
Programmation en langage Assembleur
RST(S6)-ENSA -KENITRA 70
Programmation en langage Assembleur
RST(S6)-ENSA -KENITRA 71
Programmation en langage haut niveau
RST(S6)-ENSA -KENITRA 72
Programmation en langage haut niveau
RST(S6)-ENSA -KENITRA 73
Programmation en langage haut niveau
RST(S6)-ENSA -KENITRA 74
Programmation en langage haut niveau
RST(S6)-ENSA -KENITRA 75
Programmation en langage haut niveau
Programmation du MCU
RST(S6)-ENSA -KENITRA 76
Premier programme en langage C
RST(S6)-ENSA -KENITRA 77
Types de données
RST(S6)-ENSA -KENITRA 79
Les variables
Le nom de la variable peut contenir des caractères alphabétiques de A à Z (a -z),
les chiffres 0-9 et le caractère de soulignement '_'. Le compilateur est sensible à
la casse
Les noms de variables ne doivent pas commencer par un chiffre
Un nom d’une variable ne peut pas prendre le nom d’un nom réservé du langage
: exemple if , while …
Chaque variable doit être déclarée en spécifiant son type au début du
programme avant son utilisation
RST(S6)-ENSA -KENITRA 80
Les pointeurs
La valeur contenue dans une variable de type pointeur est l’adresse d’une
donnée stockée en mémoire
Une variable pointeur est déclaré comme suit :
Exemples :
RST(S6)-ENSA -KENITRA 81
Les pointeurs
L’opérateur & permet d’initialiser le pointeur qui obtient ainsi l’adresse de
n’importe quelle variable (on parle également de référence) et retourne ainsi un
pointeur sur la variable manipulée. Il convient de vérifier que la variable et le
pointeur sont de type compatible
L’opérateur * permet à un pointeur sur une variable, de lire et de modifier la
valeur de celle-ci
RST(S6)-ENSA -KENITRA 82
Les pointeurs
Exemple 1 :
RST(S6)-ENSA -KENITRA 83
Les pointeurs
Exemple 2 :
RST(S6)-ENSA -KENITRA 84
Les constantes
Une constante est un nombre ou un caractère ayant une valeur fixe qui ne peut
être modifiée pendant l'exécution du programme
Contrairement aux variables, les constantes sont stockées dans la mémoire flash
de programme du microcontrôleur dans le but d'économiser l'espace RAM
Le compilateur les reconnaît par le préfixe const :
Constantes entières
RST(S6)-ENSA -KENITRA 85
Les constantes
RST(S6)-ENSA -KENITRA 86
Les constantes
Constantes énumérées
• C’est un type spécial de constantes entières qui permet de rendre un programme
plus complet et plus facile à suivre en assignant aux éléments des nombres
ordinaux
• Dans l'exemple suivant, on attribue automatiquement au premier élément
la valeur 0, au second la valeur 1, au troisième la valeur 2, etc :
RST(S6)-ENSA -KENITRA 87
Les constantes
• Sur chaque occurrence des mots «UP», «DOWN» ,«LEFT» et «RIGHT», dans le
programme, le compilateur va les remplacer par les numéros appropriés (0-3)
• Concrètement, si les broches 0, 1, 2 et 3 du port B sont reliés à des moteurs, la
commande pour démarrer le moteur 'RIGHT' relié à bit 3 du port B se présente
comme suit :
RST(S6)-ENSA -KENITRA 88
Opérateurs, opérations et expressions
La valeur contenue dans une variable de type pointeur est l’adresse d’une
donnée stockée en mémoire 0101 1010
Une variable pointeur est déclaré comme suit :
b=11110011 a=00001100
RST(S6)-ENSA -KENITRA 89
Structures conditionnelles
Instruction if-else
RST(S6)-ENSA -KENITRA 90
Structures conditionnelles
Instruction switch
RST(S6)-ENSA -KENITRA 91
Les instructions de boucles
Instruction while
Instruction for
RST(S6)-ENSA -KENITRA 92
Les instructions de boucles
Instruction do-while
RST(S6)-ENSA -KENITRA 93
Les tableaux et les chaines de caractères
Les tableaux
• Un tableau est un regroupement consécutif de données de même type et de
taille fixe
• À chaque entrée du tableau correspond un indice pouvant prendre une valeur
dans l’intervalle [0, taille – 1]
• Il est possible de déclarer des tableaux avec de multiples indices (tableaux à
plusieurs dimensions) comme les matrices
RST(S6)-ENSA -KENITRA 94
Les tableaux et les chaines de caractères
• Exemple
RST(S6)-ENSA -KENITRA 95
Les tableaux et les chaines de caractères
RST(S6)-ENSA -KENITRA 96
Les tableaux et les chaines de caractères
• Exemple
RST(S6)-ENSA -KENITRA 97
Les fonctions
Une fonction consiste en un sous-programme appliquant des commandes précises
sur des variables données
En règle générale, il est recommandé d'avoir un programme composé d'un grand
nombre de fonctions simples que de quelques fonctions complexes
Chaque fonction doit être correctement déclarée afin d'être correctement interprétés
lors du processus de compilation. La déclaration contient les éléments suivants :
• Nom de la fonction
• Corps de la fonction
• Liste des paramètres
• Déclaration des paramètres
• Type du résultat de la fonction
RST(S6)-ENSA -KENITRA 98
Les fonctions
Exemple
Notez que la fonction peut ne pas avoir besoin des paramètres, mais les
parenthèses restent obligatoires pour que le compilateur interprète la fonction
La fonction peut aussi ne pas retourner de résultats. Le compilateur reconnaît
ces fonctions par le type void de leur résultat :
RST(S6)-ENSA -KENITRA 99
Les fonctions