Beruflich Dokumente
Kultur Dokumente
Travaux Pratiques
Informatique
Industrielle
Pour chaque tâche que vous aurez à réaliser, nous vous invitons à enregistrer votre programme sous un nom
particulier pour garder une sauvegarde de travail. Pour faciliter le débogage et assurer la maintenance et la portabilité de
vos codes, il est primordial que vous commenciez par rédiger un algorigramme, que vous commentiez clairement votre
programme et que vous pensiez à le rendre le plus clair possible (ex : en choisissant des noms appropriés pour les
labels).
Concernant l'évaluation de votre travail, nous vous demanderons de nous présenter le programme
correspondant à chaque tâche que vous aurez à programmer sur le simulateur ou sur le kit de démonstration (cf. plus
bas). Nous corrigerons également vos codes en portant une attention particulière à la lisibilité (pensez donc aux
commentaires !). Enfin, vous devrez également nous rendre les algorigrammes qui correspondent aux codes.
2. Le Matériel
Le micro-contrôleur utilisé est le PIC18F4520 de Microchip. C'est un micro-contrôleur 8 bits disposant d'une
mémoire de programme de 32 Ko, de 1536 octets de RAM (Random Access Memory), d'une EEPROM (Electrically
Erasable Programmable Read Only Memory) de 256 octets et de 36 entrées/sorties.
Une part importante de la difficulté pour programmer un micro-contrôleur réside dans l'acquisition
d'informations. Pour acquérir cette compétence, nous vous invitons à vous référer fréquemment à la documentation
technique du micro-contrôleur, ainsi qu'à la documentation technique de la carte d'évaluation, cf. les documentations
électroniques.
Nom d'utilisateur :
Mot de passe :
Avec votre compte vous avez droit à un espace de stockage sur le serveur. Cette espace de sotckage apparait
dans « Poste de Travail » sous le nom de « voir le nom ». C'est ici que vous devez stocker tous vos documents afin
qu'ils vous soient disponibles sur toutes les machines de TP.
Il vous est fortement conseillé de bien ranger vos documents tout au long des séances. pour chacun des TP, faîtes un
répertoire associé ex: tp3 pour le tp n°3. Puis pour chaque question si c'est nécessaire faîtes des sous réperoires
question5 par exemple.
https://sites.google.com/site/infoindusamu/
Travaux Pratiques de Microcontrôleur – PIC 18F4520
4. TP n°1 : Initiation à MPLAB IDE
Le but de ce TP est de se familiariser avec la suite logicielle « MPLAB Integrated Development Environment »
(v8.91) de Microchip afin de pouvoir utiliser les fonctions de bases de cet outil développement à savoir : créer un projet,
éditer et compiler un programme en assembleur, simuler son fonctionnement et enfin programmer le microcontrôleur
(µC). Les différentes fonctions sont expliquées à travers deux programmes qui vous sont donnés.
On notera que les boutons poussoirs sont branchés au microcontrôleur en logique négative. L'état « bouton
appuyé » correspond donc à un 0 logique. Les LED sont câblées en logique positive, elles s'allument pour un 1 logique.
Le fonctionnement demandé peut être reproduit par l'algorigramme ci-dessous.
Initialisation du µ C
oui RA 4 = 0 non
S2 appuyé
RB 0 = 1 RB0 = 0
Allumer L1 Eteindre L1
Tout au long des travaux pratiques, nous vous demandons d'établir un glossaire des
différentes instructions rencontrées avec leur explication en français. Ce glossaire vous sera
très utile pour les différents programmes que vous serez amenés à réaliser.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
4.2. Édition et Compilation du programme
Cette partie permet d'apprendre à créer un projet MPLAB, saisir un programme en assembleur et le compiler.
4.2.1. Démarrage
Avant de commencer, créer le répertoire tp1 puis dans ce répertoire créer à nouveau un répertoire
interrupteur.
Copier dans ce dernier répertoire les fichiers P18F4520.inc et CONFIG.inc
Lancer la suite logicielle MPLAB IDE à partir de l’icône qui se trouve sur votre bureau.
Penser à ajouter des commentaires au programme pour montrer que vous avez bien compris les différentes
instructions. Une ligne de commentaire commence par « ; ».
Workspace
Architecture et
contenu du projet Output
Interface
MPLAB Développeur
Editor
Edition des
fichiers
de programme,
de configuration
Figure 2: MPLAB IDE, Mode Edition
4.2.4. Compilation
Cliquer sur Project >> Build All … ou sur l’icône de la barre de menu ou encore Ctrl+F10 pour
compiler le projet complet. Erreurs et warnings sont signalés dans la fenêtre Output ainsi que le résultat de
la compilation BUILD SUCCEEDED ou BUILD FAILED.
En double-cliquant sur une erreur ou un warning dans la fenêtre Output, vous serez amener directement à
la ligne concernée dans votre programme.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
4.3. Simulation
Avant d’envoyer un programme au µC, vous pouvez tester son fonctionnement dans le simulateur (Debugger)
MPLAB SIM. Pour lancer le simulateur, cliquer sur Debugger >> Select Tool >> MPLAB SIM. Une nouvelle barre
d’outils est ajoutée ainsi qu’un onglet « MPLAB SIM » dans la fenêtre Output. Le simulateur fonctionne selon trois
modes :
le mode Step By Step qui permet de faire une exécution pas à pas du programme (vous êtes alors l’horloge
du µC).
le mode Animate qui exécute automatiquement le programme mais à une vitesse réduite pour que l’on
puisse suivre l'éxécution.
le mode Run où le programme est exécuté automatiquement à la vitesse du PC.
Dans les deux premiers modes, nous obtenons des résultats au fur et à mesure de la simulation alors que dans le
dernier, les résultats ne sont visibles que lorsque la simulation est stoppée. Dans ce paragraphe, nous nous intéressons
aux modes Animate et Step By Step car ils nous permettent de voir qu’elle est l’influence des entrées sur les sorties.
Le réglage de la fréquence de l’oscillateur utilisé se fait dans Debugger >> Settings …. Dans notre cas c’est 4
Mhz.
L’onglet « Pin / Register Actions » de la fenêtre « Stimulus » permet la saisie des événements en programmant
leurs dates d’arrivée (événements synchrones).
Ajouter une colonne RA4 au tableau d’événement (bouton « Clic here to Add Signals »)
Rechercher RA4 dans la liste « Available Signals » et l’ajouter à la liste « Selected Signals »
Remplir la table d’événement (Time, RA4) avec (0,1) (10,0) (25,1)
Choisir cyc (cycle) comme base de temps dans menu « Time Units »
Enregistrer la table (bouton « Save Workbook »)
L’onglet « Asynch » de la fenêtre « Stimulus » permet de pré-programmer des boutons (colonne « Fire ») à la
génération d’événement (événements asynchrones).
Démarche de création d’événement asynchrone :
Après chaque changement dans l’échéancier d’événement, cliquer sur « Apply » afin que ces changements
soient pris en compte par la simulation.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
Déclencher
Logic Analyzer
Graphe d’évolution
de bits
Editor Watch
La flèche verte Affichage de l’état
symbolise le Program courant
Counter des registres et variables
Vous pouvez également faire avancer le programme pas à pas (mode « Step By Step ») avec le bouton « Step
Into » . On notera que les boutons « Step Over » et « Step Out » permettent respectivement une exécution pas
à pas avec une exécution automatique des sous-programmes et une exécution jusqu’à la fin des sous-programmes.
Dans MPLAB, sous le menu Programmer > Select Programmer chosir « 1 PICSTART Plus ». Un nouvel
onglet est alors ajouté à la fenêtre « Output ».
Configurer le port COM sur lequel est connecté le programmateur (COM1), menu Programmer > Settings
...
Activer le programmateur, menu Programmer > Enable Programmer, une nouvelle barre d'outils est
ajoutée.
Envoyer votre programme, menu Programmer > Program ou en cliquant sur , le transfert est terminé
lorsque la LED jaune Activate du programmateur est éteinte et que le message « Programming/Verification
completed successfully! » apparaît dans la fenêtre Output.
Placer le µC sur la carte PICDEM 2 Plus (Attention au sens !) mettre la carte sous tension et ça marche ...
Travaux Pratiques de Microcontrôleur – PIC 18F4520
Lors des phases de manipulation du microcontrôleur, vérifier que la carte PICDEM 2 Plus ne soit pas sous
tension et faîtes attention aux pattes, elles sont fragiles.
;----- Initialisation
Init clrf PORTB Remise à zéro des bascules D du port B et définition du
movlw h'00' port B en sortie.
movwf TRISB
;----- Sous-programme
tempo250ms
movlw t10
movwf t1
comp1 dcfsnz t1
return Sous programme de temporisation (à compléter)
movlw t20 On réalise deux boucles imbriquées qui « occupe » le
movwf t2 µC durant environ 250 ms.
comp2 dcfsnz t2
goto comp1
goto comp2
END
Travaux Pratiques de Microcontrôleur – PIC 18F4520
Comprendre le programme « clignotant » et réaliser l'algorigramme associé.
Expliquer l’utilité de xorwf dans le programme principal (utiliser une table de vérité).
Calculer les valeurs d’initialisation t10 et t20 pour que le sous programme de temporisation s’exécute en 250 ms ± 1
ms. Le nombre de cycle requis par chaque instruction est donné dans le jeu d’instruction.
Créer un nouveau projet dans MPLAB et le sauver dans le répertoire tp1/cligno puis saisir le programme précédent
en remplaçant t10 et t20 par leur valeur (pour informer le compilateur de la base dans laquelle la valeur est écrite on
précède la valeur de la première lettre de la base, ainsi 192 en décimal s’écrit d’192’, h’C0’ en hexadécimal ou encore
b’11000000’ en binaire).
Compiler votre programme et passer à la partie simulation.
N’oubliez pas de copier les fichiers P18F4520.inc et CONFIG.inc dans le répertoire tp1/cligno.
4.5.2. Simulation
Vous pouvez simuler le programme de la même manière que le programme « interrupteur » mais vous vous
apercevrez très vite que c’est très long du fait de l’animation et de la temporisation. (Vous pouvez tout de même le faire
pour bien comprendre mais en initialisant t10 et t20 à 3 et 5 par exemple.) Nous allons donc faire les simulations en
mode Run, exécution automatique.
Pour notre programme, nous n’avons besoin d’aucun événement d’entrée mais si besoin avait été on aurait pu
saisir un échéancier comme précédemment. En mode « Run » le programme s’exécute donc de façon automatique et ne
s’arrête que lorsqu’il rencontre un point d’arrêt ou à la fin du programme. Il faut donc placer correctement les points
d’arrêt afin de valider le fonctionnement de notre programme. Pour observer la durée de la temporisation il faut donc
mettre un point d’arrêt sur la ligne d’appel du sous programme de temporisation et un autre sur la ligne suivante. Pour
ajouter un point d’arrêt , double cliquer sur la ligne du programme où vous le souhaitez, ou alors utiliser le menu
Debugger >> Breakpoints … disponible depuis la touche F2.
Nous allons suivre l’exécution du programme à l’aide de la fenêtre « Simulator Trace » disponible dans le menu
« View ». Nous allons nous intéresser plus particulièrement à la colonne « Time ». Vous pouvez changer l’unité de
temps de cette colonne par un clic droit menu « Display Time ». Lorsque vous affichez le temps en toutes
autres unités que cycle, la valeur affichée dépend de la fréquence de l’oscillateur du µC.
Vous pouvez alors calculer la durée de la temporisation d = t f – ti = 250299 cycles soit 250,299 ms avec un
oscillateur à 4 MHz. Utiliser cette méthode pour valider vos initialisations de t10 et t20.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
Une fois les simulations terminées transférer le programme dans le microcontôleur, et effectuez le test : la LED
connectée au port RB0 clignote-t-elle ?
Travaux Pratiques de Microcontrôleur – PIC 18F4520
L'énoncé demande de faire clignoter la led à une fréquence de 2Hz donc une période de comptage de 1s. Avec la
configuration choisi précédemment, on a une interruption toutes les (1+t)s, si on souhaite mesuer le temps précisement
cette erreur de t seconde n'est pas négligeable.
Pour compenser cette erreur décalage, l'idée est d'initialiser les registres TMR0H TMR0L afin que le comptage
ne commence pas à 0 mais à une valeur min permettant d'annuler t comme le montre la figure 15.
Pour communiquer avec l'extérieur tout afficheur à besoin d'un circuit spécialisé de gestion appelé « contrôleur
d'affichage », il en existe différents modèles sur le marché mais ils ont tous le même fonctionnement. La carte
d'évaluation est équipée du modèle HD44780U de SHARP. Le contrôleur sert donc d'interface entre le microcontrôleur
et l'afficheur (cf. figure 9). Le but du driver est de gérer le bus CONTROL afin que le contrôleur d'affichage comprenne
le bus DATA et affiche ce que l'on souhaite sur l'écran LCD.
Le contrôleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex: effacer l'écran)
ou une donnée (ex: le caractère A). Ordres ou données sont envoyés sur le bus DATA sous forme d'octets (8 bits). Mais
pour ne pas utiliser toutes les broches de sorties d'un microcontrôleur pour communiquer avec un LCD, les contrôleurs
d'affichage fonctionnent également en 4 bits, un nombre codé sur 4 bits s'appelle un quartet. En mode 4 bits, un octet est
envoyé en deux fois : le quartet de poids fort puis le quartet de poids faible.
Les connexions entre le contrôleur d'affichage et le microcontrôleur sont regroupées dans le tableau 1.
D'après le tableau 1 et le schéma extrait du User’s Guide, quel est le mode de fonctionnement du contrôleur
d'affichage ?
Travaux Pratiques de Microcontrôleur – PIC 18F4520
E RA1
DB7 RD3
DB6 RD2
DATA
DB5 RD1
DB4 RD0
a) b)
a) tableau 1: Connexion entre le contrôleur d'affichage et le microcontrôleur; b) extrait PICDEM 2 Plus User's
Guide (p18). On a Power-on Reset, RA5 and RA3:RA0 are configured as analog inputs and
read as ‘0’. RA4 is configured as a digital input... (cf datasheet p224).
b) Attention : sur les nouvelles cartes PICDEM2+, le câblage microcontrôleur vs. Contrôleur
d’affichage a changé. D’où la nécessité de définir les ports d’entrée pour l’afficheur LCD.
Dans le cadre de la gestion des ports de configuration du contrôleur d’affichage, l’objectif de cet
exercice est de paramétrer les ports E, R/W, et RS en fonction des broches du microcontrôleur
auxquelles ces ports sont connectés. Seul le bus de contrôle (voir figure 10 et tableau 1 de l’énoncé)
est concerné.
Comparaison des schémas de câblage des cartes rouge/verte/noire
D’après les figures ci-dessous, à quelles broches du microcontrôleur sont reliées les broches de
contrôle E, R/W, RS du contrôleur d’affichage, dans chaque cas ?
En incluant cette définition dans votre fichier de configuration, vous pourrez utiliser la notation
‘RS’ au lieu de la notation ‘PORTA,3’ ou ‘PORTD,4’ dans les fichiers assembleur que vous allez
créer désormais. Par exemple, pour passer à 1 le bit 4 du port D, et donc la broche RS d’un
contrôleur d’affichage vous pourrez utiliser la ligne de commande suivante :
bsf RS
Pour que votre fichier de configuration soit pris en compte dans votre programme principal, vous
devez l’inclure dans le projet et le fichier principal de la même façon que le fichier ‘CONFIG.inc’.
ii. Ecrivez deux lignes de code qui permettent de passer à 1 la broche E du contrôleur
d’affichage, d’attendre 2 cycles, puis de passer à 0 la broche E. On suppose que E est
initialisé à 0.
Par extension, on parlera indistinctement des ‘lignes’ E, R/W, RS et des ‘broches’ E, R/W, RS. Le
terme ligne se réfère plutôt au bus de contrôle.
Vous êtes maintenant prêt à aborder les fonctions de gestion.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
Phase I : RW=0 et E=0. RS et DB7...4 sont positionnés à la valeur souhaitée : quartet de poids fort (MSB)
Phase II : E=1.
Phase III : E=0, le quartet transféré (poids fort) est pris en compte par le contrôleur lors du front descendant.
Phase IV : DB7...4 sont positionnés à la valeur souhaitée : quartet de poids faible (LSB)
Phase V : E=1.
Phase VI : E=0, le quartet transféré (poids faible) est pris en compte par le contrôleur lors du front
descendant.
Réaliser l'algorigramme et écrire la fonction « lcd_ecrire_quartet » qui génère la séquence IV, V, VI sans tenir
compte de l'état de RS pour l'instant, E étant déjà initialisé à 0. Le quartet à écrire est stocké dans les 4 bits de poids
faible du registre de travail « W ». La ligne E restant à l'état haut durant 2 cycles. Vous pourrez utiliser les instructions
nop, bsf, bcf, movwf, andlw (cf. datasheet). Tester cette fonction avec le simulateur de MPLAB.
Nous allons maintenant écrire la fonction « lcd_ecrire_octet » (c'est à dire la séquence I ...VI) en utilisant bien
évidemment la fonction « lcd_ecrire_quartet ». On ne tient toujours pas compte de l'état de RS et E étant initialisé à 0.
L'octet complet à transférer se trouve dans le registre « W » et sera sauvegardé dans la variable « lcd_db » stockée en
ram. L'instruction swapf pourrait vous être utile. Écrire et tester cette fonction en simulation.
Les fonctions d'écriture sont maintenant quasiment terminées. Il reste à gérer l'état ligne de la ligne RS, il suffit pour
cela d'ajouter une instruction avant l'appel de la fonction « lcd_ecrire_octet ». Réaliser les algorigrammes et écrire les
deux fonctions « lcd_ecrire_ordre » et « lcd_ecrire_donnee ».
Note : Pour venir lire DB7...DB4 il faut que les broches RD3...RD0 soient configurées en entrées. Mais il faut
pense à les remettre en sortie pour la suite.
Sur la figure 12, l'octet reçu est de la forme BF AC6AC5AC4AC3AC2AC1AC0 avec BF bit de poids fort. BF qui
signifie Busy Flag vaut 1 si l'afficheur est occupé. Les bits AC6...1 représentent l'Address Counter c'est à dire la valeur
courante du pointeur de RAM du contrôleur cette information doit être lue mais ne nous est pas utile, elle ne sera donc
pas mémorisée.
Réaliser l'algorigramme puis écrire la fonction « lcd_dispo » qui boucle tant que le bit BF n'est pas égal 0. C'est à
dire tant que l'afficheur n'est pas prêt à effectuer une nouvelle action. Au début de la fonction mettre les broches
RD3...RD0 en entrée et penser à les remettre en sortie avant de quitter celle-ci, gérer également les lignes RS et RW.
Avant de lire le quartet on attend 2 cycles. Tester ce sous-programme avec le simulateur.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
6.2.3. Procédure d'initialisation du contrôleur d'affichage
Quand le contrôleur démarre on ne sait pas si il est positionné en 4 ou 8 bits, comme le montre la procédure
d'intialisation reproduite en figure 12, il est donc nécessaire d'envoyer la commande de passage en mode 8 bits
(Function Set 8-Bit Interface) plusieurs fois pour qu'elle soit bien comprise. Puis on demande le passage en 4 bits
(Function Set 4-Bit Interface).
En analysant la procédure on remarque qu'il y a trois temporisations (>15ms, >4,1ms et >100µs). Pour simplifier
le code nous allons écrire deux fonctions de temporisation, une d'environ 5 ms (15 = 5×3) et une autre d'environ 100µs.
En vous inspirant de la temporisation réalisée au TP n°1. Réaliser les algorigrammes puis écrire les fonctions
« tempo_5ms » et « tempos_100us » et les valider par simulation. Si besoin est vous pouvez créer des variables en
mémoire.
La dernière partie de la procédure consiste à régler les caractéristiques de l'écran. Dans notre cas nous prendrons :
N = 1 pour fonctionner sur deux lignes.
F = 0 règle la taille des caractères (5×8 dots).
I/D = 1 afin que le curseur se déplace vers la droite après avoir affiché un caractère.
Réaliser l'algorigramme puis écrire la fonction « lcd_init » qui réalise cette procédure, pensez à utiliser les fonctions
que vous avez déjà créées. Intégrer l'intialisation des ports dans « lcd_init ». Valider la procédure par simulation.
Les principales fonctions de transfert et de lecture d’informations vers le contrôleur d’affichage sont maintenant
conçues. L’objet du TP 4 est de se rapprocher de la partie ‘hardware’ en gérant le choix de la ligne pour l’affichage par
exemple, et en écrivant une chaîne de caractères.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
7. TP n°4 : Ecriture d'un driver pour LCD Partie 2
Dans ce TP, on complétera la fonction lcd_ecrire_octet, on contrôlera le basculement entre les lignes de l’écran
LCD, et enfin on affichera une chaîne de caractères.
En utilisant vos différentes fonctions écrire les fonctions « lcd_l1 » et « lcd_l2 » permettant de choisir la ligne sur
laquelle on souhaite écrire.
Écrire la fonction « lcd_cls » qui efface tout l'écran. (cf. figure 12)
Modifier la fonction « lcd_ecrire_octet » : au début pour se placer en mode écriture, et à la fin pour attendre que le
contrôleur ait pris en compte l'action.
Dans le fonction d’initialisation, mettez le contrôleur d’affichage sur ‘ON’ en fixant à 1 la valeur de PORTD,7.
C’est nécessaire au bon fonctionnement des cartes noires ou vertes.
7.2 Tests des différentes fonctions
Voilà nous sommes maintenant prêts à utiliser l'afficheur LCD. Pour faciliter l'utilisation des fonctions que vous
venez de créer il est conseillé de toutes les mettre dans un fichier « lcd.asm » afin de pouvoir les inclure dans vos futurs
programmes. L'utilisation de ce fichier par la suite est très simple, il suffit de taper la commande « #include lcd.asm » à
l'endroit de votre programme où vous souhaitez intégrer vos fonctions et de définir les variables « lcd_db, ... » au début
de votre programme. Le fichier « lcd.asm » doit se trouver dans le même répertoire que votre programme.
I n f o
I n d u s
Si vous taper « movlw 'I' » le registre « W » sera chargé avec le code ascii du caractère I.
Travaux Pratiques de Microcontrôleur – PIC 18F4520
main nop
...
La chaîne « Microcontroleur » est stockée dans la mémoire programme, elle se termine par le caractère « \0 ».
Le label « ch » pointe vers le premier caractère de la chaîne, c'est donc l'adresse de début de la chaine. Dans la mémoire
programme du PIC 18F4520, les adresses sont codées sur 21 bits donc 3 octets. Comme nous disposons d'un
microcontrôleur 8 bits nous utiliserons les directives « UPPER(ch), HIGH(ch), LOW(ch) » pour obtenir respectivement
l'octet de poids le plus fort, de poids intermédiaire et de poids faible.
Pour lire dans la mémoire programme, il faut tout d'abord initialiser le pointeur d'adresse de mémoire
programme « TBLPTR » avec l'adresse de l'octet à lire. Pour lire un octet on utilse l'instruction « TBLRD » qui transfère
le contenu de la mémoire dans le registre « TALBAT ».