Vous êtes sur la page 1sur 46

Master Sciences de l'information et des Systmes

Universit Paul Czanne

Travaux Pratiques de Microcontrleur

2007/2008

Flavien Peysson
flavien.peysson@lsis.org

Marc Allain
marc.allain@fresnel.fr

Formation au dveloppement d'applications en Assembleur et C sur un microcontrleur Mircrohip PIC 18F4520 en utlisant l'environnement MPLAB IDE et le compilateur C18.

Table des matires


1. Avant de commencer.....................................................................................................................1 2. Le Matriel.....................................................................................................................................1 2.1. Le Kit PICDEM 2 Plus et PIC 18F4520..................................................................................1 2.2. MPLAB Integrated Development Environment......................................................................2 2.3. Le programmateur PICSTART Plus........................................................................................2 3. Gestion de vos fichiers...................................................................................................................2 4. TP n1 : Initiation MPLAB IDE...............................................................................................3 4.1. Programme Interrupteur .....................................................................................................3 4.2. dition et Compilation du programme....................................................................................4 4.3. Simulation................................................................................................................................5 4.4. Programmation du microcontleur..........................................................................................7 4.5. Programme Clignotant .......................................................................................................8 5. TP n2 : Interruptions et Priphriques....................................................................................11 5.1. Utiliser un module TIMER pour faire clignoter une LED.....................................................11 5.2. Gnrer un signal rectangulaire avec un module PWM........................................................11 5.3. Utilisation du module de conversion A/D.............................................................................13 5.4. Gestion d'interruptions multiples...........................................................................................13 6. TP n3 : Ecriture d'un driver pour LCD..................................................................................14 6.1. Les afficheurs LCD................................................................................................................14 6.2. Fonctions de gestion..............................................................................................................15 6.3. crire une chaine de caractres..............................................................................................19 7. TP n4 : Initiation la programmation en langage C..............................................................20 7.1. Introduction : assembleur et compilateur C...........................................................................20 7.2. Gnration d'un signal carr..................................................................................................21 7.3. dition et Compilation du programme..................................................................................22 7.4. Simulation et programmation du micro-contrleur...............................................................23 7.5. Applications...........................................................................................................................23 8. TP n5 : Gestion de Priphriques et Interruptions.................................................................25 8.1. Communication srie : RS232...............................................................................................25 8.2. Applications...........................................................................................................................27 9. TP n6 : Panneau d'affichage lumineux....................................................................................29 9.1. Gestion de l'afficheur LCD....................................................................................................29 9.2. Gestion de l'EEPROM...........................................................................................................31 9.3. Panneau d'affichage...............................................................................................................32 10. TP n7 : Station Service............................................................................................................34 10.1. Automate de Pompe.............................................................................................................34 10.2. Communication avec l'automate de caisse...........................................................................35

Travaux Pratiques de Microcontrleur PIC 18F4520

1.

Avant de commencer

Ces sances de travaux pratiques (TP) sont destines illustrer les notions qui vous ont t prsentes en cours. Pour cela, vous aurez concevoir et tester un certain nombre de programmes soit en langage assembleur soit en langage C. Pour chaque tche que vous aurez raliser, nous vous invitons enregistrer votre programme sous un nom particulier pour garder une sauvegarde de travail. Pour faciliter le dbogage et assurer la maintenance et la portabilit de vos codes, il est primordial que vous commentiez clairement votre programme et que vous pensiez le rendre le plus clair possible (ex : en choisissant des noms appropris pour les labels). Concernant l'valuation de votre travail, nous vous demanderons de nous prsenter le programme correspondant chaque tche que vous aurez programmer sur le simulateur ou sur le kit de dmonstration (cf. plus bas). Nous corrigerons galement vos codes en portant une attention particulire la lisibilit (pensez donc aux commentaires !). Enfin, lorsque cela est demand, vous devrez galement nous rendre les algorigrammes qui correspondent aux codes.

2.

Le Matriel 2.1. Le Kit PICDEM 2 Plus et PIC 18F4520

Le kit PICDEM 2 Plus est un kit simple qui permet de mettre en vidence les capacits de diffrents micro-contrleurs du fabricant Microchip travers divers priphriques et accessoires reproduis sur le schma de la figure 1.

Reset

MCLR LEDs RB0...RB3

Entre Analogique RA0 Poussoirs RA4, RB0 RS232 RC6, RC7

Microcontrleur

Contrles RA1...RA3 Donnes RD0...RD3 Buzzer RC2

(Liquid Crystal Display )

LCD

(In Circuit Debugger)

ICD

RB6, RB7

Bus I2C RC4, RC3 RC5 Capteur de Temprature

Figure 1: Le kit PICDEM 2 Plus, Priphriques et Accessoires

Le microcontrleur utilis est le PIC18F4520 de Microchip. C'est un microcontrleur 8 bits disposant d'une mmoire 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 entres/sorties. Une part importante de la difficult pour programmer un micro-contrleur rside dans l'acquisition d'informations. Pour acqurir cette comptence, nous vous invitons vous rfrer frquemment la documentation technique du microcontrleur, ainsi qu' la documentation technique de la carte d'valuation, cf. les documentations lectroniques.
M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

2.2.

MPLAB Integrated Development Environment

MPLAB IDE est un environnement gratuit de programmation pour les microcontrleurs de la famille Microchip. Lenvironnement intgre un diteur dassembleur, un dbogueur complet ainsi que tous les outils permettant de grer les programmateurs de composants. La possibilit dintgrer un compilateur C dans lenvironnement de dveloppement MPLAB sinscrit directement dans la politique du service qui est dutiliser des langages de programmation volus dans les dveloppements en lectronique.

2.3.

Le programmateur PICSTART Plus

Il permet de transfrer le programme directement de MPLAB dans le microcontrleur via le port srie (RS232) d'un PC.

3.

Gestion de vos fichiers

Pour chacun des binmes, un compte utilisateur a r cr. Pour ne pas oublier votre nom d'utilisateur et votre mot de passe. vous pouvez le noter ci-dessous. Attention windows fait la diffrence entre les majuscules et les minuscules. 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 . C'est dans cet espace 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 sances. Pour chacun des TP, fates un rpertoire associ ex: tp3 pour le tp n3. Puis pour chaque question si c'est ncessaire fates des sous rperoires question5 par exemple.

Les documentations techniques et outils ncessaires aux TPs sont disponibles l'adresse : http://sitedeflavien.free.fr/uc.

M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

4.

TP n1 : Initiation MPLAB IDE

ASM

Le but de ce TP est de se familiariser avec la suite logicielle MPLAB Integrated Development Environment (v7.6) de Microchip afin de pouvoir utiliser les fonctions de bases de cet outil dveloppement savoir : crer un projet, diter et compiler un programme en assembleur, simuler son fonctionnement et enfin programmer le microcontrleur (C). Les diffrentes fonctions sont expliques travers deux programmes qui vous sont donns.

4.1.

Programme Interrupteur

Le programme Interrupteur boucle linfini sur les tches ci-dessous afin de reproduire le fonctionnement dun interrupteur. Tche 1 : lire ltat du bouton poussoir S2, broche RA4 Tche 2 : si le bouton est appuy, on allume la diode lectro-luminescente (LED) L1, broche RB0, sinon on lteint. On notera que les boutons poussoirs sont branchs au microcontrleur en logique ngative. L'tat bouton appuy correspond donc un 0 logique. Les LED sont cbles 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

RA4 = 0
S2 appuy

non

RB0 = 1
Allumer L1

RB0 = 0
Eteindre L1

Figure 2: Algorigramme du programme Interrupteur

L'algorigramme peut se traduire en assembleur de la manire suivante :


LIST P=18F4520 #include <P18F4520.inc> #include <CONFIG.inc> org h'00' init clrf PORTB movlw b'00000000' movwf TRISB clrf PORTA movlw b'00010000' movwf TRISA

Dfinition du C utilis, des constantes spcifiques au C et des paramtres de configuration encods lors de la programmation. Adresse de dpart aprs un reset du C. Initialisation : Remise zro des bascules D des diffrents ports utiliss et configuration des entres/sorties.

boucle

btfsc PORTA,4 goto eteindre bsf PORTB,0 goto boucle eteindre bcf PORTB,0 goto boucle END

Boucle infini : Allume ou teint la LED en fonction de ltat du bouton poussoir.

Utiliser votre cours et le jeu dinstructions du PIC18F4520 pour comprendre et expliquer le fonctionnement de ce programme.
M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

4.2.

dition et Compilation du programme

Cette partie permet d'apprendre crer un projet MPLAB, saisir un programme en assembleur et le compiler. 4.2.1. Dmarrage Avant de commencer, crer le rpertoire tp1 puis dans ce rpertoire crer nouveau un rpertoire interrupteur. Copier dans ce dernier rpertoire les fichiers P18F4520.inc et CONFIG.inc Lancer la suite logicielle MPLAB IDE partir de licne qui se trouve sur votre bureau. 4.2.2. Cration dun nouveau projet en utilisant lassistant Project Wizard Cliquer sur Project >> Project Wizard Cliquer sur Suivant > puis slectionner PIC18F4520 dans le menu droulant Device. Cliquer sur Suivant > puis slectionner Microchip MPASM Toolsuite et MPASM Assembler afin de pouvoir programmer en Assembleur. Cliquer sur Suivant > puis dans le champ Project Name saisir le nom du projet (ex : interrupteur) et dans le champ Project Directory aller chercher laide du bouton Browse , le dossier cr au dbut : tp1/interrupteur. Cliquer sur Suivant > et ajouter les fichiers P18F4520.inc et CONFIG.inc au projet laide du bouton Add >> Cliquer sur Suivant > puis sur Terminer. 4.2.3. dition du programme

Crer un nouveau fichier dans le projet, File >> Add New Files to Project Lenregistrer dans le rpertoire projet avec lextension asm (ex : prog.asm) MPLAB Editor se lance Saisir le programme Interrupteur et enregistrer. Penser ajouter des commentaires au programme pour montrer que vous avez bien compris les diffrentes instructions. Une ligne de commentaire commence par ; .

Workspace Architecture et contenu du projet

Output Interface MPLAB Dveloppeur

Editor Edition des fichiers de programme, de configuration,

Figure 3: MPLAB IDE, Mode Edition

M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 4.2.4. Compilation

Cliquer sur Project >> Build All ou sur licne de la barre de menu ou encore Ctrl+F10 pour compiler le projet complet. Erreurs et warnings sont signals dans la fentre Output ainsi que le rsultat de la compilation BUILD SUCCEEDED ou BUILD FAILED. En double-cliquant sur une erreur ou un warning dans la fentre Output, vous serez amener directement la ligne concerne dans votre programme.

4.3.

Simulation

