Documente Academic
Documente Profesional
Documente Cultură
MICROCONTROLEUR - C
MPLABX - XC8
Ce module d’enseignement se base sur les microcontroleurs PIC16F690 et PIC18F2520 de chez Microchip.
L’environnement de développement utilisé est MPLABX de Microchip dans sa version 1.70. Il est dispo-
nible gratuitement sur le site de Microchip, sur toute plate-forme (Windows, Mac, Linux).
Le compilateur C utilisé est XC8 de Microchip dans sa version 1.12. Il est disponible gratuitement sur le
site de Microchip, sur toute plate-forme (Windows, Mac, Linux).
Les cartes d’étude utilisées ont été réalisés par le département GEII de l’IUT de Créteil. Mais les exemples
donnés peuvent être rapidement portés vers d’autres cartes de développement.
Ce document se base sur les documentations suivantes (disponibles sur le site de Microchip) :
– PIC16F690,
– PIC18F2520,
– MPLAB XC8 C Compiler - User’s Guide,
– PIC18 Peripheral Library - Help Document.
Consignes
– Faites valider chacun des exercices par l’enseignant
– Un compte-rendu est obligatoire pour chaque TP et doit etre rendu à la fin de la
séance. Les réponses aux questions dont le numéro est souligné doivent apparaitre
dans le compte-rendu.
–2–
GEII - MC-II2 TP 0
Introduction aux systèmes embarqués
Objectifs
– Comprendre et maîtriser l’organisation fonctionnelle d’une application embarquée
– Connaître les principaux composants d’un système embarqué
1.2. Caractéristiques
Un système embarqué est un système principalement numérique, mais il peut intégrer une partie analogique (condi-
tionnement de signaux provenant de capteurs, modulation, filtrage).
Contrairement à un système plus généraliste (PC standard par exemple qui peut exécuter tout type d’applications), un
système embarqué n’exécute qu’une application dédiée. Cependant, l’interface homme-machine (IHM), faisant le lien
entre l’application et l’utilisateur, peut aller d’une simple LED jusqu’à un écran tactile dernière génération.
Son système matériel est simplifié au maximum permettant ainsi de rendre plus fiable le système, de limiter la
consommation électrique et de réduire les couts de fabrication. Le nombre de ressources (mémoires, entrées-sorties) est
alors limité.
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Un système embarqué est généralement un sous-ensemble d’un système plus complexe dans lequel il remplit une
tache spécifique. Dans l’automobile, par exemple, on peut dénombrer entre 40 et 100 de ces systèmes, qui, regroupés
ensemble, permettent d’assurer la sécurité et le confort des passagers.
1.3. Contraintes
Les systèmes embarqués étant généralement au plus proche des procédés à controler, ils doivent pouvoir fonctionner
dans des conditions environnementales souvent extrêmes (température, humidité...).
Rendre un système autonome nécessite de diminuer au maximum sa consommation électrique. Son faible encom-
brement et son faible poids imposent des contraintes supplémentaires lors de la conception, par exemple pour la dissi-
pation de chaleur.
Certains systèmes nécessitent aussi une gestion du temps très précise et font parfois appel à la notion de temps réel,
intégrant alors des systèmes d’exploitation spécifiques dits temps réels.
Pour résumé, un système embarqué doit être : robuste, simple, fiable, fonctionnel, sûr, tolérant aux fautes, autonome.
2. Constitution
Pour concevoir un système embarqué "intelligent", il existe deux solutions principales :
– des architectures existantes : basées autour d’un processeur ou d’un microcontroleur ;
– des architectures dédiées : basées autour de composants logiques programmables (FPGA 1 ou ASIC 2 ).
2.1. Architecture à processeur / microcontroleur
Les processeurs sont des unités de calculs séquentiels précablées. Ces opérations élémentaires sont appelées ins-
tructions. Une suite séquentielle d’instructions, que l’on appelle programme, est alors écrite afin de pouvoir établir la
liste des calculs à effectuer pour réaliser la (ou les) tache(s) du système.
On utilise plus couramment des microcontroleurs pour les systèmes embarqués, qui intégrent tous les éléments
nécessaires au fonctionnement de l’unité de calculs (mémoires, entrées/sorties...). Ces composants peuvent également
proposer des modules supplémentaires (convertisseurs analogiques-numériques, des gestionnaires de communication...)
permettant de faciliter la mise en oeuvre d’un système embarqué et de sa communication avec l’extérieur.
Ils existent d’ailleurs un grand large choix de composants de ce type et de fabricants qui intégrent généralement un
très (trop) grand nombre de ces modules. Une même entrée-sortie du composants sert alors souvent à plusieurs modules,
ce qui les rend inutilisable en même temps pour une même application.
Les microcontroleurs intègrent également une gestion d’horloge et de plus en plus possèdent leur propre oscillateur
interne. Les fréquences actuelles vont de quelques MHz à quelques centaines de MHz.
L’architecture précablée des microcontroleurs leur confère une facilité de mise en oeuvre gràce à l’utilisation de
modules déjà existants, en particulier pour tout ce qui concerne les communications inter-systèmes (voir section 4). Ils
intègrent également de plus en plus d’entrées et sorties analogiques, permettant la récupération d’informations provenant
de capteurs et la commande de systèmes analogiques.
–4–
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Il est alors possible de concevoir sa propre structure logique et ainsi pouvoir réaliser les fonctions nécessaires
à l’application finale. On parle alors d’architecture dédiée à une application particulière, n’incluant que les modules
indispensables.
L’approche "schématique" au niveau porte logique ou fonctionnalités de base RTL (Register Transfer Logic) est
délaissée pour la conception de ces systèmes complexes au profit d’une approche "textuelle", appelée encore description
comportementale. On utilise, pour cela, des langages de description de matériel comme le VHDL (Very high speed
integrated circuit Hardware Description Language).
Il est également possible de modifier le comportement du système en reconfigurant le FPGA dynamiquement, c’est
à dire en cours d’utilisation. On peut ainsi modifier certaines fonctions au gré de l’évolution du système controlé.
La contrepartie est qu’il n’existe pas de modules préconçus déjà intégrés dans ces composants. Il est alors nécessaire
de les développer soi-même. La phase de développement peut alors en être affectée.
Des bibliothèques de fonctionnalités (interface USB, un contrôleur MAC Ethernet...) ont cependant rapidement
vues le jour. On appelle ces fonctionnalités des blocs IP (Intellectual Property). Un site de référence pour ces IP est
http ://www.opencores.org
2.3. Choix de l’architecture
Le choix d’une architecture à microcontroleur plutôt qu’une architecture à composants logiques programmables, ou
inversement, est souvent difficile et pourtant crucial pour le reste du développement des systèmes embarqués.
Les critères à prendre en compte sont les suivants :
– le nombre de fonctions à réaliser ;
– le nombre d’entrées-sorties nécessaires ;
– la vitesse d’exécution de ces fonctions ;
– la consommation électrique ;
– l’aspect temps réel et multitaches.
–5–
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
De plus en plus de plateformes de développement proposent les deux types de composants sur une même carte. On
parle alors de co-design : une partie est developpée sur microcontroleur (communication avec l’extérieur par exemple) et
l’autre partie sur FPGA (traitement de données rapide).
3. Exemples d’applications
Les domaines dans lesquels on trouve des systèmes embarqués sont de plus en plus nombreux. La liste suivante n’est
pas exhaustive.
– Automate programmable industriel, contrôle-commande
– Electroménager : télévision, four à micro-ondes
– Distributeur automatique bancaire
– Métrologie
– Applications militaires : drones, missiles
– Télécommunication : box, routeur, pare-feu, serveur de temps, téléphone portable...
– Transport : automobile, aéronautique...
– Astronautique : fusée, satellite artificiel, sonde spatiale, etc.
4. Communications
Les systèmes embarqués sont souvent des sous-ensembles d’un système plus important. Il est alors essentiel de les
faire communiquer entre eux pour obtenir le fonctionnement global souhaité.
Selon le nombre de systèmes embarqués (ou noeuds) communicants sur une même application, plusieurs choix tech-
nologiques de communication peuvent exister :
– Liaison point à point, lorsque le nombre de noeuds est très faible ;
– Utilisation d’un réseau de terrain.
Dans tous les cas, il est nécessaire de mettre en place :
– un bus de communication : moyen matériel pour transmettre des informations numériques ;
– un protocole de communication : ensemble de règles permettant de régir des communications sur un réseau (prise
de parole d’un noeud, arbitrage, gestion des erreurs...).
La mise en place d’un réseau de terrain ainsi que des protocoles associés n’est pas l’objet de ce module. Tout ceci
sera étudié dans un module annexe.
–6–
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
1 INITIALISATION DU COMPOSANT
2
3 BOUCLEINFINIE
4 S I (URGENCE = 1 )
5 LED = 1 ;
6 MOTEUR = 0 ;
7 SINON
8 S I (MARCHE = 1 )
9 LED = !LED ;
10 MOTEUR = 1 ;
11 SINON / / on s t o p p e t o u t
12 LED = 0 ;
13 MOTEUR = 0 ;
14 temporisation (1);
15 FINBOUCLE
Cette solution n’est pas satisfaisante. Certains évènements peuvent avoir des répercussions graves (humaines, éco-
nomiques, écologiques) s’ils ne sont pas pris en compte au plus vite. Ici, le bouton d’arrêt d’urgence n’est scruté que
toutes les secondes...
5.2. Entrées sur interruption
L’autre possibilité pour gérer des évènements extérieurs est d’utiliser un mode dit par interruption. Chaque péri-
phérique souhaitant interagir avec le microcontroleur sera relié à une broche spécifique dite entrée d’interruption et sa
demande sera alors prise en compte instantanément. Le programme principal sera interrompu pour exécuter une fonction
courte et spécifique au périphérique demandeur (lecture d’une touche sur le clavier, mise en sécurité du systèmes après
appui sur le bouton d’arrêt d’urgence...)
–7–
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Cette gestion plus précise des évènements nécessite cependant une struc-
ture matérielle spécifique. Tous les microcontroleurs ne sont pas capables
de gèrer des interruptions. Au contraire, d’autres sont capables de gérer plu-
sieurs niveaux de priorité dans les interruptions et proposent un grand nombre
d’entrée spécifique d’interruption.
5.3. Systèmes, tâches et évènements
Un système est caractérisé par :
– sa relation entrées-sorties
– son temps de réponse
Tout système embarqué pourra être découpé en un certains nombres de tâches spécifiques à exécuter selon un ordre
particulier. Certains évènements doivent également être pris en compte dès qu’ils arrivent (arrêt d’urgence par exemple)
et doivent exécuter des tâches plus prioritaires que d’autres.
Gestion de tâches :
– priorité
– ordonnancement
Gestion d’évènements (indiquant l’évolution d’un système) :
– synchrones
– asynchrones (non prédictibles) - interruptions
Selon la complexité du systèmes, on peut voir apparaitre un certains nombres de tâches et d’évènements extérieurs
susceptibles d’interrompre le programme initial. Si ce nombre de taches devient trop important, il est difficile de prévoir
leur ordonnancement et les interactions possibles entre elles et les évènements.
Il peut également arriver que certaines tâches doivent s’exécuter en parallèle.
5.4. Vers des systèmes d’exploitation temps réels et multitaches
Les systèmes embarqués devenant de plus en plus complexes à programmer, il est souvent difficile de concevoir la
partie logicielle sur la base d’une boucle infinie et d’une gestion des interruptions. De plus en plus de concepteurs adoptent
alors un système d’exploitation, offrant différents services permettant une meilleure gestion de la complexité du logiciel
embarqué.
–8–
GEII - MC-II2 TP 1
Programmation en C des PIC
Objectifs
– Comprendre les mécanismes de compilation et de gestion des variables sur un système embarqué
– Savoir utiliser des bibliothèques de fonctions
– Savoir créer et utiliser ses propres bibliothèques de fonctions
EXERCICE 1.2
Q.2. 1. Ajouter la définition et l’initialisation (non nulle) d’une variable de type int au programme précé-
dent. Compiler le code.
Q.2. 2. Quelle place occupe le programme de base ? Combien d’octets sont-ils utilisés en mémoire RAM ?
Q.2. 3. Ajouter une seconde variable de type int. Combien d’octets sont-ils utilisés en mémoire RAM à
présent ? Que pouvez-vous en conclure sur la place occupée par une variable de type int en RAM ?
Q.2. 4. Réécrire cet exemple en langage assembleur.
Q.2. 5. Il est possible d’accèder au code compilé par XC8 en allant dans le menu Window / Output /
Disassembly Listing File. Le code obtenu est-il cohérent par rapport à celui que vous avez écrit ? A quoi corres-
pondent les valeurs de la première colonne au niveau des instructions du code obtenu ?
Q.2. 6. Que pouvez-vous dire du code obtenu par rapport au code écrit précédemment en assembleur ?
EXERCICE 1.3
Q.3. 1. Remplacer la définition et l’initialisation (non nulle) de la variable de type int par une variable du
type char dans le programme précédent. Compiler le code.
Q.3. 2. Quelle place occupe le programme de base ? Combien d’octets sont-ils utilisés en mémoire RAM ?
Q.3. 3. Le programme assembleur obtenu est-il différent de celui de l’exercice précédent ?
Q.3. 4. Ajouter une seconde variable de type char. Combien d’octets sont-ils utilisés en mémoire RAM
à présent ? Que pouvez-vous en conclure sur la place occupée par une variable de type char en RAM ?
Q.3. 5. Comment écrire la même définition en binaire ? en hexadécimal ? Cela a-t-il un impact sur le code
source résultant ?
– 10 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
EXERCICE 1.4
Q.4. 1. Remplacer la définition et l’initialisation (non nulle) de la variable de type char par une variable
du type double dans le programme précédent. Compiler le code.
Q.4. 2. Quelle place occupe le programme de base ? Combien d’octets sont-ils utilisés en mémoire RAM ?
Q.4. 3. Le programme assembleur obtenu est-il différent de celui de l’exercice précédent ?
Q.4. 4. Ajouter une seconde variable de type double. Combien d’octets sont-ils utilisés en mémoire RAM
à présent ? Que pouvez-vous en conclure sur la place occupée par une variable de type double en RAM ?
EXERCICE 1.5
Q.5. 1. Recopier et remplir le tableau suivant (on suppose que l’on travaille en entier non signé) :
Type de variable Taille en bits Taille en octets Valeur min Valeur max
char
int
double
Q.5. 2. Quel est le format initial des données sur les microcontroleurs PIC16F ou 18F ? Quel est alors le
type de données en C le plus proche des données du microcontroleur ?
EXERCICE 1.6
Q.6. 1. Ecrire un programme en assembleur qui initialise une variable à une valeur non nulle et qui teste
si cette variable vaut une certaine valeur. Si cette variable est égale à la valeur testée, alors elle réinitialise cette
variable à 0, sinon il ne se passe rien. Combien de place prendrait ce programme en mémoire ?
Q.6. 2. Ecrire ce même programme en C et compilez-le. Le code assembleur obtenu est-il similaire à celui
que vous avez écrit à la question précédente ? Quelle place prend-il en mémoire ?
Q.6. 3. Toutes les lignes du code désassemblé sont-elles utiles ? Que pouvez-vous en conclure quand à
l’utilisation du langage C pour l’écriture de programme sur microcontroleur ?
2.3.1 Compteur
– 11 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Dans cette boucle, la variable a joue le rôle d’un compteur variant de 0 à 9, ce qui donne 10 itérations de action().
2.3.2 Décompteur
Cependant, le jeu d’instruction du PIC incite à coder ces boucles sous forme descendante, en mettant à profit l’ins-
truction decfsz pour obtenir un programme très efficace. Le modèle en C pourrait s’écrire comme ci-dessous :
1 char a , b ;
2 void a c t i o n ( ) {
3 b = b ∗ 2;
4 }
5 i n t main ( v o i d ) {
6 b = 0;
7
8 f o r ( a = 1 0 ; a > 0 ; a − −){
9 action ();
10 }
11
12 return 0;
13 }
– 12 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
3. Utilisation de bibliothèques
XC8 est accompagné de bibliothèques de fonctions précompilées dont les définitions sont réparties dans divers fichiers
d’en-tête .h. La documentation de ces fonctions se trouve dans le fichier MPLAB-XC8-UserGuide.pdf.
Une seconde documentation est également disponible pour les bibliothèques des PIC18F dans le fichier MPLAB-
XC8-P18-Librairies.pdf.
3.1. Bibliothèque de base - xc.h
La bibliothèque <xc.h> est incluse dans chaque source en langage C que vous écrirez à l’aide du compilateur XC8,
quelque soit le microcontroleur ciblé. C’est une bibliothèque générique qui inclue l’ensemble des définitions et des macros
utilisables sur la cible microcontroleur choisi en début de projet.
EXERCICE 1.8
Q.8. 1. Quel est le prototype de la fonction __delay_ms ? A quoi sert le paramètre attendu par cette fonc-
tion ? Quelles sont les autres fonctions du même type ? A quoi sert l’instruction de pré-processeur _XTAL_FREQ ?
Q.8. 2. Ecrire un programme qui fait appel à cette fonction et compilez-le.
Q.8. 3. Comment a été remplacé l’appel à cette fonction dans le code désassemblé ? Est-ce la meilleure
façon de réaliser une temporisation ? Quelle est l’autre possibilité ? Que fait-elle intervenir ?
Q.8. 4. Quelle place occupe le programme de base ? Combien d’octets sont-ils utilisés en mémoire RAM ?
3.4. Conclusion
EXERCICE 1.8 - suite
Q.8. 11. Que pouvez-vous conclure quant aux avantages et inconvénients de l’utilisation de bibliothèque
dans un programme pour système embarqué ?
– 13 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
– 14 –
GEII - MC-II2 TP 2
Constitution d’un système embarqué (PIC16F)
Objectifs
– Configurer et utiliser les modules du PIC16F690 en langage C
– Réaliser des programmes simples pour système embarqué
– Chercher les informations dans une documentation technique
Pour pouvoir récupérer la valeur du registre STATUS par exemple, il suffira d’écrire :
1 char c ;
2 c = STATUS ;
Il est également possible d’affecter une valeur à un seul bit. Pour cela, il faut ajouter le terme "bits" à la fin du nom
du registre auquel on souhaite accèder, et ajouter le nom du bit souhaité séparé par un point.
Pour pouvoir mettre à un le bit 2 du port A par exemple, il suffira d’écrire :
1 PORTAbits . RA2 = 1 ;
Pour pouvoir récupérer la valeur du bit Z du registre STATUS par exemple, il suffira d’écrire :
1 char c ;
2 c = STATUSbits . Z ;
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
2. Configuration du microcontroleur
2.1. Registre de configuration
Afin de garantir la parfaite compatibilité du microcontroleur avec l’application développée, ces composants intègrent
un registre de configuration spécifique. L’état de ces registres est pris en compte uniquement au démarrage du micro-
controleur et ne peut être modifié en cours de programme. Ces registres déterminent les modes de fonctionnement du
composant.
Pour plus de détails, référez-vous à la section "Configuration Bits" du chapitre "Special Features of the CPU" de la
documentation technique du composant.
Sous MPLABX, pour accèder à la configuration de ces bits, il faut aller dans Window / PIC Memory Views /
Configuration Bits. Une fenêtre s’ouvre alors et vous propose de modifier la valeur de chacun des paramètres énoncés
précédemment.
Il est parfois possible de choisir plus précisément la fréquence de sortie de l’oscillateur interne (voir schéma suivant).
Il arrive également que le microcontroleur soit équipé de deux oscillateurs internes :
– un oscillateur rapide (de l’ordre de la dizaine de MHz), pour pouvoir exécuter des instructions à un rythme com-
patible avec l’application ;
– un oscillateur lent (de l’ordre de la dizaine de kHz), moins gourmand en énergie, réservé en particulier au phase de
mise en veille de l’application.
– 16 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
– 17 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
– 18 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Le timer va servir à générer un signal de modulation de forme triangulaire (compteur binaire) qui fixe la fréquence
(ou période) du signal de sortie.
Le comparateur va en permanence comparer ce signal de modulation à un valeur de référence permettant de fixer le
rapport cyclique du signal de sortie.
– 19 –
GEII - MC-II2 TP 3
Migration vers les PIC18F
Objectifs
– Découvrir une nouvelle architecture de microcontroleur
– Utiliser certains modules des PIC18F
Il n’y a pas une grande différence dans l’architecture globale des microcontroleurs de la famille 18F par rapport à
celle des 16F. On retrouve les mêmes types d’espace mémoire, d’entrées-sorties et de modules.
Par contre, les PIC18F possèdent un jeu d’instructions plus étendu que les PIC16F : 75 instructions pour le PIC18F
contre 35 seulement pour les PIC16F. Ce nouveau jeu d’instructions permet un passage vers l’assembleur plus optimisé
que dans le cas des PIC16F, certaines fonctions étant alors déjà précablées dans l’unité de calcul.
Par exemple, sur les PIC16F, seule l’instruction DECFSZ existe pour décrémenter et tester si une variable vaut 0.
Dans la version PIC18F, trois autres fonctions ont vu leur apparition : DECFSNZ (décrémente et teste si une variable
n’est pas nulle), INCFSZ (incrémente et teste si une variable est nulle) et INCFSNZ (incrémente et teste si une variable
est non nulle).
1.2. Carte d’étude basée sur un PIC18F2520
Il est rappelé ici le fonctionnement de la carte d’étude basée sur un PIC18F2520.
La carte est alimentée via le port USB. Elle comporte un micro-contrôleur PIC18F2520, 6 LEDs, 3 boutons poussoirs,
2 interrupteurs, un potentiomètre, une photorésistance et un capteur de température. Elle est prévue pour fonctionner
jusqu’à une cadence de 8 MHz (oscillateur interne) mais peut monter à 32 MHz par utilisation d’une PLL interne.
La communication avec la carte et la programmation du PIC se font par l’intermédiaire d’une liaison série (RS-232).
Pour cela, un programme nommé bootloader est déjà présent dans le PIC. Il permet d’établir la communication série avec
un logiciel de communication (type Tiny Bootloader).
Les composants sont affectés aux ports d’entrées/sorties de la façon suivante :
– 21 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
L’utilisation de l’ADC sur les PIC18F est, comme sur la famille 16F, associée à des registres permettant de controler
les opérations effectuées par le module ADC (ADCON0), de configurer les broches utilisées (ADCON1) et de configurer
l’horloge utilisée par le convertisseur et la justification du résultat (ADCON2).
Le résultat est ensuite obtenu dans les registres ADRESL et ADRESH.
– 22 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Le temps d’acquisition total doit alors tenir compte de ces deux étapes. Il est paramétré à l’aide des différents registres
associés à l’ADC. En particulier, il est nécessaire de fixer le paramètres suivants :
– le temps de conversion par bits (T AD - typiquement de 1 µs),
– le temps d’acquisition (T ACQ ).
– 23 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
On rappelle que les données envoyées et reçues sur l’USART ne peuvent être que du type caractère (char).
– 24 –
GEII - MC-II2 TP 4
Gestion du temps / Timers matériel et logiciel
Objectifs
– Mettre en oeuvre des interruptions en langage C sur microcontroleur
– Faire la différence entre timer matériel et timer logiciel
– Mettre en oeuvre un timer matériel pour la gestion du temps
– Mettre en oeuvre un timer logiciel pour la gestion de taches particulières
Le réglage du timer TMR0 et de son mode d’interruption se fait par la fonction préprogrammée OpenTimer0(...).
1 v o i d i n t e r r u p t HighISR ( v o i d )
2 {
3 i f ( INTCONbits . TMR0IF ) {
4 i f ( t _ a s t != 0 ) t _ a s t − −;
5 i f ( t_mono != 0 ) t_mono − −;
6 INTCONbits . TMR0IF = 0 ;
7 }
8 }
– 26 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Le timer TMR0 est un compteur paramétrable en mode 8 bits ou en mode 16 bits. Dans tous les cas, le timer TMR0
compte à chaque front montant de l’horloge d’entrée et produit un débordement lorsqu’il repasse de sa valeur maximale
à 0. Il génére alors une interruption détectable sur TMR0IF du registre INTCON.
L’horloge d’entrée de ce compteur est également paramétrable : on peut ainsi choisir l’oscillateur interne ou une entrée
extérieure. On peut également utiliser un pré-diviseur pour réduire la fréquence en entrée du compteur TMR0.
La relation qu’il existe entre la fréquence des interruptions sur le timer TMR0 et la fréquence d’oscillation (dans le
cas du choix de l’oscillateur interne) est la suivante :
FOS C
fT MR0 = MODE
(1)
4· 2 · PREDIV
– 27 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
On reprend la configuration précédente pour le TMR0 : un mode de 8 bits, la source interne d’horloge à une cadence
de 2 Mhz et une prédivision de 16.
Il faut à présent mettre en place des timers logiciels basés sur la référence de temps du timer TMR0 : un pour l’astable
et un pour le monostable.
– 28 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
EXERCICE 4.3
Q.3. 1. Sur quel principe (vu précédemment) sera basé le timer_total ? Le timer_on ?
Q.3. 2. Quelle fréquence minimale doit avoir le signal de sortie de ce système pour ne pas voir le scin-
tillement de la LED ?
Q.3. 3. Quelle est la valeur maximale que pourra prendre timer_on si on utilise la valeur convertie du
potentiomètre ? Que vaut le rapport cyclique en fonction de timer_on et timer_total ? Quelle sera alors la valeur
de préchargement à associer au timer_total pour que le rapport cyclique maximal soit de 1 ?
Q.3. 4. Quels doivent être alors les paramètres du timer TMR0 ?
Q.2. 5. Ecrire et tester le programme en C qui permet de commander la LED1.
Q.2. 6. Ajouter un second PWM logiciel pour la LED2. Les deux systèmes doivent fonctionner en paral-
lèle.
– 29 –
GEII - MC-II2 TP 5
Programmation par machine à état
Objectifs
– Programmer une machine à état sur un microcontroleur.
Dans une telle machine, la sortie ne dépend que de l’état de la machine : elle ne change que lors d’un changement
d’état. Les sorties sont synchrones avec les transitions d’état et les fronts d’horloge.
Une représentation possible des machines de Moore est le diagramme d’états. Un exemple est donné ci-après.
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
Chaque cercle représente un état possible de la machine. Les sorties étant fonction exclusivement de l’état, leurs
valeurs sont indiquées dans les cercles.
On passe d’un état à un autre s’il existe une transition entre ces états, représentée par une flèche. Dans le cas d’une
machine de Moore (système séquentiel synchrone), le passage d’une transition ne peut se faire que lorsque la condition
logique associée est vérifiée et en présence d’un front montant.
Voici un modèle possible de représentation d’une machine à états en langage C. La boucle principale doit être exécutée
avec une fréquence de répétition suffisante pour prendre en compte les changements des entrées (ici entree).
1 char e t a t = ETAT0 ;
2 while ( 1 )
3 {
4 i f ( clk = 0){
5 c l k = M;
6
7 / / Etats
8 switch ( e t a t )
9 {
10 c a s e ETAT0 :
11 i f ( e n t r e e == VAL1 ) e t a t = ETAT1 ;
12 i f ( e n t r e e == VAL2 ) e t a t = ETAT3 ;
13 i f ( e n t r e e == VAL3 ) e t a t = ETAT4 ;
14 break ;
15 c a s e ETAT1 : e t c .
16 / / eventuellement default
17 }
18 }
19 / / C a l c u l d e s s o r t i e s ( Moore )
20 s o r t i e 1 = ( ( e t a t == ETAT1 ) | | ( e t a t == ETAT4 ) ) ;
21 ...
22 } / / fin boucle p r i n c i p a l e
– 31 –
IUT Créteil - GEII - MC-II2 - SYSTEMES EMBARQUES AVANCES MICROCONTROLEUR - C
– 32 –
GEII - MC-II2 Annexe A
Création d’un projet sous MPLABX - Compilateur XC8
La description qui suit est basée sur les versions 1.70 de MPLABX et 1.12 de XC8, sur n’importe quelle plateforme (Mac, Linux ou Windows).
MPLABX - l’interface
Compilation
La compilation se fait en cliquant sur l’icone suivante de l’interface .
Si la compilation ne retourne pas d’erreurs, un fichier *.hex est alors généré dans le répertoire /dist/default/produc-
tion/ du répertoire de travail.
– 34 –
GEII - MC-II2 Annexe B
Rebonds mécaniques
Phénomène
Les boutons-poussoirs possèdent trois bornes. La borne centrale repérée par C est la borne commune en contact avec
la borne NC lorsque le bouton est au repos (bouton relâché). En appuyant sur le bouton, la borne C est en contact avec
la borne NO. Ce type de bouton est particulièrement adapté pour générer des impulsions de commande, de durée plus ou
moins longue.
En pratique, le bouton-poussoir n’est pas un dispositif mécanique parfait et les contacts métalliques rebondissent
plusieurs fois l’un sur l’autre à la fermeture (du à un ressort de renvoi). Pratiquement, la tension à ses bornes varie
comme indiqué ci-dessous. L’amplitude, la durée et le nombre des rebonds engendrés dépendent des caractéristiques des
boutons-poussoirs et du circuit auquel ils se rattachent.
Ces impulsions de tension créées à la fermeture des contacts C-NO et C-NC sont très généralement indésirables pour
les circuits électroniques. Pour éviter cet inconvénient.