è systèmes programmables
Les
●
Les circuits spécialisés ou ASIC (Application Specific Integrated Circuit) :
Les circuits spécialisés sont des circuits spécialisés dès leur conception pour une application
donnée.
Exemples : DSP (Digital Signal Processing), co-processeur arithmétique, processeur 3-D,
contrôleur de bus, ...
Source : Texas Instruments
Source : NVidia
Avantages : Inconvénients :
●
Très rapide ●
Faible modularité
●
Consommation moindre ●
Possibilité d'évolution limité
●
Optimisé pour une application ●
Coût
Les différents systèmes programmables
Les systèmes en logique programmée et/ou en logique programmable sont connus sous la
désignation de PLD (programmable logic device, circuit logique programmable)
●
FPGA (field-programmable gate array, réseau de portes programmables in-situ),
●
PAL (programmable array logic, réseau logique programmable),
●
...
Source : Altera Source : Altera
« Un circuit logique programmable, ou réseau logique programmable, est un circuit intégré logique qui
peut être reprogrammé après sa fabrication. Il est composé de nombreuses cellules logiques
élémentaires pouvant être librement assemblé.» (Wikipédia)
Avantages : Inconvénients :
●
Forte modularité ●
Mise en oeuvre plus complexe
●
Rapidité ●
Coûts de développement élevé
Les différents systèmes programmables
●
Les systèmes micro-programmés :
Les micro-contrôleurs sont typiquement des systèmes micro-programmés.
Micro-contrôleur Microchip
PIC16F690 en boîtier DIL20
Un micro-contrôleur est un :
« Circuit intégré comprenant essentiellement un microprocesseur, ses mémoires, et
des éléments personnalisés selon l'application. » (Arrêté français du 14 septembre
1990 relatif à la terminologie des composants électroniques.)
Un micro-contrôleur contient un microprocesseur.
Avantages : Inconvénients :
●
Mise en oeuvre simple ●
Plus lent
●
Coûts de développement réduits ●
Utilisation sous optimale
Deux types de processeurs
●
CISC : Complex Instruction Set Computer
Grand nombre d'instructions,
Type de processeur le plus répandu
●
RISC : Reduced Instruction Set Computer
Nombre d'instructions réduit
(sélection des instructions pour une exécution plus rapide)
Décodage des instructions plus rapide
Évolution et Loi de Moore
Intel Pentium 4 Northwood C (2002)
architecture interne 32 bits
fréquence d’horloge 2,4/3,4 Ghz
(bus processeur : 200Mhz)
plus de 42 millions de transistors, gravés en 0,13 µm
450 MIPS
Source : Intel
Source : Intel
Intel 8086 (1978)
architecture interne 16 bits
bus 16 bits
fréquence d'horloge 4,77/10 Mhz
16
39 000 transistors, gravés en 3µm Source : Wikipédia
0,33/0,75 MIPS
Évolution et Loi de Moore
Intel Core i7 Gulftown (2011)
architecture interne 64 bits
4/6 coeurs
fréquence d'horloge 3,46 Ghz
Fréquence de bus: 3,2 GHz
Fréquence de transfert des données 25.6 Gb/sec.
1,17 Milliards de transistors, gravés en 32nm
6000 MIPS
« The wall » :
limite industrielle et physique,
20 nm
Intel Pentium 4 Northwood C (2002)
architecture interne 32 bits performance / Watt consommé
fréquence d’horloge 2,4/3,4 Ghz
Fréquence de bus: 0,2 GHz
plus de 42 millions de transistors, gravés en 0,13 µm
450 MIPS
Les structures des systèmes micro-programmés
●
Les différents bus d'un système micro-programmés
« Un bus est un jeu de lignes partagées pour l’échange de mots numériques. »
(Traité de l’électronique, Paul Horowitz & Winfield Hill)
Définition : Un bus permet de faire transiter (liaison série/parallèle) des
informations codées en binaire entre deux points. Typiquement les informations
sont regroupés en mots : octet (8 bits), word (16 bits) ou double word (32 bits).
Caractéristiques d'un bus:
●
nombres de lignes,
●
fréquence de transfert.
●
« Largeur du bus »
8
●
Unidirectionnel
●
Bidirectionnel
Issu de la documentation technique
du PIC16F628
Structures des systèmes micro-programmés
Il existe 3 Types de bus :
●
Bus de données : permet de transférer entre composants des données,
ex. : résultat d'une opération, valeur d'une variable, etc.
●
Bus d'adresses : permet de transférer entre composants des adresses,
ex. : adresse d'une case mémoire, etc.
●
Bus de contrôle : permet l'échange entre les composants d'informations de
contrôle [bus rarement représenté sur les schémas].
ex. : périphérique prêt/occupé, erreur/exécution réussie, etc.
Définition : Une adresse est un nombre binaire qui indique un emplacement dans
une zone mémoire
Structures des systèmes micro-programmés
●
Structure de Von Neumann
●
Structure de Harvard
La différence se situe au niveau de la séparation ou non des mémoires programmes et données.
La structure de Harvard permet de transférer données et instruction simultanément, ce qui
permet un gain de performances.
Issu de la documentation technique du
PIC16F628
Les mémoires :
RAM (Random Access Mem.)
mémoire rapide qui permet
de stocker temporairement
des données.
ROM (Read Only Memory)
mémoire à lecture seule,
programmée à vie.
EEPROM
(Elec. Erasable Programmable
Read Only Memory)
mémoire lente qui permet de
stocker des données même
après coupure de l’alim.
●
PC (Program Counter)
●
Registre(case mémoire)
●
ALU
●
Multiplexeur
●
Décodeur d’instructions
●
horloge
●
Stack (pile)
LIFO (Last In First Out)
FIFO (First In First Out)
●
Registre (case mémoire)
●
ALU
●
PC (Program Counter)
●
Multiplexeur
●
Décodeur d’instructions
●
horloge
●
Stack (pile)
LIFO (Last In First Out)
FIFO (First In First Out)
Issu de la documentation
technique du PIC16F628
●
Ports d’entrées/sorties
●
USART
(Universal Synchronous Asynch.
ReceiverTransmitter)
interface de communication série,
●
CCP (Capture/Compare/PWM)
Modulation en largeur d'impulsions
●
Timer
●
Comparateur
●
CAN/CNA
●
Référence de tension
●
Module HF
●
Liaison USB, ...
Les éléments de choix
Caractéristiques électriques :
Architecture : ●
Fréquence d’horloge
●
ALU (8, 16, 32, 64 bits) ●
Tensions d’alimentation
●
Structure du processeur (Harvard, Von Neumann) ●
Consommation d’énergie, modes faible
●
Type de processeur (RISC, CISC) consommation d’énergie, ...
●
Taille des mémoires programme et donnée
●
Nombre de ports d’entrée/sortie Caractéristiques physiques :
●
Type de boîtier : DIL, PLCC, ...
Fonctionnalités :
●
Fonctions analogiques : CAN, CNA, Comparateur, ...
●
Fonctions de timing : Timer, Watchdog, ...
●
Fonctions de communication : UART (Communication
série), USB, I2C, ...
●
Facilité de programmation : In-Circuit Serial
Programming, Self Programming, ...
Mise en oeuvre, maintenance :
●
Coût de développement : outils de développement,
formation, ...
●
Suivi du micro-contrôleur : production suivie,
disponibilité, composant obsolète, ...
28
Source : Microchip
Instructions
Un jeu d’instruction est un ensemble d’opérations directement réalisables sur un
système micro-programmé donné.
Par exemple : le PIC18F4520 (RISC) possède un jeu d’instructions composé de 75
instructions. L’exécution d’une instruction peut nécessiter un ou plusieurs cycles
d’horloges suivant la complexité de l'instruction.
NOTE : Un cycle d’horloge correspond à une période de l’horloge (signal de
référence temporelle). La fréquence d’horloge est le nombre de cycles effectués
par une horloge en une seconde.
Instructions
Une instruction est composée au minimum de deux parties:
Instruction = OPCODE + opérande(s)
OPCODE (Operation CODE) : partie d’une instruction qui précise quelle
opération doit être réalisée
Extrait du datasheet (documentation technique) du PIC18F4520.
Pipeline et flot d’instructions
3 étapes pour l'exécution d'une instruction :
✔
Lecture de l’instruction (1)
✔
Décodage de l’instruction (2)
✔
Exécution de l’instruction (3)
Temps
1 2 3
1 2 3
1 2 3
Création d’un pipeline => permet une exécution plus rapide des instructions
Temps
1 2 3
1 2 3
1 2 3
Les différents modes d'adressage
La nature et le nombre d’opérandes qui constituent une instruction déterminent le mode
d’adressage de l’instruction. On distingue 4 modes d’adressage principaux.
L‘adressage inhérent : il n’y a pas d’opérande !
ex : NOP, RESET, CLRWDT ;
Description de l'instruction RESET extraite de la notice
technique (le « datasheet ») du PIC 18F4520
'
Les différents modes d'adressage
La nature et le nombre d’opérandes qui constituent une instruction détermine le mode
d’adressage de l’instruction. On distingue 4 modes d’adressage principaux.
L’adressage immédiat : l’opérande est une valeur
ex : MOVLW 5Ah ;
Nombres de cycles nécessaires à l'exécution
Exécution de l'instruction (pipeline à 4 niveaux)
Les différents modes d'adressage
La nature et le nombre d’opérandes qui constituent une instruction détermine le mode
d’adressage de l’instruction. On distingue 4 modes d’adressage principaux.
L’adressage direct (étendu) : l’opérande est l’adresse (bits de
poids faibles de l'adresse complète) de la donnée dans la
page mémoire active.
ex : ADDWF 000Fh,
En mode direct étendu : on transmet l'adresse complète
Les différents modes d'adressage
La nature et le nombre d’opérandes qui constituent une instruction détermine le mode
d’adressage de l’instruction. On distingue 4 modes d’adressage principaux.
●
l’adressage indirect (indexé) : l’opérande est l’adresse d’un registre qui contient l’adresse de la
donnée.
●
En mode indirect indexé, on ajoute un décalage par rapport à l’adresse.
NOTE : Il existe de nombreux autres modes d’adressage (ex. implicite, inhérent, relatif) : leur nombre
varie en fonction du constructeur et du micro-contrôleur !
Structures des ports d’entrées/sorties
Un port d’entrées/sorties est par définition un port bidirectionnel.
De fait, il est donc nécessaire de configurer la direction du port (in ou out). Dans le
microcontrôleur, des registres spécifiques sont dédiés à la gestion de ces ports...
Extrait de la documentation technique du PIC18F4520 de Microchip.
Les registres
Un registre 8 bits est synonyme d'un
ensemble de 8 cases mémoire. De
nombreux registres sont utilisés pour
gérer le microcontrôleur.
Le registre W (accumulateur)
Le compteur programme (PC)
Le registre d’état (Flags)
Les registres de configuration :
les registres de directions pour les ports
d’entrées/sorties (TRIS, SFR), les registres de
gestion des interruptions, de gestion de la
mémoire (BSR, GPR, etc.)
ATTENTION : tous les registres du microcontrôleur ne sont pas représentés sur le schéma...
Par exemple : le registre d'état
Le registre d'état (Status Register) contient des bits d'informations sur les opérations arithmétiques
menées par l'ALU (ex., le dépassement de format après avoir demandé l'addition de deux valeurs 8
bits).
Phase de démarrage du micro-contrôleur
Suite à une opération de remise à zéro (RESET), le micro-contrôleur effectue une phase de
démarrage :
1/ RESET : il peut être déclenché par la mise sous tension du micro-contrôleur, la réception d’un
signal sur la broche RESET du micro-contrôleur, une instruction de RESET, ...
2/ Initialisation du micro-contrôleur : le micro-contrôleur effectue une temporisation afin de
garantir la stabilité des signaux d’horloge.
3/ Effacement des registres : le micro-contrôleur efface le contenu des registres (variable en
fonction du « mode de RESET » que vous effectuez).
4/ Lecture du vecteur RESET
Le micro-contrôleur lit l’adresse du programme principal dans la mémoire programme.
5/ Début de l’exécution du programme principal.
Organisation de la mémoire programme
Compteur de programme (PC)
le compteur de programme
Pile (Stack)
une pile pour gérer les appels
programmes et les interruptions
Vecteur Reset
pointeur vers l’adresse mémoire du
début du programme principal
Vecteurs d'interruption
pointeur vers l’adresse mémoire du
programme à exécuter en cas
d’interruptions
Mémoire programme
zone mémoire réservée au stockage des
programmes écrits par l’utilisateur
Remarque : Un pointeur est une variable contenant une adresse mémoire.
Exécution d’une
instruction
Adressage inhérent
L’instruction ne comporte pas d’opérande et
agit implicitement sur un registre.
Exemples : SLEEP, RESET, NOP
Adressage immédiat
L’instruction comporte une opérande et agit
explicitement sur un registre
Exemples : ADDLW, MOVLW
Déroulement:
(1) Le compteur programme indique l’adresse
de l’instruction suivante dans la mémoire
programme. (2) L’instruction est lue et stockée
dans le registre d’instruction. (3) Puis elle est
décodée par le module de décodage et de
contrôle des instructions. (4) Finalement elle est
exécutée.
Exécution d’une
instruction
Adressage direct (étendu)
L’instruction comporte une opérande qui
indique l’adresse mémoire sur laquelle
s’effectue l’opération.
Exemples : CLRF (direct), MOVFF (étendu)
Déroulement:
(1) Lecture de l’instruction dans la mémoire
programme à l'adresse pointée par le compteur
programme. (2) Lecture de l’instruction et
décodage. (3) Pour l’adressage direct, l’opérande
constitue la partie basse de l’adresse mémoire sur
laquelle s’effectue l’opération, la partie haute est
complétée avec le registre BSR. (3') Pour
l’adressage étendu, l’opérande est l’adresse
complète de la case mémoire sur laquelle
s’effectue l’opération. (4) Finalement l’instruction
est exécutée sur la case mémoire pointée.
Organisation de la mémoire données
BSR (Bank Select Register)
Permet de pré-sélectionner la page pour un accès
mémoire plus rapide.
=> notion de pagination de la mémoire
GPR (General Purpose Registers)
Espaces mémoires qui permet le stockage de
données temporaires (variable, ...)
Access Bank
pointeurs vers des zones mémoires
SFR (Special Function Registers)
Registres de contrôle et d’état pour les
périphériques (notamment...)
Pagination de la mémoire
« La pagination de la mémoire consiste à diviser la mémoire en blocs (pages) de longueur
fixe. » (Source : Comment Ça Marche)
Une adresse mémoire est alors divisée en deux parties :
Partie haute Partie Basse
Dans le cas d’une instruction avec adressage direct, on transmet seulement la partie basse
de l’adresse. Le micro-contrôleur utilise le registre BSR pour compléter l’adresse.
Attention !! En adressage
direct, on doit s’assurer que
l’on travaille dans la bonne
page mémoire.
67
Exécution d’une
instruction
Adressage direct (étendu)
L’instruction comporte une opérande qui
indique l’adresse mémoire sur laquelle
s’effectue l’opération.
Exemples : CLRF (direct), MOVFF (étendu)
Déroulement:
(1) Lecture de l’instruction dans la mémoire
programme à l'adresse pointée par le compteur
programme. (2) Lecture de l’instruction et
décodage. (3) Pour l’adressage direct, l’opérande
constitue la partie basse de l’adresse mémoire
sur laquelle s’effectue l’opération, la partie haute
est complétée avec le registre BSR. (3') Pour
l’adressage étendu, l’opérande est l’adresse
complète de la case mémoire sur laquelle
s’effectue l’opération. (4) Finalement
l’instruction est exécutée sur la case mémoire
pointée.
Exécution d’une
instruction
Adressage indirect (indexé)
L’instruction comporte une opérande
indiquant un pointeur, c.à.d. une adresse de la
case mémoire sur laquelle s’effectue
l’opération.
Exemples : ADDWF, INDF1, 1
Déroulement:
(1) Lecture de l’instruction dans la mémoire
programme à l'adresse pointée par le compteur
programme. (2) Lecture de l’instruction et
décodage. (3) La valeur de l’opérande indique
le pointeur à utiliser. (4) La valeur pointée est
lue (avec un éventuel décalage en mémoire). (5)
Finalement l’instruction est exécutée sur la
valeur pointée.
Conception d'un système embarqué
Formellement, la conception d'un système embarqué basé sur un microcontrôleur peut être
décomposée en 3 étapes distinctes.
(1) Le développement matériel s'appuie sur un cahier des charges, c.à.d. la définition des
fonctionnalités et des performances du système. Cette étape doit permettre de spécifier les
caractéristiques du microcontrôleur, de ses périphériques et de l'électronique associée.
(2) Le développement logiciel s'appuie sur l'étape précédente pour construire un algorigramme,
puis le code qui va être testé. Cette étape requiert que vous choisissiez le langage (assembleur
et/ou évolué) que vous utiliserez sur des bases objectives, par exemple de manière à optimiser
le temps de développement, la facilité de maintenance, le nombre d'opérations, etc.
(3) La phase de test doit être menée pour vérifier que le cahier des charges initial est bien rempli.
Cette phase de test « finale » n'empêche pas d'avoir mené des tests séparés lors des phases de
développement matériel et logiciel.
Chacune de ces trois étapes précédente peut être relativement complexe et mobiliser des moyens
financiers et humains conséquents. Par ailleurs, le test à une étape peut remettre en cause les choix fait
à une étape précédente : en pratique, on est donc plutôt confronté à un cycle de conception plutôt qu'à
un enchaînement parfaitement séquentiel !
Développement matériel
Développement logiciel
Tests du système complet
Le développement du logiciel
La construction d'un code machine exécutable s'appuie sur un certain nombre de composantes
(fichiers sources, librairies) qui suivent le diagramme organisationnel ci-dessous.
(1) Les fichiers sources écrits dans un langage
assembleur et/ou évolué doivent permettent au
système embarqué d'effectuer les tâches requises.
(2) Le compilateur et/ou l'assembleur a pour rôle de
convertir les instructions des sources en langage
machine.
(3) L'éditeur de lien permet de construire un
exécutable à partir des objets issus soit des sources
soit de librairies pré-existantes.
La programmation en Assembleur
Le langage Assembleur (abrégé ASM) est un langage de programmation de bas-niveau, qui fait la
correspondance entre des instructions en langage machine (mots binaires) et des symboles appelés
mnémoniques plus simples à utiliser.
Source : Microchip
Le langage Assembleur est un langage compilé, c'est à dire :
1. L’utilisateur écrit son programme en langage Assembleur. Ce fichier est assemblé pour traduire le
programme en langage machine (avec éventuellement des améliorations).
2. Le programme en langage machine est alors utilisé pour programmer le micro-contrôleur, c.à.d.
qu'il est transféré dans la mémoire (programme) pour être exécuté.
Les types d’instructions en Assembleur
A. Les instructions propres au micro-contrôleur :
●
Les instructions de transfert : movlw, movf, ...
●
Les instructions arithmétiques : decf, addwf, ...
●
Les instructions logiques : xorlw, andlw, ...
●
Les instructions de branchement : bz (branch if zero), bra (branch always), ...
B. Les instructions pré-processeur permettent au programmeur de donner des indications au
compilateur, elles sont destinées au PC et non pas au micro-contrôleur !
Il existe différents types d’instruction pré-processeur :
●
les instructions de contrôle : org = début du programme, end = fin du programme, etc. ;
●
les instructions conditionnelles : if, else, endif, etc. ;
●
les instructions relatives aux données : res = réservation d’espace mémoire, etc. ;
●
les instructions pour les macros
Algorigrammes
La description du programme par un algorigramme permet de :
●
gagner en efficacité lors de la phase de codage du programme,
●
d’optimiser la structure du programme,
●
de clarifier le fonctionnement du programme,
●
le rendre compréhensible à une personne extérieure.
Début, Fin,
Sous-programme
Interruption
Initialisation
Test d'une condition Faux
Instruction Vrai
Premier programme
en assembleur
Début
Broche 2 à 7 du PORTB en sortie
Broche 1 du PORTB en entrée
RAZ du PORTB
Broche 1 à 4 du PORTB en E/S numérique
Broche 1
du PORTB
à l'état haut ?
Broche 2 du PORTB Broche 2 du PORTB
à l'état haut à l'état bas
Structure d’un programme en assembleur
Dans un programme en assembleur, on peut distinguer une partie préliminaire qui est systématique
c.à.d. qui ne change pas d'un programme à l'autre.
;
; Filename : premier_programme.asm
;
; Description :Recopie de l'état de la broche 1 du PORTB
; sur la broche 2 du PORTB
;
list p=18f4520
; Définition du micro-contrôleur utilisé
#include <[Link]>
Début ; Définitions des emplacements mémoires des registres
; La configuration du micro-contrôleur est définie avec MPLAB
; (Logiciel de développement Microchip)
La première partie concerne l'en-tête qui définit, le plus clairement possible, la fonction du
programme ainsi que divers informations permettant de gérer l'historique du code (auteur, date
d'écritures et de modifications, numéro de version, etc.)
; Filename : premier_programme.asm
;
; Description : Recopie de l'état de la broche 1 du PORTB
; sur la broche 2 du PORTB
;
Début list p=18f4520
; Définition du micro-contrôleur utilisé
#include <[Link]>
; Définitions des emplacements mémoires des registres
; et configurations matérielles par défaut
#include <MA_CONFIG.inc>
; Modification des configurations matérielles par défaut
La déclaration du micro-contrôleur permet au compilateur de générer un code machine qui soit
compréhensible pour le microcontrôleur que vous souhaitez programmer.
;
; Filename : premier_programme.asm
;
; Description : Recopie de l'état de la broche 1 du PORTB
; sur la broche 2 du PORTB
;
list p=18f4520
Début ; Définition du micro-contrôleur utilisé
#include <[Link]>
; Définitions des emplacements mémoires des registres
; et configurations matérielles par défaut
#include <MA_CONFIG.inc>
; Modification des configurations matérielles par défaut
Une directive au pré-processeur demande l'inclusion d'un fichier de définition spécifique au
microcontrôleur qui définit certaines configurations matérielles par défaut et permet de simplifier
l'écriture des programmes,
; Filename : premier_programme.asm
; Description : Recopie de l'état de la broche 1 du PORTB
; sur la broche 2 du PORTB
list p=18f4520
Début ; Définition du micro-contrôleur utilisé
#include <[Link]>
; Définitions des emplacements mémoires des registres
; et configurations matérielles par défaut
#include <MA_CONFIG.inc>
; Modification des configurations matérielles par défaut
Extrait du fichier [Link] de défin propre au micro-contrôleur
;----- Register Files
PORTA EQU H'0F80'
PORTB EQU H'0F81'
PORTC EQU H'0F82'
PORTD EQU H'0F83'
PORTE EQU H'0F84'
LATA EQU H'0F89'
LATB EQU H'0F8A'
LATC EQU H'0F8B'
LATD EQU H'0F8C'
LATE EQU H'0F8D'
Une directive au pré-processeur supplémentaire peut être spécifiée de manière à modifier la
configuration par défaut établie dans [Link].
Note : pour savoir comment modifier ces configurations, il faut aller voir le fichier [Link].
; Filename : premier_programme.asm
;
; Description :Recopie de l'état de la broche 1 du PORTB
; sur la broche 2 du PORTB
;
list p=18f4520
Début ; Définition du micro-contrôleur utilisé
#include <[Link]>
; Définitions des emplacements mémoires des registres
; et configurations matérielles par défaut
; #include <MA_CONFIG.inc>
; Modification des configurations matérielles par défaut
Exemple de ce que pourrait être le fichier MA_CONF [Link]
;----- Utilisation de l'oscillateur
;----- en mode haute vitesse
CONFIG OSC = HS
On peut distinguer ensuite une seconde partie qui correspond à la configuration des éléments du
microcontrôleur qui entrent directement en jeu dans la fonction réalisée...
La première opération consiste systématiquement à initialiser le vecteur RESET. Notez que cette
étape n'a pas été notée dans l'algorigramme (ce qui pourrait être considéré comme une lacune...).
Broche 2 à 7 du PORTB en sortie
Broche 1 du PORTB en entrée
RAZ du PORTB
Broche 1 à 4 du PORTB en E/S numérique
org h'0000' ; initialisation du vecteur RESET
goto init
init clrf PORTB
movlw b'00000001'
movwf TRISB ; Configuration de la direction
; du PORTB. Broche 1 en entrée.
; Broche 2 à 8 en sortie
clrf LATB
movlw 0Fh
movwf ADCON1 ; Configuration des broches 1 à 4
; du PORTB en E/S numérique
La seconde opération correspond à la configuration du PORT B telle que décrite par
l'algorigramme... Cette configuration est directement fourni par le Datasheet du PIC 18F4520...
Broche 2 à 7 du PORTB en sortie
Broche 1 du PORTB en entrée
RAZ du PORTB
Broche 1 à 4 du PORTB en E/S numérique
org h'0000' ; initialisation du vecteur RESET
goto init
init clrf PORTB
movlw b'00000001'
movwf TRISB ; Configuration de la direction
; du PORTB. Broche 1 en entrée.
; Broche 2 à 8 en sortie
clrf LATB
movlw 0Fh
movwf ADCON1 ; Configuration des broches 1 à 4
; du PORTB en E/S numérique
Fonctions intégrées du PIC 18F4520
Les microcontrôleurs intégrent des fonctionnalités qu'il est souvent utile de connaître
pour gagner du temps de développement. Par exemple, le PIC18F4520 intègre les
« modules » suivants :
●
Les compteurs ................................................................... Timer
●
Les modules « Capture Compare PWM » ............................. CCP
●
Les comparateurs ................................................................. Comparator
●
Les modules de conversion analogique/numérique .............. CAN/CNA
●
Les chiens-de-garde ........................................................ Watchdog
●
Les différents modes de gestion de l'alimentation
La fonctionnalité « Timer »
Les timers sont des registres incrémentés à chaque réalisation d’un événement, la
valeur de ces registres pouvant être pré-positionnée à une valeur initiale.
Les événements qui commandent l'incrémentation sont
●
un cycle d’horloge, c'est la fonction « timer » ;
●
un front montant sur une broche en entrée, c'est la fonction « counter ».
Il en découle que le module timer peut remplir les fonctions suivantes,
●
Utilisation « timer » : permet de fournir une référence temporelle à partir de l’horloge du
micro-contrôleur, notamment dans le cadre d’applications temps réel.
●
Utilisation « counter » : sert à compter un nombre d’événements asynchrones sur une
broche d’entrée du micro-contrôleur.
Illustration par un exemple simple...
Cahier des charges :
On cherche à utiliser le « module timer » du microcontrôleur pour faire clignoter
une LED connectée sur le port RB1. La période est fixée à une fréquence de 1 Hz.
Une méthode générale...
(1) Lire dans la documentation (data-sheet) la section traitant du module.
(2) Déduisez-en les registres à configurer lors de la phase d'initialisation.
(3) Construisez l'algorigramme préalable à l'écriture du programme.
(4) Écrivez le programme assembleur, testez-le et débuggez-le...
Extrait du data-sheet du PIC18F4520, p. 123-125
106
Extrait du data-sheet du PIC18F4520, p. 123-125
Capture, Compare, PWM
Les modules CCPM possède trois modes de fonctionnement :
●
capture
Le mode capture déclenche une action si un événement pré-déterminé apparaît (ex :
changement d’état sur une broche). Utilisé avec les timers, ce module peut compter
les temps d'arrivées.
●
compare
Le mode compare effectue une comparaison permanente entre le contenu d’un timer
et une valeur donnée pour déclencher une action si ces contenus sont égaux.
●
Pulse width modulation (PWM)
Le mode PWM génère un signal rectangulaire de fréquence et de rapport cyclique
choisis par l’utilisateur.
Illustration par un exemple simple...
Cahier des charges :
On cherche à utiliser le « module CCP » du microcontrôleur pour générer un signal
rectangulaire sur la broche RC2. La période du PWM est fixée à une fréquence de
600 Hz et le rapport cyclique à 0,5.
Questions :
(1) Expliquez comment les modules CCP1 et TIMER2 fonctionnent ensemble pour
produire un signal rectangulaire de période et de rapport cyclique donné.
(2) Identifiez les registres à initialiser et les valeurs associées.
(3) Construisez l'algorigramme et écrivez le programme assembleur.
Les comparateurs
Les comparateurs permettent de comparer le signal analogique présent sur un
broche du micro-contrôleur à une valeur de référence.
Cette valeur de référence peut être
●
soit un signal analogique dont on fait l'acquisition sur une
autre broche du micro-contrôleur (convertisseur analogique -
numérique),
●
soit une tension de référence générée en interne par le micro-
contrôleur à l’aide du module de génération de tension de
référence.
Ce principe de fonctionnement décrit ci-contre permet typiquement d'effectuer une
commande de type tout-ou-rien (TOR).
Illustration par un exemple simple...
Cahier des charges :
On reprend le cahier des charges posé pour faire clignoter un LED branché sur RB0
(cf., illustration du module TIMER [Link]) mais on cherche maintenant à ajuster la
fréquence de clignotement en fonction d'une tension présentée sur la broche RA3 du
microcontrôleur. La fréquence sera de 300Hz si la tension est de inférieure à VDD/2 et
de 600 Hz si elle est supérieure à VDD/2.
Questions :
(1) On utilise une référence interne de tension pour générer la valeur de VDD/2.
Expliquez comment le module de tension de référence peut être configuré pour cela.
Expliquez ensuite comment le module de comparaison peut être utilisé pour
réaliser le cahier des charges.
(2) Identifiez les registres à initialiser et les valeurs associées.
(3) Construisez l'algorigramme et écrivez le programme assembleur.
Module de conversion
analogique/numérique
Le module de conversion analogique/numérique permet de convertir le signal
analogique présent sur une broche du micro-contrôleur en un signal numérique.
Les paramètres à prendre en compte pour la numérisation d’un signal sont
●
la pleine échelle du module de conversion A/N
Indique la plage de tension admissible en entrée du module.
●
la dynamique
Indique le nombre de bits utilisés pour coder une valeur
analogique en numérique.
●
la fréquence d’échantillonnage
Notes : (1) la pleine échelle et la dynamique permettent de calculer la résolution en tension du module
de conversion A/N ; (2) la fréquence d'échantillonnage doit respecter le (fameux) « théorème de
Shannon » ; cf cours de traitement du signal.
Illustration par un exemple simple...
Cahier des charges :
On reprend le cahier des charges posé pour générer un signal rectangulaire avec le
module PWM mais on cherche maintenant à ajuster en continu la fréquence de
manière à ce qu'elle soit proportionnelle à la tension présentée sur la broche RA0.
Pour permettre l'ajustement en continu de la tension, on déclenchera la conversion
par interruption du TIMER0 automatiquement tous les 1/100 secondes.
Questions :
(1) Lisez la documentation et expliquez le fonctionnement du CAN sur la base de la
figure 19-1. Reprenez la relation entre la valeur du registre PR2 qui gère la
fréquence et calculez les valeurs extrêmes de fréquence atteignables. Déduisez
de ce qui précède la valeur du prescaler pour obtenir des fréquences prises entre
244 Hz et 60 Khz. La relation entre la conversion et la fréquence est-elle
linéaire ? Sachant que le CAN est un convertisseur 10 bits et que PR2 est un
registre 8 bits, quels sont les bits du CAN que vous allez utiliser ? Quel sera
l'inconvénient éventuel ?
Illustration par un exemple simple...
Questions :
(1) Identifiez les registres à initialiser et les valeurs associées.
(2) Construisez l'algorigramme et écrivez le programme assembleur.
Le « chien de garde » (Watchdog)
Une watchdog (WDT) est un dispositif de protection pour éviter que le micro-
contrôleur ne se bloque. Une watchdog effectue un redémarrage du système (RESET) si
une action définie n’est pas effectuée dans un délai donné.
Concrètement, l’utilisateur affecte une valeur à un registre (Watchdog Postscaler), qui
définit une durée temporelle (timeout). Périodiquement le micro-contrôleur va
incrémenter un registre (Watchdog counter). Si ce registre est plein (overflow), le micro-
contrôleur effectue un re-démarrage.
Pour que le micro-contrôleur ne redémarre pas, le programme doit périodiquement ré-
initialiser le registre (Watchdog counter).
Les différents modes de fonctionnement
En plus du mode de fonctionnement par défaut (Primary Run Mode), les micro-
contrôleurs possèdent de nombreux autres modes de fonctionnement. L'existence de ces
modes vise principalement à réduire la consommation d'énergie qui est une contrainte
forte pour les systèmes embarqués.
On notera principalement trois modes de fonctionnement :
●
run mode --- mode de fonctionnement par défaut du micro-contrôleur, toutes les
fonctions sont activées, la consommation d'énergie est maximale.
●
sleep mode --- le micro-contrôleur est placé en mode sommeil, la consommation
d'énergie est minimale, le micro-contrôleur peut-être réveillé par une interruption,
●
IDLE mode --- le processeur du micro-contrôleur est arrêté, plus aucune instruction
n'est exécutée, l'utilisateur peut choisir de désactiver des fonctions du micro-contrôleur
afin de diminuer la consommation d'énergie. Les fonctions activées restantes fonctionnent
normalement et peuvent réveiller le micro-contrôleur par une interruption.