Avant denvoyer 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 doutils est ajoute ainsi quun onglet MPLAB SIM dans la fentre Output. Le simulateur fonctionne selon trois modes : le mode Step By Step qui permet de faire une excution pas pas du programme (vous tes alors lhorloge du C). le mode Animate qui excute automatiquement le programme mais une vitesse rduite pour que lon puisse suivre l'xcution. le mode Run o le programme est excut automatiquement la vitesse du PC. Dans les deux premiers modes, nous obtenons des rsultats au fur et mesure de la simulation alors que dans le dernier, les rsultats ne sont visibles que lorsque la simulation est stoppe. Dans ce paragraphe, nous nous intressons aux modes Animate et Step By Step car ils nous permettent de voir quelle est linfluence des entres sur les sorties. Le rglage de la frquence de loscillateur utilis se fait dans Debugger >> Settings . Dans notre cas cest 4 Mhz. 4.3.1. Entres : Stimulus

Comme son nom lindique cette fonctionnalit permet de prvoir les vnements d'entres de manires synchrones (les dates sont connues avant la simulation) et asynchrones (les vnements sont dclenchs durant la simulation par lutilisateur). Les diffrents vnements sont enregistrs dans une table (Workbook). Pour en crer une, cliquer sur Debugger >> Stimulus >> New Workbook. Dans le cadre du projet interrupteur on souhaite crer les vnements suivants : t = 0, initialisation de RA4 1 (bouton S2 relch), t = 10 cycles, on appuie sur S2 (RA4 = 0), t = 25 cycles, on relche le bouton (RA4 = 1). on veut galement pouvoir inverser ltat de RA4 quand on le souhaite.

Longlet Pin / Register Actions de la fentre Stimulus permet la saisie des vnements en programmant leurs dates darrive (vnements synchrones). Dmarche de cration dvnements synchrones : Ajouter une colonne RA4 au tableau dvnement (bouton Clic here to Add Signals ) Rechercher RA4 dans la liste Available Signals et lajouter la liste Selected Signals
M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Remplir la table dvnement (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 ) Longlet Asynch de la fentre Stimulus permet de pr-programmer des boutons (colonne Fire ) la gnration dvnement (vnements asynchrones). Dmarche de cration dvnement asynchrone : Saisir RA4 dans la colonne Pin/SFR de la premire ligne Le menu de la colonne Action propose cinq types daction : Set High : RA4 = 1 Set Low : RA4 = 0 Toggle : RA4 = RA4 la largeur de limpulsion est rgle dans les Pulse High : RA4 = colonnes Width et Units . Pulse Low : RA4 = Choisir Toggle pour inverser RA4 Enregistrer la table (bouton Save Workbook ) Appliquer lchancier dvnement (bouton Apply ) Aprs chaque changement dans lchancier dvnement, cliquer sur Apply afin que ces changements soient pris en compte par la simulation.

Dclencher Figure 4: Stimulus Synchrones et Asynchrone

4.3.2. dont :

Sorties : Watch & Logic Analyzer Afin de suivre et de visualiser les rsultats de simulation, MPLAB SIM intgre divers outils La fentre Watch (menu View >> Watch) qui affiche le contenu des diffrents registres du C et des diffrentes variables du programme. La slection et la validation des registres et variables afficher se fait travers les deux menus droulants et les deux boutons Add SFR et Add Symbol . Un clic droit sur un des lments observs permet laccs la bote de dialogue Properties afin de rgler le format daffichage de llment (ex : Hex, Binary, Single Bit, ...) mais aussi de sauvegarder, exporter, le tableau Watch . Il est aussi possible de faire glisser des lments de la fentre Editor vers la fentre Watch . La fentre Logic Analyzer permet laffichage des lments logiques (1 bit) en fonction du Time Base . Le choix des lments afficher se fait laide du bouton Channels .

M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Pour le projet interrupteur , on souhaite afficher : les registres TRISA et TRISB sous forme hexadcimale les registres PORTA, PORTB et W sous forme binaire les bits RA4 et RB0 Configurer correctement les fentres Watch et Logic Analyzser . 4.3.3. Simulation du programme en mode Animate

Maintenant que les entres et sorties de la simulation sont configures, on peut lancer la simulation. Avant toutes choses, afin dinitialiser le C, il est ncessaire deffectuer un Reset en cliquant sur le bouton puis cliquer sur le bouton Animate et observer les fentres Watch et Logic Analyzer . Arrter lanimation laide du bouton , faire un nouveau Reset , relancer lanimation, ouvrir longlet Asynch de la fentre Stimulus , agir sur RA4 et observer les rsultats.

Logic Analyzer Graphe dvolution de bits

Editor La flche verte symbolise le Program Counter Figure 5: MPLAB IDE, Mode Simulation

Watch Affichage de ltat courant 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 excution pas pas avec une excution automatique des sousprogrammes et une excution jusqu la fin des sous-programmes.

4.4.

Programmation du microcontrleur

Cette phase consiste envoyer le code hexadcimal du programme dans le C. Une fois le programme compil avec succs, le code hexadcimal du programme se trouve dans le fichier avec l'extension hex (ex : prog.hex). Vous pouvez visualiser le fichier avec la fentre Program Memory du menu View . Le code de trouve sous l'onglet Opcode Hex . Dmarche de transfert : Connecter le programmateur PICSTART Plus sur le port srie du PC et au secteur Placer le C sur le programmateur (Attention au sens !) Dans MPLAB, sous le menu Programmer > Select Programmer chosir 1 PICSTART
M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Plus . Un nouvel onglet est alors ajout la fentre 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 ajoute. 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! apparat dans la fentre Output. Dsactiver le programmateur, menu Programmer > Disable Programmer Placer le C sur la carte PICDEM 2 Plus (Attention au sens !) mettre la carte sous tension et a marche ... Lors des phases de manipulation du microcontrleur, vrifier que la carte PICDEM 2 Plus ne soit pas sous tension et fates attention aux pattes, elles sont fragiles.

Figure 6: MPLAB IDE, Code hexadcimal du programme

4.5.

Programme Clignotant
Analyse et comprhension du programme

4.5.1.

Le programme ci-aprs fait clignoter la LED L1, broche RB0, une frquence denviron 1Hz. Ltat de la LED change donc toutes les 500ms.
LIST P=18F4520 #include <P18F4520.inc> #include <CONFIG.inc> org h'00' ;----- Dclaration de variables CBLOCK 0x00 t1 : 1 t2 : 1 ENDC ;----- Initialisation Init clrf PORTB movlw h'00' movwf TRISB ;----- Programme Principal boucle movlw h'80' xorwf PORTB call tempo250ms call tempo250ms goto boucle

Dfinition du C utilis, des constantes spcifiques au C et des paramtres de configuration encods lors de la programmation. Adresse de dpart aprs un reset du C. Les variables t1 et t2 sont ranges dans la bank 0 de la ram (adresse 0x00) et ont pour taille un octet.

Remise zro des bascules D du port B et dfinition du port B en sortie.

Boucle infini : Allume et teint la LED toutes les 500ms.

M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

;----- Sous-programme tempo250ms movlw t10 movwf t1 comp1 dcfsnz t1 return movlw t20 movwf t2 comp2 dcfsnz t2 goto comp1 goto comp2 END

Sous programme de temporisation ( complter) On ralise deux boucles imbriques qui occupe le C durant environ 250 ms.

Comprendre le programme clignotant . Expliquer lutilit de xorwf dans le programme principal (utiliser une table de vrit). Calculer les valeurs dinitialisation t10 et t20 pour que le sous programme de temporisation sexcute en 250 ms 1 ms. Le nombre de cycle requis par chaque instruction est donn dans le jeu dinstruction. Crer un nouveau projet dans MPLAB et le sauver dans le rpertoire tp1/cligno puis saisir le programme prcdent en remplaant t10 et t20 par leur valeur (pour informer le compilateur de la base dans laquelle la valeur est crite on prcde la valeur de la premire lettre de la base, ainsi 192 en dcimal scrit d192, hC0 en hexadcimal ou encore b11000000 en binaire). Compiler votre programme et passer la partie simulation. Noubliez pas de copier les fichiers P18F4520.inc et CONFIG.inc dans le rpertoire tp1/cligno. 4.5.2. Simulation Vous pouvez simuler le programme de la mme manire que le programme interrupteur mais vous vous apercevrez trs vite que cest trs long du fait de lanimation et de la temporisation. (Vous pouvez tout de mme 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, excution automatique. Pour notre programme, nous navons besoin daucun vnement dentre mais si besoin avait t on aurait pu saisir un chancier comme prcdemment. En mode Run le programme sexcute donc de faon automatique et ne sarrte que lorsquil rencontre un point darrt ou la fin du programme. Il faut donc placer correctement les points darrt afin de valider le fonctionnement de notre programme. Pour observer la dure de la temporisation il faut donc mettre un point darrt sur la ligne dappel du sous programme de temporisation et un autre sur la ligne suivante. Pour ajouter un point darrt , double cliquer sur la ligne du programme o vous le souhaitez, ou alors utiliser le menu Debugger >> Breakpoints disponible depuis la touche F2.

Figure 7: Placement des points d'arrt

Nous allons suivre lexcution du programme laide de la fentre Simulator Trace disponible dans le menu View . Nous allons nous intresser plus particulirement la colonne
M1 SIS

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Time . Vous pouvez changer lunit de temps de cette colonne par un clic droit menu Display Time . Lorsque vous affichez le temps en toutes autres units que cycle, la valeur affiche dpend de la frquence de loscillateur du C. Lancer la simulation, bouton Observer la fentre Simulator Trace lorsque la simulation sarrte au premier point darrt et noter le temps dappel de la temporisation (ex : ti = 250303 cycles) Relancer la simulation, bouton Noter nouveau le temps de la fentre Simulator Trace (ex : tf = 500602 cycles) Vous pouvez alors calculer la dure de la temporisation d = tf ti = 250299 cycles soit 250,299 ms avec un oscillateur 4 MHz. Utiliser cette mthode pour valider vos initialisations de t10 et t20.

Breakpoint call tempo250ms

Breakpoint goto boucle

Figure 8: Simulator Trace aux diffrents points d'arrt

Une fois les simulations termines transfrer le programme dans le C.

M1 SIS

10

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

5.

TP n2 : Interruptions et Priphriques

ASM

Ce deuxime TP est divis en quatre parties durant lesquelles vous apprendrez grer les interruptions et diffrents modules du microcontrleur en langage Assembleur et dans un programme unique.

5.1.

Utiliser un module TIMER pour faire clignoter une LED

Nous nous baserons sur le programme en assembleur avec interruptions prsent durant le cours pour raliser cette partie. Le microcontrleur devra faire clignoter priodiquement une LED en utilisant les interruptions et le TIMER0. Le programme ralis aura le fonctionnement dcrit cidessous. Durant l'initialisation : Configurer le PORTB de manire ce que les broches RB1 RB7 soient configures en sorties numriques et la broche RB0 en entre numrique, Activer le TIMER0 et configurer le en compteur sur 16 bits, le prescaler sera plac la valeur 1:8, Activer l'interruption correspond au TIMER0. Dans le programme principal : Le programme principal consistera simplement en une boucle vide (aucune opration effectue). Par la suite, lors d'une interruption dclenche par le TIMER0, rinitialiser le TIMER0 et changer la valeur de la broche RB1. Raliser l'algorigramme du programme demand, crire le programme sur ordinateur avec MPLAB, simuler son fonctionnement et valider le sur la carte d'valuation.

5.2.

Gnrer un signal rectangulaire avec un module PWM

En partant du programme prcdent, on souhaite maintenant ajouter une fonctionnalit : chaque appui sur le bouton poussoir S3 connect RB0, on souhaite activer le transducteur pizolectrique (pendant la dure de l'appui). Le transducteur pizo-lectrique peut tre command grce la broche RC2 du microcontrleur. Un transducteur pizo-lectrique est un composant lectronique constitu dune lamelle de matriau pizo-lectrique. Cette lamelle est dforme si une tension alternative est applique aux bornes du transducteur pizo-lectrique.

Figure 9: Le transducteur pizo-lectrique

M1 SIS

11

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Le mouvement de la lamelle dans lair gnre un son. La frquence du son mis est directement li la nature et la frquence du signal appliqu aux bornes du transducteur pizolectrique. Sur la carte dvaluation PICDEM 2 Plus, le transducteur pizo-lectrique peut tre command grce la broche RC2 du micro-contrleur. Le montage lectronique utilis pour commander le transducteur pizo-lectrique permet de lalimenter avec une tension bipolaire (+5V, -5V). Pour gnrer un son, on doit donc gnrer un signal rectangulaire (grce au module PWM) que l'on appliquera au transducteur pizo-lectrique si l'utilisateur appuie sur le bouton poussoir S3. Il faudra initialiser tous les modules ncessaires la gnration d'un signal rectangulaire (module CCP1, TIMER2) (voir p.159 du datasheet ) et initialiser le PORTC. partir du programme prcdent, apporter les modifications ncessaires : lors de l'initialisation : Configurer le PORTC en entre except la broche RC2 en sortie, Configurer le module PWM, placer la valeur 0x80 dans le registre PR2 (fixe la frquence du signal rectangulaire), rgler le duty time (rapport cyclique) 0.5, on placera la valeur 0x00 dans le registre CCP1CON, Activer le TIMER2, plac le postscaler 1:1, plac le prescaler 4, dans le programme principal : on testera la valeur sur la broche RB0, Dans le cas o RB0 est l'tat haut on activera le transducteur pizo-lectrique en agissant sur le registre CCP1CON, Dans le cas o RB0 est l'tat bas on dsactivera le transducteur pizo-lectrique en agissant sur le registre CCP1CON, Dans le cas o la valeur sur la broche RB0 est gale la dernire valeur acquise on ne fera rien. Attention : Le Duty Time est le temps pendant lequel le signal est ltat haut. Il faut adapter ce temps en fonction de la frquence du signal gnr pour garder un rapport cyclique gale 0,5. Pour cela lisez la documentation technique et trouver la relation quil doit exister entre les valeurs des registres PR2 et CCPR1L:CCP1CON<5:4> pour que le rapport cyclique reste gale 0.5. Donner la relation quil doit exister entre les valeurs des registres PR2 et CCPR1L:CCP1CON<5:4> pour que le rapport cyclique reste gale 0.5 et proposer un partie de programme (le plus simple possible) en langage Assembleur qui permet dadapter le rapport cyclique (contrl par les registres CCPR1L:CCP1CON<5:4>) en fonction de la frquence (contrle par le registre PR2) du signal gnr. Raliser l'algorigramme du programme demand, crire le programme sur ordinateur avec MPLAB, simuler son fonctionnement et le valider sur la carte d'valuation. Dans un premier temps, modifier le programme prcdent pour quil gnre un signal rectangulaire (en utilisant le module PWM) sur la broche RC2. Puis vous prendrez en compte la gestion du bouton RB0. En sparant les deux problmes, la difficult est rduite.

M1 SIS

12

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

5.3.

Utilisation du module de conversion A/D

On souhaite maintenant pouvoir faire varier la tonalit du son mis par le transducteur pizo-lectrique. Pour cela, on va faire varier la frquence (contrle par le registre PR2) du signal rectangulaire gnr dans la partie prcdente. Pour faire varier la frquence du signal, on va utiliser le potentiomtre R16. chaque fois que l'on activera le transducteur pizo-lectrique, on va mesurer la tension sur la broche RA0 en utilisant le module de conversion A/D, on utilisera la valeur de la tension sur la broche RA0 pour dterminer la frquence du signal rectangulaire. Les modifications portes au programme sont les suivantes, lors de l'initialisation, configurer le PORTA de manire ce que la broche RA0 soit en entre, activer le module de conversion A/D (voir page 227 du datasheet ), initialiser les registres ADCON0, ADCON1 (les autres registres sont correctement configurs par dfaut), dans le programme principal, raliser une acquisition de la valeur de la tension sur la broche RA0 en ralisant une conversion A/D, modifier la valeur du registre PR2 (frquence du signal gnr) en utilisant les bits de poids forts du rsultat de la conversion A/D, ajuster le rapport cyclique pour qu'il reste gale 0.5. Raliser l'algorigramme du programme demand, crire le programme sur ordinateur avec MPLAB, simuler son fonctionnement et le valider sur la carte d'valuation.

5.4.

Gestion d'interruptions multiples

On souhaite maintenant que le microcontrleur gre par interruption l'appui sur le bouton poussoir. Ainsi chaque appui sur le bouton poussoir S3, on souhaite activer ou dsactiver le transducteur pizo-lectrique. Quand le transducteur pizo-lectrique sera activ, le programme principal ralisera une acquisition de la tension sur la broche RA0 et mettra jour la frquence et le rapport cyclique du signal rectangulaire. Quand le transducteur pizo-lectrique ne sera pas activ, le programme principal ne ralisera aucune opration. Pour grer les appuis sur le bouton poussoir S3, on utilisera l'interruption INT0. partir du programme prcdent, il faudra modifier : la configuration des interruptions pour prendre en compte la nouvelle interruption INT0, simplifier le programme principal en transfrant une partie du code vers la routine d'interruption. Raliser l'algorigramme du programme demand, crire le programme sur ordinateur avec MPLAB, simuler son fonctionnement et le valider sur la carte d'valuation.

M1 SIS

13

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

6.

TP n3 : Ecriture d'un driver pour LCD

ASM

L'objectif de ce TP est d'crire et de tester un ensemble de fonctions assembleurs pour communiquer avec un afficheur LCD. Ces fonctions seront, dans le TP n6, compiles dans une bibliothque afin d'tre utilises avec un programme C. La premire partie de ce TP est ralise en simulation afin d'crire les diffrentes fonctions ncessaires au bon fonctionnement de l'afficheur.

6.1.

Les afficheurs LCD

Les afficheurs cristaux liquides gnralement appels LCD (Liquid Crystal Display) sont des modules compacts qui ncessitent peu de composants pour leur mise en oeuvre. Plusieurs afficheurs sont disponibles sur le march, ils se diffrencient les uns des autres par leurs dimensions (de 1 4 lignes de 6 80 caractres). Certains sont galement dots de fonctions de rtroclairage. L'afficheur du kit PICDEM 2 Plus est un afficheur 16 2 c'est dire 2 lignes de 16 caractres avec des caractres de 58 pixels. Pour communiquer avec l'extrieur tout afficheur besoin d'un circuit spcialis de gestion appel contrleur d'affichage , il en existe diffrents modles sur le march mais ils ont tous le mme fonctionnement. La carte d'valuation est quipe du modle HD44780U de SHARP. Le contrleur sert donc d'interface entre le microcontrleur et l'afficheur (cf. figure 10). Le but du driver est de grer le bus CONTROL afin que le contrleur d'affichage comprenne le bus DATA et affiche ce que l'on souhaite sur l'cran LCD.
DATA 4 ou 8 COM 16

C
PIC18F4520 CONTROL 3

Contleur d'affichage
HD44780U

SEG 40

LCD 16 2

Figure 10: Communication avec l'afficheur LCD

Le contrleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex: effacer l'cran) ou une donne (ex: le caractre A). Ordres ou donnes sont envoys sur le bus DATA sous forme d'octets (8 bits). Mais pour ne pas utiliser toutes les broches de sorties d'un microcontrleur pour communiquer avec un LCD, les contrleurs 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. Le bus CONTROL est constitu de trois lignes : La ligne RS (Register Select) qui permet au contrleur d'affichage de savoir si le contenu du bus DATA est un ordre ou une donne. Un niveau bas indiquera un ordre et un niveau haut une donne. La ligne RW (Read Write) informe le contrleur si on vient lire ou crire dans sa mmoire, un niveau bas correpondant une action d'criture. La ligne E (Enable) qui informe le contrleur d'affichage qu'un quartet (mode 4 bits) ou un octet (mode 8 bits) est disponible. Cette ligne est active sur front descendant. Elle ralise la syncronisation entre le microcontrleur et l'afficheur. Les connexions entre le contrleur d'affichage et le microcontrleur sont regroupes dans le tableau 1.
M1 SIS

14

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 D'aprs le tableau 1 quel est le mode de fonctionnement du contrleur d'affichage ?
Bus CONTROL Contrleur RS RW E DB7 DATA DB6 DB5 DB4 Microcontrleur RA3 RA2 RA1 RD3 RD2 RD1 RD0 Extrait de PICDEM 2 Plus User's Guide (p 18)

Tableau 1: Connexion entre le contrleur d'afffichage et le microcontrleur

Attention (datasheet p105): 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...

6.2.

Fonctions de gestion
Transfert d'un octet

6.2.1.

L'criture d'un ordre ou d'une donne en mode 4 bits se fait selon la squence reproduite en figure 11, l'octet transfrer tant b7b6b5b4b3b2b1b0 avec b7 bit de poids fort.

Figure 11: Transfert d'un octet en mode 4 bits

Phase I : RW=0 et E=0. RS et DB7...4 sont positionns la valeur souhaite : quartet de poids fort (MSB) Phase II : E=1. Phase III : E=0, le quartet transfr (poids fort) est pris en compte par le contrleur lors du front descendant. Phase IV : DB7...4 sont positionns la valeur souhaite : quartet de poids faible (LSB) Phase V : E=1. Phase VI : E=0, le quartet transfr (poids faible) est pris en compte par le contrleur lors du front descendant. crire la fonction lcd_ecrire_quartet qui gnre la squence IV, V, VI sans tenir compte de l'tat de RS pour l'instant, E tant dj 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, andwf (cf. datasheet). Tester cette fonction avec le simulateur de MPLAB.
M1 SIS

15

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Nous allons maintenant crire la fonction lcd_ecrire_octet (c'est dire la squence 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 transfrer se trouve dans le registre W et sera sauvegard dans la variable lcd_db stocke en ram. L'instruction swapf pourrait vous tre utile. crire et tester cette fonction en simulation. Les fonctions d'criture sont maintenant quasiment termines. Il reste grer l'tat ligne de la ligne RS, il suffit pour cela d'ajouter une instruction avant l'appel de la fonction lcd_ecrire_octet . Crer les deux fonctions lcd_ecrire_ordre et lcd_ecrire_donnee . Mettre jour votre programme. 6.2.2. Lecture de l'tat du contrleur d'affichage Lorsque que l'on demande au contrleur d'xcuter une action (ordre ou commande), ce dernier met un certain temps la raliser. Si une nouvelle action lui est demande alors que la prcdente n'est pas encore termine, elle ne sera pas prise en compte. Pour rsoudre ce problme il est ncessaire de savoir si le contrleur est disponible. On ne va donc plus crire mais lire dans le contrleur.

Figure 12: Lecture de l'tat de l'afficheur en mode 4 bits

Phase I : RW=1 et RS = 0, il s'agit d'une instruction (ordre) de lecture et E=0 Phase II : E passe 1 pour demander le quartet de poids fort. Phase III : On vient lire la valeur du quartet MSB sur DB7...DB4. Phase IV : E passe 0 pour signaler la fin de la lecture du premier quartet. Phase V : E repasse 1 pour demander le quartet de poids faible. Phase VI : On vient lire la valeur du quartet LSB sur DB7...DB4. Phase VII : E repasse 0 pour signaler la fin de la lecture du deuxime quartet. Note : Pour venir lire DB7...DB4 il faut que les broches RD3...RD0 soient configures en entres. Mais il faut pense les remettre en sortie pour la suite. Sur la figure 12, l'octet reu 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 reprsentent l'Address Counter c'est dire la valeur courante du pointeur de RAM du contrleur cette information doit tre lue mais ne nous est pas utile, elle ne sera donc pas mmorise. 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 prt effectuer une nouvelle action. Au dbut de la fonction mettre les broches RD3.. RD0 en entre et penser les remettre en sortie avant de quitter celle-ci. Avant de lire le quartet on attend 2 cycles. Tester ce sous-programme avec le simulateur.
M1 SIS

16

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 6.2.3. Procdure d'initialisation du contrleur d'affichage

Quand le contrleur dmarre on ne sait pas si il est positionn en 4 ou 8 bits, comme le montre la procdure d'intialisation reproduite en figure 13, il est donc ncessaire 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).

Figure 13: Procdure d'initialisation 4 bits du contrleur d'affichage (extrait de la datasheet du HD44780U )

En analysant la procdure on remarque qu'il y a trois temporisations (>15ms, >4,1ms et >100s). Pour simplifier le code nous allons crire deux fonctions de temporisation, une d'environ 5 ms (15 = 53) et une autre d'environ 100s.
M1 SIS

17

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 En vous inspirant de la temporisation ralise au TP n1. crire les fonctions tempo_5ms et tempos_100us et les valider par simulation. Si besoin est vous pouvez crer des variables en mmoire. La dernire partie de la procdure consiste rgler les caractristiques de l'cran. Dans notre cas nous prendrons : N = 1 pour fonctionner sur deux lignes. F = 0 rgle la taille des caractres (58 dots). I/D = 1 afin que le curseur se dplace vers la droite aprs avoir affich un caractre. crire le sous-programme lcd_init qui ralise cette procdure, pensez utiliser les sousprogrammes que vous avez dj crs. Intgrer l'inialisation des ports dans lcd_init . Valider la procdure par simulation. 6.2.4. Basculement entre les lignes Le contrleur d'affichage dispose d'une mmoire DDRAM reprsentant l'afficheur. Dans notre cas la taille de la mmoire utilise est de 2 lignes de 16 octets chacune. Pour changer de ligne, il suffit de venir positionner l'Address Counter au dbut de ligne souhaite.

Figure 14: DDRAM du contrleur

En utilisant vos diffrentes 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 13) Modifier la fonction lcd_ecrire_octet afin d'attendre que le contrleur est pris en compte l'action. 6.2.5. Tests des diffrentes fonctions Voil nous sommes maintenant prt utiliser l'afficheur LCD. Pour faciliter l'utilisation des fonctions que vous venez de crer 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 trs simple, il suffit de taper la commande #include lcd.asm l'endroit de votre programme o vous souhaitez intgrer vos fonctions et de dfinir les variables lcd_db, ... au dbut de votre programme. Le fichier lcd.asm doit se trouver dans le mme rpertoire que votre programme. crire le programme qui reproduit l'cran ci-dessous sur l'afficheur.
I n f o I n d u s

Si vous taper movlw 'I' le registre W sera charg avec le code ascii du caractre I.

M1 SIS

18

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

6.3.

crire une chaine de caractres

La mthode qui nous a permis de tester les fonctions de gestion de l'afficheur n'est pas des plus efficace car il est ncessaire de retaper le mme code pour chacun des caractres. Nous allons donc crire une fonction qui affiche une chaine de caractres complte. La chaine de caractres est stocke dans la mmoire programme. Pour stocker und chane en mmoire programme, il suffit d'utiliser la directive db comme dans l'exemple suivant :
... org goto ch main ... db nop h'00' main "Microcontroleur",'\0' ;ecrire en mmoire programme

La chane Microcontroleur est stocke dans la mmoire programme, elle se termine par le caractre \0 . Le label ch pointe vers le premier caractre de la chane, c'est donc l'adresse de dbut de la chaine. Dans la mmoire programme du PIC 18F4520, les adresses sont codes sur 21 bits donc 3 octets. Comme nous disposons d'un microcontrleur 8 bits nous utiliserons les directives UPPER(ch), HIGH(ch), LOW(ch) pour obtenir respectivement l'octet de poids le plus fort, de poids intermdiaire et de poids faible. Pour lire dans la mmoire programme, il faut tout d'abord initialiser le pointeur d'adresse de mmoire programme TBLPTR avec l'adresse de l'octet lire. Pour lire un octet on utilse l'instruction TBLRD qui transfre le contenu de la mmoire dans le registre TALBAT . Consulter la datasheet du pic p73-76 et p305. Configurer correctement l'instruction TBLRD . crire et tester la fonction lcd_ecrire_chaine . L'afficheur LCD ne peut afficher que 16 caractres par ligne...

M1 SIS

19

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

7.

TP n4 : Initiation la programmation en langage C 7.1. Introduction : assembleur et compilateur C

L'objectif de cette sance est de vous initier la programmation en langage C d'un microcontrleur. Par rapport l'assembleur, le recours un langage de haut niveau tel que le C s'est notablement dvelopp en pratique car il permet de simplifier l'criture des codes ainsi que leurs portabilits et leurs maintenabilits. Notamment, vous pourrez crire des instructions du type if(x==y) ou temp = 0x27 pour effectuer un test d'galit ou une affectation. Le code que vous crirez devra tre crit en C standard ANSI. La compilation des instructions C se fera par le compilateur C18 qui permet de gnrer du code pour la famille des PIC 18XXXX. Comme l'assembleur, le compilateur traduit des instructions interprtables pour un oprateur humain en un code machine excutable par le PIC. Comme nous le verrons, l'criture et la compilation de vos programmes sources C se fera dans l'environnement MPLAB. Comme pour le dveloppement de codes en assembleur, MPLAB sera donc l'environnement qui vous permettra d'crire, de compiler et de dboguer vos sources C (cf., section 3 de ce TP).

Assembleur

Compilateur C

Fichiers prcompils

script de configuration de l'diteur de lien

Figure 15: Diagramme de construction d'un excutable

On notera que, dans le cadre d'un mme projet, il est possible de dvelopper des parties en C et des parties en assembleur. Ds lors, la construction d'un code machine excutable est illustr par le diagramme de la figure 15. Dans cet exemple, un code source en assembleur et deux codes sources en C ont t crits. Pour chaque source, l'assembleur (MPASMWIN) ou le compilateur (MCC18) est utilis pour gnrer des fichiers objets (file1.o,...,file3.o). Le fichier objet file3.o est ensuite utilis avec un fichier pr-compil existant file4.o de manire former un fichier de librairie lib1.lib. Finalement, les fichiers objets restants sont utiliss avec le fichier de librairie par l'diteur de lien (MPLINK) pour crer un excutable output.hex. Notez bien galement le fichier script.lkr (cf. figure 15) qui permet de configurer correctement l'diteur de lien pour le microcontrleur utilis.
M1 SIS

20

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

7.2.

Gnration d'un signal carr

Pour vous familiariser avec la programmation en C du microcontrleur, le premier projet sera de reprendre le programme de clignotement d'une LED que vous aviez crit en assembleur. Le source C ci-aprs fait clignoter la LED L1, broche RB0, une frquence de 1Hz. Ltat de la LED change donc toutes les 500ms.
// Author: ??? //================================================ // Description : // Programme de gnration d'un signal carr // sur le port RB[0] de priode de 1 s //================================================

En-tte du programme

//-----------------------------------------------// Directives au prprocesseur //-----------------------------------------------// fichier d'en-tte pour le PIC184020 #include <p18f4520.h> // fichier d'en-tte pour les fonctions de tempo #include <delays.h> // Dsactivation du WatchDog #pragma config WDT = OFF

Fichiers d'en-tte pour le PIC184520 (p18f4520.h) et pour l'utilisation des fonctions de temporisation (delays.h) Directive pragma dsactivation du watchdog. de

// Programme Principal void main(){ //-----------------------------------------------// Dclaration des variables locales //-----------------------------------------------// 1/2 Periode d'oscillation en Nb de tempos TYPE DemiPeriode = ARGUMENT; // Configuration du portB TRISB = 0x00; // PORTB en sortie PORTB = 0x00; // RAZ du PORTB // Config. RB0-RB3 en mode I/O numerique ADCON1 = 0x0F;

Dclaration et affectation de la variable dfinissant le nombre de cycles de temporisation ncessaire une demi-priode d'oscillation ( complter). Configuration du port B

// --> Boucle TantQue : On boucle indfiniement... while(1){ // basculement du bit 0 du PORTB PORTB = PORTB ^ 0x01; // Utilisation d'une fonction de delays.h FONCTION(DemiPeriode); } // --> Fin de boucle TantQue }

Boucle permanente de changement d'tat de RB0 -> basculement de RB0 -> appel la fonction de temporisation (cf. delays.h) permettant d'attendre 500ms ( complter).

Comprendre le programme ci-dessus. Dfinir le type de la variable DemiPeriode. Dduire du fichier d'en-tte delays.h la fonction utiliser pour une temporisation telle que la priode soit de 500 ms. Dduisez-en galement l'argument associ. Passer la section suivante pour crer un projet pour ce code, pour le compiler et pour effectuer la simulation.

M1 SIS

21

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

7.3.

dition et Compilation du programme

Cette partie permet d'apprendre crer un projet MPLAB, saisir un programme en C et le compiler. 7.3.1. Dmarrage

Avant de commencer, crer le rpertoire tp4 puis dans ce rpertoire crer nouveau un rpertoire clignotant_C . Copiez dans ce rpertoire les fichier delays.h et 18f4520.lkr . Lancer la suite logicielle MPLAB IDE partir de licne qui se trouve sur votre bureau. 7.3.2. Cration dun nouveau projet en utilisant lassistant Project Wizard Cliquer sur Project >> Project Wizard Cliquer sur Suivant > puis slectionner PIC18F4520 dans le menu droulant Device . Cliquer sur Suivant > puis slectionner Microchip C18 Toolsuite afin de pouvoir dvelopper en C. Cliquer sur Suivant > puis dans le champ Project Name saisir le nom du projet (ex : clignotant) et dans le champ Project Directory aller chercher laide du bouton Browse , le dossier cr au dbut : tp4/clignotant_C . Cliquer deux fois sur Suivant > et ajouter 18f4520.lkr au projet laide du bouton Add >> Cliquer sur Suivant > puis sur Terminer. 7.3.3. Configurer les options de compilation et d'dition de lien Cliquer sur Project>Build Options...>Project et cliquer sur l'onglet General . Vrifiez que les chemins de Include Path et de Library Path sont correctement positionns en utilisant l'option Browse ... Dans l'onglet MPLINK Linker, cliquer sur l'option Suppress COD-file generation . Cliquer sur OK. 7.3.4. dition du programme Crer un nouveau fichier dans le projet, File >> Add New Files to Project Lenregistrer dans le rpertoire projet avec lextension c (ex : cligno_C.c) MPLAB Editor se lance Saisir le programme et enregistrer.

Penser ajouter des commentaires au programme pour montrer que vous avez bien compris les diffrentes instructions. 7.3.5. Compilation La compilation et l'dition de lien se fait en cliquant sur l'icne de la barre de menu. Comme en assembleur, les erreurs et warnings sont signals dans la fentre Output ainsi que le rsultat de la compilation BUILD SUCCEEDED ou BUILD FAILED. En double-cliquant sur une erreur ou un warning dans la fentre Output , vous serez amener directement la ligne concerne dans votre programme.

M1 SIS

22

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

7.4.

Simulation et programmation du micro-contrleur

Les procdures de simulation et de transfert du code excutable sur le microcontrleur ne diffrent pas de celles que vous avez pu mettre en oeuvre pour le dveloppement en assembleur, cf. l'nonc du premier TP. Effectuez la simulation du gnrateur de signal carr donn ci-avant dans l'nonc.

7.5.

Applications
Chenillard sans interruption

7.5.1.

On souhaite crer un chenillard motif variable. Un motif tant dfini par une squence d'clairage des LED comme par exemple {0x01, 0x02, 0x04, 0x08}, cette squence est rpte l'infini. Donner l'algorigramme du chenillard dfini par la squence de motif {0x01, 0x02, 0x04, 0x08}. Chaque motif devra rester allum pendant un temps de 500 ms. Pour dfinir la squence de motifs, vous prendrez soin de dclarer un tableau de unsigned char car ce type correspond un format 8 bits qui pourra directement tre affect sur le PORT B (cf., MPLAB C18 C COMPILER USERS GUIDE, page 11). crire et tester ce programme. 7.5.2. Chenillard multiple sans interruptions On souhaite ajouter un second motif distinct au chenillard de manire permettre le choix de la squence. On prendra par exemple comme seconde squence {0x01, 0x02, 0x04, 0x08, 0x04, 0x02}. La squence considre sera slectionne par une variable globale. Le motif afficher l'intrieur de la squence considre sera retourn par une fonction appele valeur_chenillard() dont vous dfinirez les entres et les sorties. Donner l'algorigramme du chenillard dfini par le couple de squences {0x01, 0x02, 0x04, 0x08} et {0x01, 0x02, 0x04, 0x08, 0x04, 0x02}, le motif tant dfini par l'tat du bouton poussoir connect RA4. crire et tester ce programme. 7.5.3. Chenillard multiple et gestion des interruptions

L'objectif de ce dernier exercice est de permettre de changer rgulirement le motif du chenillard en utilisant les interruptions gnres par le TIMER0. Une des difficults consiste alors configurer correctement le TIMER0 de manire permettre de gnrer les interruptions priodiquement. On donne ci-arps les lments du code source pour ce faire.

M1 SIS

23

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520


//------------------------------------------------// Configuration des interruptions, cf. sections // 11 du datasheet et le fichier header p18h4520.h //------------------------------------------------// active l'interruption pour le TIMER0 INTCON = VALEUR; 9 et

Configuration du micro-contrleur pour la gestion // Active la gestion des priorites pour les interruptions d'interruption et RCONbits.IPEN = VALEUR; configuration du // Efface le registre TMR0H TIMER0 pour ( TMR0H = VALEUR; complter). // Efface le registre TMR0L
// Place l'interruption TIMER0 en priorite haute INTCON2 = VALEUR; TMR0L = VALEUR; // Active le TIMER0 et configure la valeur du prescaler T0CON = VALEUR; // Active les interruptions INTCONbits.GIE = VALEUR;

L'objectif est alors de dclencher une interruption chaque fois que le TIMER0 est en overflow , cette interruption commandant le changement de motif du chenillard. A toutes fins utiles, on rappelle que le langage C ne permet pas directement de traiter les interruptions puisqu'il ne laisse pas l'utilisateur le contrle des adresses du programme (quivalent du org en assembleur). A la place une directive #pragma a donc t intgre au compilateur : Les directives
#pragma code mon_prog = @ void mon_prog(void) { code C ... } #pragma code

forcent le compilateur placer le code C l'adresse @ (cf., MPLAB C18 C COMPILER USERS GUIDE, page 20 et 29). La directive
#pragma interrupt ma_fonction

dclare ma_fonction comme la fonction de traitement des interruptions prioritaires (adresse 0x18). La directive
#pragma interruptlow ma_fonction

dclare ma_fonction comme la fonction de traitement des interruptions non prioritaires (adresse 0x08). Rappel : un exemple de programme C avec interruption est disponible dans le cours. Donner l'algorigramme du chenillard dfini par le couple de squences {0x01, 0x02, 0x04, 0x08} et {0x01, 0x02, 0x04, 0x08, 0x04, 0x02}, le changement de squence tant command par interruption du TIMER0 par priode de 4 secondes, approximativement. crire et tester ce programme.

M1 SIS

24

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

8.

TP n5 : Gestion de Priphriques et Interruptions 8.1. Communication srie : RS232

Le module Enhanced Universal Synchronous Receiver Transmitter (EUSART) est le module du PIC18F4520 permettant une communication srie de type RS232. Ce type de connexion tant galement disponible sur un PC, nous utiliserons le programme hyperterminal de Windows pour dialoguer avec le C.
Liaison srie 0-5V

Interface
MAX232

RS232

Port
COM

Hyperterminal PC

Picdem 2 Plus

Figure 16: Communication PC-C

RS232 est une norme qui standardise les communications sries. La transmission de donnes pouvant se faire sur 7 ou 8 bits, avec ou sans contrle de parit, celle-ci pouvant tre gres de faons paire ou impaire. Une trame RS232 commence par un bit de start et se termine par un ou deux bits de stop. La figure suivante illustre une des configurations possibles. La vitesse de transfert pouvant galement varier d'une application l'autre. La vitesse se mesure en Bauds (nombre de symbole transmis par seconde). Une connexion RS232 est asynchrone car entre l'metteur et le rcepteur, il y a seulement les lignes de donnes Rx et Tx (pas de ligne d'horloge).
str b6 b5 b4 b3 b2 b1 b0 par stp stp

Figure 17: Trame RS232, 7 bits, parit, 2 bits de stop

Nous utiliserons la configuration suivante : Vitesse : 9600 Bauds Taille des donnes : 8 bits, Parit : Aucune, Bit de Stop : 1.

Sur un PC le port srie est appel COMX, avec X le numro du port. 8.1.1. L'hyperterminal

L'hyperterminal est un programme livr avec Windows qui permet de se connecter des htes distants (ordinateurs, sites telnet, oscilloscope, ...) l'aide d'un modem, d'un cble null-modem (liaison srie) ou d'une connexion TCP/IP. A chaque fois qu'un caractre est saisi, il est envoy sur le support de communication, tout caractre reu est affich. L'hyperterminal est accessible dans le menu Dmarrer > Tous les programmes > Accessoires > Communications > Hyperterminal (Win XP) ou alors via la commande hyperterm dans menu Dmarrer > Excuter. Lorsqu'il s'ouvre, il vous demande de configurer la connexion : saisir un nom (ex: Pic) et cliquer sur OK, configurer le type de connexion, gnralement COM1 et cliquer sur OK, configurer les proprits de la connexion (9600 Bauds, 8 bits, aucune parit, 1 bit de
M1 SIS

25

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 stop, pas de contrle de flux) et cliquer sur OK, enregistrer la connexion dans votre rpertoire pour ne pas avoir la recrer (menu Fichier > Enregister sous ...). 8.1.2. Programme echo Le programme echo renvoie sur la liaison srie tout octet reu sur celle-ci, l'envoi et la rception des octets sont raliss sans interruption.

Configuration du module EUSART Les registres initialiser sont, BAUDCON, 'Baud Rate Control Register' qui initialise la vitesse via le registre SPBRGH:SPBRG dont la valeur est calcule en utilisant les tableaux reproduits en page 205-208 du datasheet. BAUDCON autorise galement les interruptions, la rception, ... RCSTA, 'Recieve Status And Control Register' pour configurer la rception TXSTA, 'Transmit Status And Control Register' pour configurer l'mission

mission et Rception

L'octet reu est plac dans le registre RCREG (Recieve Register) et l'octet envoyer est placer dans TXREG (Transmit Register). Mme lorsque que les interruptions sont interdites, on peut utiliser les flags pour connatre l'tat (vide ou plein) des registres RCREG et TXREG. Les flags se trouvent dans le registre PIR1 (Peripheral Interrupt Request Flag Register 1). Pour savoir si un octet est disponible, il suffit simplement de regarder le flag associ RCREG (rception d'un octet). La procdure d'mission est reprsente par le schma bloc, ci-dessous (extrait du datacheet).

Figure 18: Schma bloc du module d'mission

Lorsqu'un octet est plac dans TXREG, il est coup dans TSR (Transmit Shift Register) qui comme son nom l'indique effectue un dcalage la vitesse impose par SPBRGH:SPBRG. On notera que l'tat de TXREG est visible dans TXIF et que l'information de transmission en cours se situe dans TRMT. Le schma bloc de la rception se trouve en page 213 du datasheet .

M1 SIS

26

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Utiliser le datacheet pour initialiser les registres BAUDCON, RCSTA et TXSTA.(Pour rgler 1 bit de stop, le bit SENDB du registre TXSTA doit tre 0) crire et tester le programme echo , utiliser le cble srie du programmateur pour communiquer avec la carte C.

8.2.

Applications
Chenillard motif variable

8.2.1.

On souhaite crer un chenillard motif variable. Un motif tant dfini par une squence d'clairage des LED comme par exemple {'0000', '0001', '0010', '0100', '1000'}, cette squence est rpte l'infini. Le changement de squence se fait par l'envoi du numro de la squence par liaison RS232 l'aide de l'hyperterminal. Ainsi la saisie de 1 au clavier jouera la squence 1, etc. Le code ASCII des chiffres du pav numrique tant :
Caractre Code ASCII 0 1 2 3 4 5 6 7 8 9

48 49 50 51 52 53 54 55 56 57 (0x30) (0x31) (0x32) (0x33) (0x34) (0x35) (0x36) (0x37) (0x38) (0x39) Tableau 2: Code ASCII des chiffres

Toutes les 500ms, l'tat des LED est modifi en utilisant une fonction de delays.h. Le changement de squence est gr sur interruption de rception (EUSART), quand un octet est reu par le C, il le renvoi pour l'afficher dans l'hyperterminal. Si la squence demand n'existe pas, le C renvoi '?' au PC et ne modifie pas le choix de squence. crire et tester ce programme Note : La valeur du chiffre associ au code ASCII peut tre obtenue par une soustraction. En C, le premier lment du tableau est 0. Une matrice est un tableau de tableau. 8.2.2. Devinette Le programme Devinette est un jeu entre le C et vous, les communications se faisant via le PC (hyperterminal). Le principe est simple, le C choisi un nombre entre 0 et 255 et doit vous le faire deviner en un temps donn, 1 min. Le temps restant est visible sur les 4 LEDs (1 led correspondant 25s). Si vous trouvez le nombre choisi avant 1 min, le C vous donne le temps que vous avez mis en secondes, sinon il vous informe que vous avez perdu et vous donne la rponse, puis le jeu recommence.

Fonctions de communications :

crire et tester les fonctions de communications (RS232) suivantes : com_init qui initialise les registres de l'EUSART. com_recieve qui attend l'arrive d'un octet et le renvoie. com_transmit qui permet d'envoyer un octet vers le PC. com_string_transmit qui envoie une chane de caractres (tableau d'octets) au PC. com_string_receive qui permet de recevoir une chane de caractre envoye par le PC, cette fonction reoit en paramtre l'adresse du tableau (chane) o l'on veut stocker la chane reue. (La fin de la saisie dans l'hyperterminal peut tre signale par l'appui sur la touche Entre)
M1 SIS

27

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Dans l'hyperterminal, le caractre '\n' permet de passer la ligne suivante (touche CTRL+Entre) et '\r' de faire un retour chariot, retour en dbut de ligne (touche Entre). Une chane se termine par le caractre '\0'.

Fonction de gnration alatoire du nombre :

Cette fonction doit renvoyer le nombre mystre. Pour cela elle incrmente un entier n cod sur 8 octets (de type unsigned char) tant qu'aucune donne n'est reue sur la liaison srie. Quand n = 255, si on ajoute 1 on a n = 256 qui se code sur 9 bits mais comme n est sur 8 bits, on aura n = 0. crire cette fonction.

Fonctions de gestion du temps

Le temps maximal pour trouver la solution est dfinit dans le programme principal (main). Le temps restant est une variable globale (commune toutes les fonctions). On mesure le temps avec le TIMER 0. crire les fonctions : timer_init qui initialise les registres du timer, des interruptions, timer_go qui lance le dcompte et les interruptions, timer_stop qui arrte le dcompte et les interruptions, timer_interrupt qui dcrmente le temps et met jour les LED (une LED correspond 25 secondes restantes).

Programme complet

Lorsque le programme dmarre, le C envoie un message au joueur en lui demandant d'appuyer sur une touche pour commencer, ce qui permet de gnrer le nombre mystre. Ds l'appui le chrono est lanc, lorsque une proposition est faire, le C informe le joueur du fait que le nombre mystre est suprieur ou infrieur sa proposition. Si le joueur trouve, il est inform de son temps sinon le nombre mystre lui est donn. A la fin d'une partie le programme se relance. crire et tester le programme devine , la conversion d'une chane de caractre en entier peut se faire avec la fonction atoi de la bibliothque stdlib.h, il y a galement la fonction inverse itoa. Le temps peut se terminer lorsque le C est en attente d'une saisie du joueur. Le jeu se joue avec le pav numrique du clavier, tout appui sur une autre touche peut faire bugger le programme. Si vous avez le temps, vous pouvez dtecter les erreurs de saisie et demander une nouvelle saisie.

M1 SIS

28

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

9.

TP n6 : Panneau d'affichage lumineux

Afin de permettre la secrtaire de la formation de vous diffuser plus facilement divers messages nous allons raliser un systme d'affichage partir de l'afficheur LCD de la carte. L'affichage se fera sur deux lignes : Le titre du message sur la premire ligne. Il est centr et ne doit pas dpasser 16 caractres. Le corps du message qui dfile en boucle sur la seconde ligne. Pour mettre jour le titre et/ou le corps du message la secrtaire utilisera hyperterminal (liaison RS232), elle aura aussi la possibilit de dsactiver l'afficheur. Le message ainsi que l'tat de l'afficheur actif et inactif devront tre sauvegards mme en cas de coupure de courant !

9.1.

Gestion de l'afficheur LCD


Conversion des fonctions de bas niveau du driver en C

9.1.1.

Dans le TP n3, nous avons cris le driver de l'afficheur en assembleur, il n'est donc pas directement utilisable dans un programme C. Le compilateur MCC18 permet l'intgration de code assembleur dans le code C en utilisant les directives _asm et _endasm . Contrairement au compilateur MPASMWIN, le compilateur C ne connait pas les options par dfaut des instructions (cf. jeu d'instructions) il faut donc rajouter toutes ces options votre code assembleur. Ainsi la fonction lcd_ecrire_quartet deviendra :
void lcd_ecrire_quartet(char q) { WREG=q; _asm andlw 0x0F bcf PORTD,3,0 bcf PORTD,2,0 bcf PORTD,1,0 bcf PORTD,0,0 ... _endasm }

Complter la fonction void lcd_ecrire_quartet(char q) Sur le mme principe crire void lcd_dispo(void) Nous avons maintenant cod les deux fonctions de base pour la gestion du lcd, les autres fonctions vont tre recodes en C. crire la fonction void lcd_ecrire_octet(char lcd_db) . Dans MCC18 l'instruction swapf est remplace par la fonction Swapf. Pour inverser les quartets MSB et LSB de W , il suffit d'crire Swapf (WREG,0,0); . crire les fonctions void lcd_ecrire_ordre(char o) et void lcd_ecrire_donnee (char d) . crire les fonctions void lcd_cls(void) , void lcd_l1(void) et void lcd_l2(void) . crire les fonctions void lcd_init(void) en utilisant la bibliothque delays.h pour les temporisations. Crer la fonction void lcd_curseur_position(char l, char p) qui permet de positionner le curseur d'affichage la p ime position de la ligne l . (cf figure14, page 18) Tester ses fonctions sur la carte d'valuation.
M1 SIS

29

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 9.1.2. Cration de fonctions de haut niveau

Le langage C nous permet d'crire trs simplement des fonctions plus volues pour la gestion de l'afficheur. crire la fonction void lcd_lcls(char l) qui efface la ligne l . crire la fonction void lcd_ecrire_chaine(char *ch) qui affiche une chaine de caractress sur la ligne active. crire la fonction void lcd_ecrire_chaine_centre(char *ch, char l) qui affiche une chaine de caractress en la centrant sur la ligne l , selon le principe ci-dessous. - Cas d'une chaine de longueur paire :
C H A I N E

- Cas d'une chaine de longueur impaire : (plus d'espace droite).


C H A I N E S

Tester ses fonctions sur la carte. 9.1.3. Cration de la libraire afficheurlcd Nous disposons maintenant d'un ensemble de fonctions de gestion du LCD afin de les utiliser et de pouvoir les diffuser plus facilement nous allons les regrouper dans une librairie que l'on nommera afficheurlcd . Une librairie (fichier *.lib) est en fait une compilation de fichiers objets. Les fichiers objets contiennent entre autres la liste des noms de fonctions ou les tiquettes (pour ASM) ainsi que leur code machine (codage binaire, ces fichiers ne sont pas ditables !). Les fichiers objets (*.o) sont obtenus aprs compilation de votre code dans MPLAB. Crer un nouveau projet sous MPLAB comme pour faire un programme classique. Dans le fichier source coller vos fonctions de gestion de l'afficheur avec les diffrents #include Compiler, une erreur vous informe que la fonction main n'est pas dfinie, c'est normal ! Dans votre rpertoire projet, un fichier objet du mme nom que votre programme a t cr. C'est ce fichier que nous allons maintenant convertir en librairie l'aide de l'utilitaire de gestion de bibliothque MPLIB. MPLIB est un programme fonctionnant en mode console sous DOS avec les options suivantes : /c Cration contenant un ou plusieurs fichiers objets
/t /d /r /x

Liste le contenu de la libraire Efface un objet de la librairie Remplace un objet existant dans la librairie Extrait un membre de la librairie

La syntaxe d'utilisation de MPLIB est : MPLIB /{ctdrx} nom_librairie [liste de fichiers objets] Ouvrir une fentre DOS (Menu dmarrer, Excuter, cmd) Se positionner dans le rpertoire o vous souhaitez crer la librairie, dans l'exemple D:\tps\tp6\ (commande DOS cd : change directory) Crer la librairie en utilisant la commande MPLIB /c afficheurlcd.lib votre_fichier_objet. Un exemple de cration est reproduit en figure 19.
M1 SIS

30

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

C:\Documents and Settings\Flavien>D: D:\>cd tps\tp6 D:\tps\tp6> D:\tps\tp6>mplib /c afficheurlcd.lib D:\tps\tp6\lib\lcdlib.o MPLIB 4.12, Librarian Copyright (c) 2007 Microchip Technology Inc. Errors : 0 D:\tps\tp6> Figure 19: Cration d'une librairie avec MPLIB

Pour utiliser une librairie il faut soit lui associer un fichier d'entte (*.h) dans lequel se trouve les prototypes de vos fonctions soit dclarer les prototypes dans votre programme. Le fichier d'entte tant simplement un fichier texte renommer afficheurlcd.h . Crer le fichier afficheurlcd.h dans le mme rpertoire que afficheurlcd.lib

Inclure la librairie dans un projet

Si l'on souhaite utiliser notre bibliothque comme une bibliothque dj installe (avec #include<afficheurlcd.h> avec MPLAB, il est ncessaire de modifier la variable d'environnement MCC_include et de modifier le fichier d'dition de liens (*.lkr). Dans le cadre des travaux pratiques nous n'utiliserons pas cette mthode. La procdure suivre pour utiliser la bibliothque est donc la suivante : Dans votre rpertoire projet, copier-coller les fichiers afficheurlcd.lib afficheurlcd.h . Ajouter le fichier afficheurlcd.lib au dossier Library Files de votre projet. Insrer la directive #include "afficheurlcd.h" au dbut de votre programme. Tester votre librairie. et

9.2.

Gestion de l'EEPROM

La mmoire EEPROM (Electrically-Erasable Programmable Read-Only Memory ou mmoire morte effaable lectriquement et programmable, aussi appele E2PROM ou EPROM) est un type de mmoire morte. C'est dire utilise pour enregistrer des informations qui ne doivent pas tre perdues lorsqu'elle n'est plus aliment en lectricit. Le PIC 18F4520 dispose de 256 octets de mmoire interne EEPROM qui seront rpartis de la manire suivante : l'tat du panneau (1 octet) le titre du message (17 octets : 16 caractres + le caractre '\0' de fin de chaine) le corps du message (237 octets : 236 caractres + le caractre '\0') Toutes les informations ncessaires la lecture est l'criture dans l'EEPROM interne se trouvent dans la datasheet pages 83 87. crire les fonctions char eeprom_lire(char ad) et void eeprom_ecrire(char data, char ad) qui permettent respectivement de lire et d'crire l'adresse ad de l'EEPROM, l'adresse mmoire variant entre 0x00 et 0xFF.

M1 SIS

31

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Dans la fonction d'criture, l'interdiction des interruptions est ncessaire seulement si celles-ci ont t actives. On ne doit pas quitter la procdure d'criture en mmoire tant que l'criture dans la mmoire n'est pas termine. Vous pouvez tester les fonctions d'criture et de lecture dans l'EEPROM avec le simulateur de MPLAB condition de dsactiver l'attente de fin d'criture... Aller dans le menu View > EEPROM en double cliquant sur un espace mmoire vous pouvez le modifier. Pour notre panneau d'affichage, nous allons venir lire la chaine (ligne 1) ou une partie de la chaine (ligne 2) dans l'EEPROM. Pour cela vous allez crie la fonction void eeprom_lire_chaine( char *ch, char len, char ad) . Cette fonction copie dans la chaine ch le contenu de l'EEPROM partir de l'adresse ad jusqu' ce que le caractre '\0' soit rencontr ou que la chaine ch soit de longueur len . Quel sont les plages d'adresse en EEPROM de l'tat de l'afficheur, le titre et le corps du message ? crire la fonction eeprom_lire_chaine . Simuler cette fonction avec MPLABSIM.

9.3.

Panneau d'affichage
Panneau message fixe

9.3.1.

crire un programme qui affiche le titre du message sur la premire puis fait dfiler en continu le corps du message sur la seconde ligne : le corps du message commence apparatre sur la droite de l'cran, puis dfile vers la gauche. Quand la dernire lettre du corps du message sort de la gauche de l'cran, le dfilement recommence. Dans ce programme, vous devez galement grer l'tat du panneau : si l'tat vaut 0, le texte ne dfile pas et "Hors Service" est affich sur le panneau, si l'tat vaut 1, le corps du message dfile. La vitesse de dfilement est de 500 ms/caractre. Lorsque l'afficheur est en service la led connecte RB0 est allume, en hors service elle clignote une frquence de 1 Hz. Vous pouvez programmer l'EEPROM interne du C via MPLAB afin d'initialiser le texte afficher. Vous pouvez saisir vous mme le texte afficher dans l'EEPROM en respectant les plages mmoires, les valeurs et le caractre '\0' ou alors importer directement le fichier tp6_eeprom.mch qui vous est fourni. Lors de la programmation du C, l'EEPROM le sera galement. Tester ce programme sur la carte, penser essayer le cas o le panneau est actif et celui o il est hors service. 9.3.2. Panneau message variable

Le programme que vous venez d'crire est trs utile pour diffuser un message mais peu pratique. En effet, si chaque fois que la secrtaire souhaite modifier le message elle doit prendre un programmateur et reprogrammer l'EEPROM, elle ne voudra pas l'utiliser : c'est compliqu, a prend du temps, il faut sortir le microcontrleur du panneau, ... Pour rgler ce problme vous allez mettre en place un systme de mise jour distance en utilisant le protocole RS232 comme noud l'avons dans le TP n5. Via hyperterminal la secrtaire accdera une interface d'administration qui lui permettra de modifier l'tat du panneau, le titre et le corps du message.
M1 SIS

32

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Le programme va donc afficher en continu le message et basculer en mode mise jour lorsque la commande sera reue. Les diffrentes commandes et la procdure de mise jour sont dfinis dans l'algorigramme ci-dessous (figrue 20). Complter le progammme prcdent pour intgrer l'interface d'administration. Commenter bien ce programme afin d'expliquer ce que vous fates et pourquoi. Penser grer la taille maximale des chaines et le carctre '\0' en cas de dpassement de la taille maximale en informer la secrtaire (hyperterminal).

Valeur dans RCREG ? RCREG='d' Mettre le panneau hors service Mettre le panneau hors service RCREG='e' RCREG='s' Renvoyer l'tat du panneau et le contenu du titre et du corps du message dans hyperterminal RCREG='u' Afficher Mise jour sur le panneau Rcuprer le nouveau titre du message Rcuprer le nouveau corps du message

Mettre le panneau en service

Afficher dans hyperterminal, que la commande a t effectue

Figure 20: Algorigramme de l'interface d'administration du panneau

L'application ralise ici est trs proche d'un cas d'utilisation relle si ce n'est que l'afficheur aurait peut tre plus de lignes. La diffrence majeure serait dans l'inteface d'administration elle ne serait pas ralise avec hyperterminal, mais avec un programme spcial en C, C++, etc ... qui serait crit avec des botes de dialogue beaucoup plus conviales pour la secrtaire.

M1 SIS

33

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

10.

TP n7 : Station Service

Dans ce TP nous allons raliser de la manire la plus raliste possible le programme de commande d'un automate de pompe essence.

10.1.

Automate de Pompe

Le bouton poussoir connect RB0 reprsente la poigne de distribution de carburant. Lorsque le bouton est appuy, la distribution est en cours, le moteur de la pompe est alors activ (led RB3 claire). Un dbitmtre mesure le dbit de carburant afin de calculer le volume, il donne une impulsion chaque centilitre vers. Ici, il sera simul par le timer 0 qui effectura une impulsion toute les 15 ms environ. crire un premier programme qui initialise les entres sorties utilises, le timer 0, autorise les interruptions puis l'infini xcute :
moteur pompe arrt dbimtre arrt tant que Poigne Accroche faire fin faire moteur pompe activ dbimtre activ tant que Poigne Dcroche faire fin faire

Pour tester ce programme lors d'une interruption, inverser l'tat de RC2 afin d'envoyer un signal d'environ 50 Hz sur le transducteur pizo-lectrique. Nous allons maintenant intgrer au programme les calculs de volume et de prix. Le volume est compt en centilitres de 0 9999 cl. Il peut donc tre stocker dans une variable de type entier (16 bits). Le prix du litre est fix 1,08 , un centilitre vaut donc 1,08 centime d'euro. Le prix maximun peut atteindre 107,9892 . Le prix sera donc un nombre de centimes de centimes variant entre 0 et 1079892, il doit tre cod sur entier long (32 bits). Chaque interruption du timer 0 correspond un centilitre vers. Le sous programme d'interruption incrmentre le volume (+1cl) et le prix en centime de centime (+108c). On aurait galement pu calcul le prix en multipliant le volume par le prix au litre mais cela aurait ncessit des multiplications, plus longues effectuer que des additions. Modifier votre programme pour intgrer ces calculs, puis assurez-vous en simulation que le volume et le prix voluent correctement. L'afficheur LCD va nous permettre (via la librairie crite au prcdent TP) d'afficher le prix et le volume lorsque la distribution est en cours. Le volume en centilitre est un entier compris entre 0 et 9999 et nous voulons l'afficher l'cran sous la forme dcimale : <m><c>,<d><u> l o < m >, ... , < u > reprsentent respectivement le chiffre des milliers, centaines, dizaines et units du nombre de centilitres. Si on effectue la division euclidienne de la variable volume par 1000, < m > est le quotient et le reste reprsente centaines, dizaines, units ... En C, le quotient de la division euclidienne est donne pas l'oprateur / et le reste par %. Ajouter ces calculs au programme prcdent, et le simuler. Vrifier l'exactitude des diffrents chiffres afficher. Puis en utilisant les points d'arrt, mesurer la dure d'xcution du code de calcul des chiffres afficher.
M1 SIS

34

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Pour acclrer les calculs, nous allons utiliser l'algorithme suivant, donn ici pour le chiffre <m>. Les calculs tant effectus dans la variable vol afin de ne pas modifier la variable volume.
m = 0 vol = volume tant que vol >= 1000 faire m = m + 1 vol = vol 1000 fin faire

Aprs avoir bien compris cet algorithme, remplacer toutes les divisions de votre programme par ces boucles (fonction : deux valeurs sont retourner effectuer un passage par adresse pour l'une des deux ...). Simuler le fonctionnement et mesurer la dure d'xcution. Attention ! La dure dpend du chiffre dterminer. Faites des essais avec le volume 1 puis avec les valeurs qui donneront la plus grande dure. Avons nous gagn beaucoup de temps ? Le prix et le volume sont affichs de la manire suivante :
G a z o l e x x , x x l 1 , 0 8 E / l y y y , y y E

On calcule le prix afficher de la mme faon que le volume. Quel est le premier chiffre afficher ? crire le code corresspondant au calcul des yyy,yy . Lorsque que le client raccroche la poigne, la pompe est bloque tant que celui-ci n'a pas pay. La validation du paiement tant reue de l'automate de caisse. Pour l'instant un appui sur RA4 validera la paiement et permettra au client suivant de se servir en carburant. Intgrer galement la contrainte que le volume ne doit pas dpasser pas 9999 cl, sinon la pompe s'arrte et attend le paiement. crire et tester ce programme sur la carte.

10.2.

Communication avec l'automate de caisse

Gnralement une station service est constitue de plusieurs pompes. On ne peut donc pas utiliser une connexion de type RS232 pour communiquer avec l'automate de caisse ou alors il faut, chaque client, aller brancher le cble sur la bonne pompe... Heureusement il existe d'autres manires de communiquer afin de mettre plusieurs entits en rseau. Le PIC 18F4520 intgre un module MSSP de communication srie (Master Synchronous Serial Port) qui gre entre autre le protocole IC que nous allons utiliser. 10.2.1. Le bus IC IC (pour Inter Integrated Circuit Bus) est le nom du bus historique, dvelopp par Philips pour les applications de domotique et dlectronique domestique au dbut des annes 1980, notamment pour permettre de relier facilement un microprocesseur les diffrents circuits dune tlvision moderne . Le bus IC est un bus srie synchrone constitu de deux lignes : Serial Data Line (SDA) et Serial Clock Line (SCL) qui assurent la communication entre diffrents modules.
SDA SCL
Maitre metteur, rcepteur Esclave 1 metteur, rcepteur Figure 21: Architecture IC ... Escalve n metteur, rcepteur

M1 SIS

35

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Le module qui demande le transfert de donnes et qui gnre lhorloge est le matre, le module qui rpond est un esclave. Un mme systme peut disposer de plusieurs matres, on le nomme alors multimatre. Dans ce cas, il faut arbitrer la discussion entre les diffrents modules. Nous verrons ici seulement le cas d'un seul matre avec plusieurs esclaves. Le bus IC travaille une vitesse de 100 kbits/s en mode standard et 400 kbits/s en mode rapide. Les lignes SDA et SCL sont bidirectionnelles. Au repos, elles sont au niveau haut. Le format d'une trame standard est reproduit dans le tableau 3. Un transfert type IC est reproduit en figure 23. S Adresse RW A Donne A ... Donne A P

Tableau 3: Trame IC

S : bit de start, est la condition de dpart : SDA passe de ltat haut ltat bas pendant que SCL est au niveau haut (cf. figure 22). Adresse : reprsente l'adresse du module auquel on veut s'adresser, elle est compose de 7 bits A6A5A4A3A2A1A0, A6A5A4A3 sont fixs par lIC commitee A2A1A0 sont libres pour nous permettre de mettre plusieurs fois le mme esclave sur le bus (au maximum 8). RW (Read Write) : est le bit de mode de transmission. Sil est 0, on est en mode criture, cest le matre qui envoie des donnes lesclave. Sil est 1, on est en mode lecture, cest lesclave qui envoie des donnes au matre. LAdresse et R/W sont transmis ensemble ce qui forme un mot de 8 bits. A : bit dacquittement, il a lieu la fin de chaque transmission dun octet pour informer l'metteur que le rcepteur a bien reu l'octet envoy. Aprs, lenvoi du dernier bit de l'octet, juste avant le 9ime coup dhorloge, le rcepteur force SDA ltat bas. Donne : sont les huit bits de donnes que lon transmet. P : bit de stop, est la condition de stop. SDA passe de ltat bas ltat haut pendant que SCL est au niveau haut (cf. figure 22).

Figure 22: Bus IC, Bit de Start et Bit de Stop

En regardant le protocole de transfert, on s'aperoit que le nombre maximal desclaves est 27 soit 128. Comme les lignes SDA et SCL sont au repos au niveau haut, les composants (matres, esclaves) IC ne peuvent donc que les forcer ltat bas. Ce fonctionnement impose aux circuits des sorties collecteur ouvert (figure 24) ou drain ouvert pour SDA et SCL (cf. Documentation IC). A6 Bit de Start A5 A0 RW
Acquittement de l'esclave

D7

D6

D5...0
Acquittement du rcepteur si ce n'est pas la fin du transfert

Bit de Stop

Le matre met l'adresse de l'esclave, RW et gre l'horloge.

L'metteur met les donnes, le matre gre l'horloge.

Figure 23: Transfert de donnes sur le bus IC M1 SIS

36

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Pour stopper une transmission, en mode lecture le matre nacquitte pas le dernier octet transmis et gnre un bit de stop. En mode criture, si lesclave nacquitte pas le dernier octet, le matre gnre le bit de stop. Les donnes ne sont valides que sur un niveau haut de SCL. Une extension de l'IC permet d'avoir plus de priphriques en codant l'adresse sur 10 bits mais nous ne verrons pas ce cas dans ce tp.

Figure 24: Connexions collecteur ouvert

Sur un bus IC, le pic peut tre soit matre soit esclave. Dans notre application qui jouent les rles de matre et d'esclave ? Justifier votre rponse. 10.2.2. change entre les automates de caisse et de pompes
Message

Les tableaux suivants reprsentent les changes entre les automates : En attente de client Distribution en cours Distribution termine, attente de validation du paiement
Tableau 4: Communication Automate de pompe vers caisse
Message

'c' 'o' 'ayyyyy' *

Validation du paiement
Tableau 5: Communication Automate de caisse vers pompe

'v'

* : yyyyy tant les chiffres du montant payer. 10.2.3. Le bus IC et l'automate de caisse Nous allons commencer par tudier le programme de l'automate de caisse. Ce programme permet via hyperterminal de communiquer avec les pompes. Pour connatre le statut d'une pompe, il suffit de saisir son numro dans hyperterminal l'aide du pav numrique. Nous nous intressons seulement la partie IC de ce programme dans ce TP. Expliquer, commenter les fonctions de l'automate de caisse reproduites dans le tableau 6. partir de ces fonctions de gestion du bus, crire les fonctions de communication void i2c_master_to_slave( char adresse, char donnee ) et char i2c_slave_to_master( char adresse ) ralisant respectivement le transfert d'un octet du matre vers l'esclave et de l'esclave vers le matre. Les chronogrammes page 192 et 193 de la datasheet pourraient vous tre utile.
M1 SIS

37

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 Quelles modifications faut-il apporter aux fonctions que vous venez d'crire pour qu'elles soient utilisables dans le cas de la station service ?
void i2c_master_init( void ) { TRISCbits.TRISC3=1; TRISCbits.TRISC4=1; SSPCON1=0b00101000; SSPSTATbits.SMP=1; SSPADD=9; SSPCON2=0; } void i2c_master_start_bit( void ) { SSPCON1bits.SSPEN=1; SSPCON2bits.SEN=1; while(SSPCON2bits.SEN); } void i2c_master_restart_bit( void ) { SSPCON2bits.RSEN=1; while(SSPCON2bits.SEN); } void i2c_master_stop_bit ( void ) { SSPCON2bits.PEN=1; while(SSPCON2bits.PEN); SSPCON1bits.SSPEN=0; } void i2c_master_ack( void ) { SSPCON2bits.ACKDT=0; SSPCON2bits.ACKEN=1; while(SSPCON2bits.ACKEN); } void i2c_master_nack( void ) { SSPCON2bits.ACKDT=1; SSPCON2bits.ACKEN=1; while(SSPCON2bits.ACKEN); } char i2c_master_ecrire( char octet ) { SSPBUF=octet; while(SSPSTATbits.R_W); return SSPCON2bits.ACKSTAT; } char i2c_master_lire( void ) { SSPCON2bits.RCEN=1; while(SSPCON2bits.RCEN); return SSPBUF; }

Tableau 6: Fonction IC de l'automate de caisse

10.2.4.

Le bus IC et l'automate de pompe

Intressons nous maintenant au programme d'un automate de pompe, la pompe tant intrroge par l'automate de caisse. L'adresse de l'automate de pompe sur le bus IC est code sur 7 bits et correspond au code ASCII du numro de la pompe. Ainsi l'adresse de la pompe n1 sera 0x31 qui se code bien sur 7 bits. La plage d'adresse est de 0x31 0x38. L'adresse doit tre stocke dans les bits de poids fort du registre correspondant, le bit 0 de ce registre restant zro. Les lignes SCL et SDA sont connectes respectivement aux broches RC3 et RC4, broches qui doivent tre configures en entre. Nous utiliserons le mode de fonctionnement standard et sans interruptions de bits de Start et de Stop. C'est l'automate de caisse qui va venir demander l'automate de pompe la somme encaisser. Lorsque l'automate de caisse veut faire une demande, il envoie sur le bus l'adresse de la pompe questionner (mode lecture). Si l'automate de pompe reconnat son adresse, le flag SSPIF de ce dernier se positionne. Si les interruptions ont t autorises le programme passe alors la routine associe. L'automate de pompe fonctionnant en mode esclave il est donc ncessaire d'utiliser les interruptions car sinon, le programme va passer son temps surveiller le bus et ne pourra pas effectuer la distribution de carburant. D'autant plus que la demande de l'automate de caisse peut intervenir n'importe quand. (Nous utiliserons les messages reproduits en tableau 4.) Complter la fonction d'initialisation (ci-aprs) du module MSSP pour l'utilisation en mode IC dans le cas d'un automate de pompe. Expliquer vos initialisations.
M1 SIS

38

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520


void i2c_slave_init(void) { TRISCbits.TRISC3 = ... TRISCbits.TRISC4 = ... SSPCON1 = ... SSPCON2=0; SSPSTAT=0; SSPSTATbits.SMP = ... SSPADD = ... IPR1bits.SSPIP = 1 ... = ... ... = ... }

//CKP=1 ...

En utilisant la datasheet du pic, quels sont les bits initialiser pour autoriser l'interruption du module IC ? Rajouter ces initialisations la fonction void i2c_slave_init( void ) . En regardant la datasheet on s'aperoit qu'en mode esclave, 3 bits permettent de connatre l'tat de la communication IC. Tout le reste tant gr par le module MSSP et donc transparent pour nous simple utilisateur. Ces bits sont les bits R_W, D_A et BF du registre SSPSTAT. Quelles sont les informations que nous donnent chacun de ces bits ? L'tude des chronogrammes page 176 et 177 de la datasheet montrent les diffrentes configurations possibles de ces bits lors d'une interruption du module IC : D_A 0 1 0 1 1 R_W 0 0 1 1 0 BF 1 1 0 0 0
Mode lecture : le matre a gnr un Fin de l'envoi, ce cas n'est pas obliger ACK signifiant la fin de la lecture. d'tre traiter dans le programme.

Point de vue Matre

Point de vue Esclave

Tableau 7: IC, esclave, interruption MSSP : Diffrentes configurations possibles

Complter le tableau 7. En fonction de la configuration de D_A, R_W, BF , expliquer ce que fait le matre et ce que doit faire l'esclave. Lors d'une requte de lecture, le module IC esclave du PIC force SCL 0 pour empcher que le matre ne reprenne le contrle du bus avant qu'il est pu prparer la donne transmettre. Une fois que la donne transmettre est prtre il faut repositionner le bit CKP du registre SSPCON1 1 afin de relcher l'horloge. On parle de clock stretch. Erratum Microchip Mode IC : Dans la datasheet du PIC18F4520, il est dit que dans le cas d'une lecture du matre, la rception de l'octet d'adresse ne positionne pas le bit BF, or ce n'est pas le cas ! Tenez compte de cette erreur dans l'criture de votre routine d'interruption IC. Intgrer les fonctions IC au programme de l'automate de pompe et tester son fonctionnement. Le programme de l'automate de caisse vous est fourni. Lisez la partie suivante avant de tester votre programme sur la carte.
M1 SIS

39

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520 10.2.5. Connexion IC entre deux cartes PICDEM 2 Plus

Comme on peut le voir sur la figure 24, la partie physique d'un bus IC est ralise par trois lignes lectriques : la masse (GND), les donnes (SDA) et l'horloge (SCL). Comme les composants connects sont de types collecteur ouvert ou drain ouvert, les lignes SDA et SCL doivent tre maintenues l'tat haut l'aide de rsistances. Ces rsistances sont dites de pull-up et sont cacules en fonction du nombre de composants, de la longueurs du bus ... (cf. documentation IC de Phillips). Dans le cas des cartes PICDEM 2 Plus, chacune d'entre elle a dj ses rsistances puisqu'elles disposent d'un capteur de temprature et d'une EEPROM IC. Si on connecte directement deux cartes ensemble, on se retrouve avec les deux rsistances en parallle sur chaque ligne (le courant est donc multipli par 2) et on a deux fois le mme composant sur le bus (cela ne serait pas grave si les composants n'avaient pas la mme adresse, or les deux cartes sont identiques). Pour vos tests, vous devez donc utiliser le microcontrleur pour lequel le support a t modifi : les broches RC3, RC4 et GND ont t remplaes par des fils connects une autre carte PICDEM 2 Plus. PICDEM 2 Plus - I PICDEM 2 Plus - II

PIC

PIC

24L256

GND

24L256

TC74

TC74

GND

F
RC3 RC4

RC3

RC4

SDA GND SCL +5 V

SDA GND SCL

+5 V

igure 25: Connexion en IC de deux cartes PICDEM 2 Plus

Dans le programme de caisse, si vous taper le caractre 't' dans hyperterminal, la temperature sera affiche en utilisant le capteur TC74 connect au bus l'adresse 0x4D.

Rdiger un petit bilan sur l'ensemble des travaux pratiques : Qu'est ce qui vous a plu, dplu, ennuy ? Qu'avez vous appris, retenu ? Y'a t'il des choses amliorer pour les futurs tudiants ? ...
M1 SIS

40

2007/2008

Travaux Pratiques de Microcontrleur PIC 18F4520

Notes :

M1 SIS

41

2007/2008

Travaux Pratiques de Microcontrleur