You are on page 1of 46

Master Sciences de l'information et des Systmes

Universit Paul Czanne

Travaux Pratiques de Microcontrleur

Julien Marot
julien.marot@fresnel.fr

Marc Allain
marc.allain@fresnel.fr

Formation au dveloppement d'applications en Assembleur et C sur un microcontrleur Mircrohip PIC 18F4 !" en utlisant l'environnement MP#A$ I%& et le compilateur C18'

Table des matires


1. Avant de commencer..................................................................................................................... 1 2. Le Matriel..................................................................................................................................... 1 !'1' #e (it PIC%&M ! Plus et PIC 18F4 !"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''1 !'!' MP#A$ Inte)rated %evelopment &nvironment'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 1 !'*' #e pro)rammateur PIC+,A-, Plus''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''! 3. Gestion de vos fichiers...................................................................................................................2 4. TP n1 !nitiation " MPLA# !$%............................................................................................... 3 4'1' Pro)ramme . Interrupteur /'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''* 4'!' 0dition et Compilation du pro)ramme'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 4 4'*' +imulation'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 4'4' Pro)rammation du microcontrleur'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''1 4' ' Pro)ramme . Cli)notant /''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 8 &. TP n2 %crit're d('n driver )o'r L*$.................................................................................. 11 '1' #es a22icheurs #C%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''11 '!' Fonctions de )estion'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 1! '*' 0crire une chaine de caract3res''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''14 +. TP n3 !nterr')tions et Pri)hri,'es....................................................................................14'1' Pro)ramme . Cli)notant / avec interruption'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''11 4'!' Chronom3tre'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 18 4'*' 5nrer un si)nal rectan)ulaire avec un module P6M'''''''''''''''''''''''''''''''''''''''''''''''''''''''' 17 4'4' 8tilisation du module de conversion A9%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' !" 4' ' 5estion d'interruptions multiples''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' !" -. TP n4 !nitiation " la )ro.rammation en lan.a.e *..............................................................22 1'1' Introduction : assembleur et compilateur C''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' !! 1'!' 5nration d'un si)nal carr'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' !* 1'*' 0dition et Compilation du pro)ramme'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' !4 1'4' +imulation et pro)rammation du micro;contrleur''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ! 1' ' Applications''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ! /. TP n& Gestion de Pri)hri,'es et !nterr')tions.................................................................28'1' Communication srie : -+!*!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' !1 8'!' Applications''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' !7 0. TP n+ Pannea' d(afficha.e l'mine'1.................................................................................... 31 7'1' 5estion de l'a22icheur #C%'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *1 7'!' 5estion de l'&&P-<M''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ** 7'*' Panneau d'a22icha)e''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *4 12. TP n- 3tation 3ervice............................................................................................................ 3+ 1"'1' Automate de Pompe'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*4 1"'!' Communication avec l'automate de caisse'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*1

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

1.

Avant de commencer

Ces sances de travau= prati>ues ?,P@ sont destines A illustrer les notions >ui vous ont t prsentes en cours' Pour celaB vous aureC A concevoir et A tester un certain nombre de pro)rammes soit en lan)a)e assembleur soit en lan)a)e C' Po'r cha,'e t4che ,'e vo's a're5 " raliser6 nous vous invitons A enre)istrer votre pro)ramme sous un nom particulier pour )arder une sauve)arde de travail' Pour 2aciliter le dbo)a)e et assurer la maintenance et la portabilit de vos codesB il est primordial >ue vous commencieC par rdi)er un al)ori)rammeB >ue vous commentieC clairement votre pro)ramme et >ue vous pensieC A le rendre le plus clair possible ? ex : en choisissant des noms appropris pour les labels@' *oncernant l(val'ation de votre travailB nous vous demanderons de nous prsenter le pro)ramme correspondant A cha>ue tDche >ue vous aureC A pro)rammer sur le simulateur ou sur le Eit de dmonstration ?cf' plus bas@' Fous corri)erons )alement vos codes en portant une attention particuli3re A la lisibilit ?penseC donc au= commentaires G@' &n2inB vous devreC )alement nous rendre les al)ori)rammes >ui correspondent au= codes'

2.

Le Matriel 2.1. Le 7it P!*$%M 2 Pl's et P!* 1/84&22

#e Eit PIC%&M ! Plus est un Eit simple >ui permet de mettre en vidence les capacits de di22rents micro; contrleurs du 2abricant Microchip A travers divers priphri>ues et accessoires reproduits sur le schma de la 2i)ure 1'

-eset

MC##&%s -$"'''-$*

&ntre Analo)i>ue -A" Poussoirs -A4B -$" -+!*! -C4B -C1

Microcontrleur

Contrles -A1'''-A* %onnes -%"'''-%* $uCCer -C!

5-i uid Crystal /is2lay 7

#C%

5#n Circuit /e6u++er7

IC%

-$4B -$1

$us I!C -C4B -C* -C Capteur de ,emprature

&i+ure $, -e .it P#C/0M ) Plus1 Pri23ri ues et 4ccessoires #e micro;contrleur utilis est le PIC18F4 !" de Microchip' C'est un micro;contrleur 8 bits disposant d'une mmoire de pro)ramme de *! (oB de 1 *4 octets de -AM ?-andom Access MemorH@B d'une &&P-<M ?&lectricallH &rasable Pro)rammable -ead <nlH MemorH@ de ! 4 octets et de *4 entres9sorties' 8ne part importante de la di22icult pour pro)rammer un micro;contrleur rside dans l'ac>uisition d'in2ormations' Pour ac>urir cette comptenceB nous vous invitons A vous r2rer 2r>uemment A la documentation techni>ue du micro;contrleurB ainsi >u'A la documentation techni>ue de la carte d'valuationB c2' les documentations lectroni>ues'

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

2.2.

MPLA# !nte.rated $evelo)ment %nvironment

MP#A$ I%& est un environnement )ratuit de pro)rammation pour les micro;contrleurs de la 2amille Microchip' #Ienvironnement int3)re un diteur dIassembleurB un dbo)ueur complet ainsi >ue tous les outils permettant de )rer les pro)rammateurs de composants' #a possibilit dIint)rer un compilateur C dans lIenvironnement de dveloppement MP#A$ sIinscrit directement dans la politi>ue du service >ui est dIutiliser des lan)a)es de pro)rammation volus dans les dveloppements en lectroni>ue'

2.3.

Le )ro.rammate'r P!*3TA9T Pl's

Il permet de trans2rer le pro)ramme directement de MP#A$ dans le micro;contrleur via le port srie ?-+!*!@ d'un PC'

3.

Gestion de vos fichiers

Pour chacun des binmesB un compte utilisateur a r cr' Pour ne pas oublier votre nom d'utilisateur et votre mot de passe' vous pouveC le noter ci;dessous' Attention JindoJs 2aire la di22rence entre les maKuscules et les minuscules'

Fom d'utilisateur : Mot de passe :


Avec votre compte vous aveC droit A un espace de stocEa)e sur le serveur' Cette espace de sotcEa)e apparait dans . Poste de Travail / sous le nom de . voir le nom /' C'est ici >ue vous deveC stocEer tous vos documents a2in >u'ils vous soient disponibles sur toutes les machines de ,P' #l vous est fortement conseill de 6ien ran+er vos documents tout au lon+ des sances. 2our c3acun des TP1 fa8tes un r2ertoire associ ex, t29 2our le t2 n:9. Puis 2our c3a ue uestion si c'est ncessaire fa8tes des sous r2eroires uestion( 2ar exem2le.

-es documentations tec3ni ues ncessaires au TP sont dis2oni6les ; l'adresse,e,3tt2,<<===.lsis.or+<master<index.232>es2ace?etudiant@$Adoc@$*9

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

4.

TP n1 !nitiation " MPLA# !$%

ASM

#e but de ce ,P est de se 2amiliariser avec la suite lo)icielle . MP#A$ Inte)rated %evelopment &nvironment / ?v1'4@ de Microchip a2in de pouvoir utiliser les 2onctions de bases de cet outil dveloppement A savoir : crer un proKetB diter et compiler un pro)ramme en assembleurB simuler son 2onctionnement et en2in pro)rammer le microcontrleur ?LC@' #es di22rentes 2onctions sont e=pli>ues A travers deu= pro)rammes >ui vous sont donns'

4.1.

Pro.ramme : !nterr')te'r ;

#e pro)ramme . Interrupteur / boucle A lIin2ini sur les tDches ci;dessous a2in de reproduire le 2onctionnement dIun interrupteur' TBc3e $ , lire lItat du bouton poussoir +!B broche -A4 TBc3e ) , si le bouton est appuHB on allume la diode lectro;luminescente ?#&%@ #1B broche -$"B sinon on lIteint' <n notera >ue les boutons poussoirs sont branchs au microcontrleur en lo)i>ue n)ative' #'tat . bouton appuH / correspond donc A un " lo)i>ue' #es #&% sont cDbles en lo)i>ue positiveB elles s'allument pour un 1 lo)i>ue' #e 2onctionnement demand peut Mtre reproduit par l'al)ori)ramme ci;dessous'
Initialisation du LC

oui

-A4 N "
S) a22uy

non

-$" N 1
4llumer -$

-$" N "
0teindre -$

&i+ure ), 4l+ori+ramme du 2ro+ramme G #nterru2teur H #'al)ori)ramme peut se traduire en assembleur de la mani3re suivante : LIST P=18F4520 #include <P18F4520.inc> #include <CONFIG.inc> or ini# !"0000" /finition du CC utilis1 des constantes s2cifi ues au CC et des 2aramtres de confi+uration encods lors de la 2ro+rammation.

4dresse de d2art a2rs un reset du CC.


#nitialisation , Demise ; zro des 6ascules / des diffrents 2orts utiliss et confi+uration des entres<sorties.

clr$ PO%T& 'o(l) *"00000000" 'o()$ T%IS& clr$ PO%T+ 'o(l) *"00010000" 'o()$ T%IS+

*oucle

*#$,c PO%T+-4 o#o e#eindre *,$ PO%T&-0 o#o *oucle e#eindre *c$ PO%T&-0 o#o *oucle .N/

Eoucle infini , 4llume ou teint la -0/ en fonction de lFtat du 6outon 2oussoir.

To't a' lon. des trava'1 )rati,'es6 no's vo's demandons d(tablir 'n .lossaire des diffrentes instr'ctions rencontres avec le'r e1)lication en fran<ais. *e .lossaire vo's sera trs 'tile )o'r les diffrents )ro.rammes ,'e vo's sere5 amener " raliser.

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

4.2.

=dition et *om)ilation d' )ro.ramme


$marra.e

Cette partie permet d'apprendre A crer un proKet MP#A$B saisir un pro)ramme en assembleur et le compiler'

4.2.1.

Avant de commencerB crer le rpertoire t2$ puis dans ce rpertoire crer A nouveau un rpertoire interru2teur. Copier dans ce dernier rpertoire les 2ichiers P$%&'()*.inc et CIJ&#K.inc #ancer la suite lo)icielle MP#A$ I%& A partir de lIicne >ui se trouve sur votre bureau'

4.2.2.

*ration d>'n no'vea' )ro?et avec : Pro?ect @i5ard ;


Cli>uer sur Project LL Project Mizard N Cli>uer sur Suivant L puis slectionner PIC18F4 !" dans le menu droulant /evice' Cli>uer sur Suivant L puis slectionner . Microc3i2 MP4SM Toolsuite / et G MP4SM 4ssem6ler / a2in de pouvoir pro)rammer en Assembleur' Cli>uer sur Suivant L puis dans le champ . Project Jame H saisir le nom du proKet ?e= : interrupteur@ et dans le champ . Project /irectory H aller chercher A lIaide du bouton . Ero=se HB le dossier cr au dbut : t2$<interru2teur' Cli>uer sur +uivant O et aKouter les 2ichiers P$%&'()*.inc et CIJ&#K.inc au proKet A lIaide du bouton . 4dd H LL Cli>uer sur Suivant L puis sur Terminer'

4.2.3.

=dition d' )ro.ramme

Crer un nouveau 2ichier dans le proKetB &ile LL 4dd Je= &iles to ProjectN #Ienre)istrer dans le rpertoire proKet avec lIe=tension asm ?e= : 2ro+.asm@ MP#A$ &ditor se lance +aisir le pro)ramme . Interrupteur / et enre)istrer' Penser A aKouter des commentaires au pro)ramme pour montrer >ue vous aveC bien compris les di22rentes instructions' 8ne li)ne de commentaire commence par . O /'

Mor.s2ace Architecture et contenu du proKet

Iut2ut Inter2ace MP#A$ %veloppeur

0ditor &dition des 2ichiers de pro)rammeB de con2i)urationB P

&i+ure 9, MP-4E #/01 Mode 0dition

4.2.4.

*om)ilation

Cli>uer sur Project LL Euild 4ll N ou sur lIicne de la barre de menu ou encore CtrlP&$* pour compiler le proKet complet' &rreurs et Jarnin)s sont si)nals dans la 2enMtre Iut2ut ainsi >ue le rsultat de la compilation EU#-/ SUCC00/0/ ou EU#-/ &4#-0/. 0n dou6leQcli uant sur une erreur ou un =arnin+ dans la fenRtre Iut2ut1 vous serez amener directement ; la M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


li+ne concerne dans votre 2ro+ramme.

4.3.

3im'lation

Avant dIenvoHer un pro)ramme au LCB vous pouveC tester son 2onctionnement dans le simulateur ?%ebu))er@ MP#A$ +IM' Pour lancer le simulateurB cli>uer sur /e6u++er LL Select Tool LL MP-4E S#M' 8ne nouvelle barre dIoutils est aKoute ainsi >uIun on)let . MP-4E S#M H dans la 2enMtre <utput' #e simulateur 2onctionne selon trois modes : le mode Ste2 Ey Ste2 >ui permet de 2aire une e=cution pas A pas du pro)ramme ?vous Mtes alors lIhorlo)e du LC@' le mode 4nimate >ui e=cute automati>uement le pro)ramme mais A une vitesse rduite pour >ue lIon puisse suivre l'=cution' le mode Dun oQ le pro)ramme est e=cut automati>uement A la vitesse du PC' %ans les deu= premiers modesB nous obtenons des rsultats au 2ur et A mesure de la simulation alors >ue dans le dernierB les rsultats ne sont visibles >ue lors>ue la simulation est stoppe' %ans ce para)rapheB nous nous intressons au= modes 4nimate et Ste2 Ey Ste2 car ils nous permettent de voir >uIelle est lIin2luence des entres sur les sorties' #e r)la)e de la 2r>uence de lIoscillateur utilis se 2ait dans /e6u++er LL Settin+s N' %ans notre cas cIest 4 MhC'

4.3.1.

%ntres 3tim'l's

Comme son nom lIindi>ue cette 2onctionnalit permet de prvoir les vnements d'entres de mani3res sHnchrones ?les dates sont connues avant la simulation@ et asHnchrones ?les vnements sont dclenchs durant la simulation par lIutilisateur@' #es di22rents vnements sont enre)istrs dans une table ?6orEbooE@' Pour en crer uneB cli>uer sur /e6u++er LL Stimulus LL Je= Mor.6oo.' %ans le cadre du proKet . interrupteur / on souhaite crer les vnements suivants : A t N "B initialisation de -A4 A 1 ?bouton +! relDch@B A t N 1" cHclesB on appuie sur +! ?-A4 N "@B A t N ! cHclesB on relDche le bouton ?-A4 N 1@' on veut )alement pouvoir inverser lItat de -A4 >uand on le souhaite'

#Ion)let . Pin < De+ister 4ctions H de la 2enMtre . Stimulus H permet la saisie des vnements en pro)rammant leurs dates dIarrive ?vnements sHnchrones@' %marche de cration dIvnements sHnchrones : AKouter une colonne -A4 au tableau dIvnement ?bouton . Clic 3ere to 4dd Si+nals H@ -echercher -A4 dans la liste . 4vaila6le Si+nals H et lIaKouter A la liste . Selected Si+nals H -emplir la table dIvnement ?,imeB -A4@ avec ?"B1@ ?1"B"@ ?! B1@ Choisir cyc ?cHcle@ comme base de temps dans menu . Time Units H &nre)istrer la table ?bouton . Save Mor.6oo. H@

#Ion)let . 4sync3 H de la 2enMtre . Stimulus H permet de pr;pro)rammer des boutons ?colonne . &ire H@ A la )nration dIvnement ?vnements asHnchrones@' %marche de cration dIvnement asHnchrone : +aisir -A4 dans la colonne . Pin<S&D H de la premi3re li)ne #e menu de la colonne . 4ction H propose cin> tHpes dIaction : Set Si+3 : -A4 N 1 Set -o= : -A4 N " To++le : -A4 N -A4 Pulse Si+3 : -A4 N la lar)eur de lIimpulsion est r)le Pulse -o= : -A4 N colonnes . Midt3 H et . Units H' Choisir . To++le H pour inverser -A4 &nre)istrer la table ?bouton . Save Mor.6oo. H@ M1 +I+

dans les

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


Appli>uer lIchancier dIvnement ?bouton . 422ly H@ 42rs c3a ue c3an+ement dans lFc3ancier dFvnement1 cli uer sur G 422ly H afin ue ces c3an+ements soient 2ris en com2te 2ar la simulation.

%clencher &i+ure ', Stimulus Sync3rones et 4sync3rone

4.3.2.

3orties @atch A Lo.ic AnalB5er


A2in de suivre et de visualiser les rsultats de simulationB MP#A$ +IM int3)re divers outils dont : #a 2enMtre . Matc3 H ?menu Tie= LL Matc3@ >ui a22iche le contenu des di22rents re)istres du LC et des di22rentes variables du pro)ramme' #a slection et la validation des re)istres et variables A a22icher se 2ait A travers les deu= menus droulants et les deu= boutons . 4dd S&D H et . 4dd Sym6ol H' 8n clic droit sur un des lments observs permet lIacc3s A la boRte de dialo)ue . Pro2erties H a2in de r)ler le 2ormat dIa22icha)e de lIlment ?e= : Se=B $inarHB +in)le $itB '''@ mais aussi de sauve)arderB e=porterB P le tableau . Matc3 /' Il est aussi possible de 2aire )lisser des lments de la 2enMtre . 0ditor H vers la 2enMtre . Matc3 H' #a 2enMtre . -o+ic 4nalyzer H permet lIa22icha)e des lments lo)i>ues ?1 bit@ en 2onction du . Time Ease H' #e choi= des lments A a22icher se 2ait A lIaide du bouton . C3annels H' Pour le proKet . interrupteur /B on souhaite a22icher : les re)istres ,-I+A et ,-I+$ sous 2orme he=adcimale les re)istres P<-,AB P<-,$ et M sous 2orme binaire les bits -A4 et -$" Con2i)urer correctement les 2enMtres . Matc3 H et . -o+ic 4nalyzser H'

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

4.3.3.

3im'lation d' )ro.ramme en mode Animate

Maintenant >ue les entres et sorties de la simulation sont con2i)uresB on peut lancer la simulation' Avant toutes chosesB a2in dIinitialiser le LCB il est ncessaire dIe22ectuer un . Deset H en cli>uant sur le bouton puis cli>uer sur

le bouton . 4nimate H

et observer les 2enMtres . Matc3 H et . -o+ic 4nalyzer H.

ArrMter lIanimation A lIaide du bouton B 2aire un nouveau . Deset HB relancer lIanimationB ouvrir lIon)let . 4sync3 H de la 2enMtre . Stimulus HB a)ir sur -A4 et observer les rsultats'

-o+ic 4nalyzer 5raphe dIvolution de bits

0ditor #a 2l3che verte sHmbolise le Pro+ram Counter &i+ure (, MP-4E #/01 Mode Simulation

Matc3 A22icha)e de lItat courant des re)istres et variables

Tous pouveC )alement 2aire avancer le pro)ramme pas A pas ?mode . +tep $H +tep /@ avec le bouton . Ste2 #nto H ' <n notera >ue les boutons . Ste2 Iver H et . Ste2 Iut H permettent respectivement une e=cution pas A pas avec une e=cution automati>ue des sous;pro)rammes et une e=cution Kus>uIA la 2in des sous;pro)rammes'

4.4.

Pro.rammation d' microcontrCle'r

Cette phase consiste A envoHer le code he=adcimal du pro)ramme dans le LC' 8ne 2ois le pro)ramme compil avec succ3sB le code he=adcimal du pro)ramme se trouve dans le 2ichier avec l'e=tension 3ex ?e= : 2ro+.3ex@' Tous pouveC visualiser le 2ichier avec la 2enMtre . Pro+ram Memory H du menu . Tie= H' #e code de trouve sous l'on)let . I2code Sex H' $marche de transfert : Connecter le pro)rammateur PIC+,A-, Plus sur le port srie du PC et au secteur Placer le LC sur le pro)rammateur DAttention a' sens EF %ans MP#A$B sous le menu Pro+rammer L Select Pro+rammer chosir . $ P#CST4DT Plus H' 8n nouvel on)let est alors aKout A la 2enMtre . Iut2ut H' Con2i)urer le port C<M sur le>uel est connect le pro)rammateur ?C<M1@B menu Pro+rammer L Settin+s ... Activer le pro)rammateurB menu Pro+rammer L 0na6le Pro+rammerB une nouvelle barre d'outils est aKoute' &nvoHer votre pro)rammeB menu Pro+rammer L Pro+ram ou en cli>uant sur 1 le trans2ert est termin lors>ue la #&% Kaune 4ctivate du pro)rammateur est teinte et >ue le messa)e . Pro+rammin+<Terification com2leted successfullyU H apparaRt dans la 2enMtre Iut2ut.

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


%sactiver le pro)rammateurB menu Pro+rammer L /isa6le Pro+rammer Placer le LC sur la carte PIC%&M ! Plus ?Attention a' sens G@ mettre la carte sous tension et Ua marche ''' Lors des )hases de mani)'lation d' microcontrCle'r6 vrifier ,'e la carte P!*$%M 2 Pl's ne soit )as so's tension et faGtes attention a'1 )attes6 elles sont fra.iles.

&i+ure V, MP-4E #/01 Code 3exadcimal du 2ro+ramme

4.&.

Pro.ramme : *li.notant ;
AnalBse et com)rhension d' )ro.ramme

4.&.1.

#e pro)ramme ci;apr3s 2ait cli)noter la #&% #1B broche -$"B A une 2r>uence dIenviron 1SC' #Itat de la #&% chan)e donc toutes les ""ms'

LIST P=18F4520 /finition du CC utilis1 des constantes s2cifi ues au CC et des #include <P18F4520.inc> 2aramtres de confi+uration encods lors de la 2ro+rammation. #include <CONFIG.inc> or !"0000"

4dresse de d2art a2rs un reset du CC. -es varia6les t$ et t) sont ran+es dans la 6an. * de la ram 5adresse *x**7 et ont 2our taille un octet.

011111 /2cl3r3#ion de (3ri3*le, C&LOC4 0500 #1 6 1 #2 6 1 .N/C 011111 Ini#i3li,3#ion Ini# clr$ PO%T& 'o(l) !"00" 'o()$ T%IS& 011111 Pro r3''e *oucle 'o(l) 5or)$ c3ll c3ll o#o Princi73l !"80" PO%T& #e'7o250', #e'7o250', *oucle

Demise ; zro des 6ascules / du 2ort E et dfinition du 2ort E en sortie.

Eoucle infini ,

4llume et teint la -0/ toutes les (**ms.

011111 Sou,17ro r3''e #e'7o250', 'o(l) #10 'o()$ #1 co'71 dc$,n8 #1 re#urn 'o(l) #20 'o()$ #2 co'72 dc$,n8 #2 o#o co'71 o#o co'72 .N/ M1 +I+

Sous 2ro+ramme de tem2orisation D" com)lterF

In ralise deux 6oucles im6ri ues ui G occu2e H le CC durant environ )(* ms.

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

Comprendre le pro)ramme . cli)notant / et raliser l'al)ori)ramme associ' &=pli>uer lIutilit de xor=f dans le pro)ramme principal ?utiliser une table de vrit@' Calculer les valeurs dIinitialisation t1" et t!" pour >ue le sous pro)ramme de temporisation sIe=cute en ! " ms V 1 ms' #e nombre de cHcle re>uis par cha>ue instruction est donn dans le Keu dIinstruction' Crer un nouveau proKet dans MP#A$ et le sauver dans le rpertoire t2$<cli+no puis saisir le pro)ramme prcdent en remplaUant t1" et t!" par leur valeur ?pour in2ormer le compilateur de la base dans la>uelle la valeur est crite on prc3de la valeur de la premi3re lettre de la baseB ainsi 17! en dcimal sIcrit dI17!IB hIC"I en he=adcimal ou encore bI11""""""I en binaire@' Compiler votre pro)ramme et passer A la partie simulation' JFou6liez 2as de co2ier les fic3iers P$%&'()*.inc et CIJ&#K.inc dans le r2ertoire t2$<cli+no.

4.&.2.

3im'lation

Tous pouveC simuler le pro)ramme de la mMme mani3re >ue le pro)ramme . interru2teur / mais vous vous apercevreC tr3s vite >ue cIest tr3s lon) du 2ait de lIanimation et de la temporisation' ?Tous pouveC tout de mMme le 2aire pour bien comprendre mais en initialisant t1" et t!" A * et par e=emple'@ Fous allons donc 2aire les simulations en mode Dun1 e=cution automati>ue' Pour notre pro)rammeB nous nIavons besoin dIaucun vnement dIentre mais si besoin avait t on aurait pu saisir un chancier comme prcdemment' &n mode . Dun H le pro)ramme sIe=cute donc de 2aUon automati>ue et ne sIarrMte >ue lors>uIil rencontre un point dIarrMt ou A la 2in du pro)ramme' Il 2aut donc placer correctement les points dIarrMt a2in de valider le 2onctionnement de notre pro)ramme' Pour observer la dure de la temporisation il 2aut donc mettre un point dIarrMt sur la li)ne dIappel du sous pro)ramme de temporisation et un autre sur la li)ne suivante' Pour aKouter un point dIarrMt B double cli>uer sur la li)ne du pro)ramme oQ vous le souhaiteCB ou alors utiliser le menu /e6u++er LL Erea.2oints P disponible depuis la touche &)'

&i+ure W, Placement des 2oints d'arrRt Fous allons suivre lIe=cution du pro)ramme A lIaide de la 2enMtre . Simulator Trace H disponible dans le menu . Tie= H' Fous allons nous intresser plus particuli3rement A la colonne . Time H' Tous pouveC chan)er lIunit de temps de cette colonne par un clic droit menu . /is2lay Time H' #ors>ue vous a22icheC le temps en toutes

autres units >ue cHcleB la valeur a22iche dpend de la 2r>uence de lIoscillateur du LC'
#ancer la simulationB bouton <bserver la 2enMtre . Simulator Trace H lors>ue la simulation sIarrMte au premier point dIarrMt et noter le temps dIappel de la temporisation ?e= : ti N ! "*"* cHcles@ -elancer la simulationB bouton Foter A nouveau le temps de la 2enMtre . Simulator Trace H ?e= : t2 N ""4"! cHcles@ Tous pouveC alors calculer la dure de la temporisation d N t2 W ti N ! "!77 cHcles soit ! "B!77 ms avec un oscillateur A 4 MSC' 8tiliser cette mthode pour valider vos initialisations de t1" et t!"'

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

$reaEpoint call tem2o)(*ms

$reaEpoint +oto 6oucle

&i+ure %, Simulator Trace aux diffrents 2oints d'arrRt

8ne 2ois les simulations termines trans2rer le pro)ramme dans le microcontleur'

M1 +I+

1"

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

&.

TP n2 %crit're d('n driver )o'r L*$

#'obKecti2 de ce ,P est d'crire et de tester un ensemble de 2onctions assembleurs pour communi>uer avec un a22icheur #C%' #a premi3re partie de ce ,P est ralise en simulation a2in d'crire les di22rentes 2onctions ncessaires au bon 2onctionnement de l'a22icheur'

&.1.

Les affiche'rs L*$

#es a22icheurs A cristau= li>uides )nralement appels #C% ?#i>uid CrHstal %isplaH@ sont des modules compacts >ui ncessitent peu de composants pour leur mise en oeuvre' Plusieurs a22icheurs sont disponibles sur le marchB ils se di22rencient les uns des autres par leurs dimensions ?de 1 A 4 li)nes de 4 A 8" caract3res@' Certains sont )alement dots de 2onctions de rtroclaira)e' #'a22icheur du Eit PIC%&M ! Plus est un a22icheur 14 X ! c'est A dire ! li)nes de 14 caract3res avec des caract3res de X8 pi=els' Pour communi>uer avec l'e=trieur tout a22icheur A besoin d'un circuit spcialis de )estion appel . contrleur d'a22icha)e /B il en e=iste di22rents mod3les sur le march mais ils ont tous le mMme 2onctionnement' #a carte d'valuation est >uipe du mod3le S%4418"8 de +SA-P' #e contrleur sert donc d'inter2ace entre le microcontrleur et l'a22icheur ?c2' 2i)ure 7@' #e but du driver est de )rer le bus C<F,-<# a2in >ue le contrleur d'a22icha)e comprenne le bus %A,A et a22iche ce >ue l'on souhaite sur l'cran #C%'

%A,A 4 ou 8

LC
P#C$%&'()* C<F,-<# *

Contleur d'a22icha)e
S/''W%*U

C<M 14

+&5 4"

#C% 14 X !

&i+ure X, Communication avec l'affic3eur -C/ #e contrleur d'a22icha)e peut recevoir deu= tHpes d'in2ormation sur le bus %A,AB un ordre ?e=: e22acer l'cran@ ou une donne ?e=: le caract3re A@' <rdres ou donnes sont envoHs sur le bus %A,A sous 2orme d'octets ?8 bits@' Mais pour ne pas utiliser toutes les broches de sorties d'un microcontrleur pour communi>uer avec un #C%B les contrleurs d'a22icha)e 2onctionnent )alement en 4 bitsB un nombre cod sur 4 bits s'appelle un >uartet' &n mode 4 bitsB un octet est envoH en deu= 2ois : le >uartet de poids 2ort puis le >uartet de poids 2aible' #e bus C<F,-<# est constitu de trois li)nes : #a li)ne 93 D9e.ister 3electF >ui permet au contrleur d'a22icha)e de savoir si le contenu du bus %A,A est un ordre ou une donne' 8n niveau bas indi>uera un ordre et un niveau haut une donne' #a li)ne 9@ D9ead @riteF in2orme le contrleur si on vient lire ou crire dans sa mmoireB un niveau bas correpondant A une action d'criture' #a li)ne % D%nableF >ui in2orme le contrleur d'a22icha)e >u'un >uartet ?mode 4 bits@ ou un octet ?mode 8 bits@ est disponible' Cette li)ne est active sur 2ront descendant' &lle ralise la sHncronisation entre le microcontrleur et l'a22icheur' #es conne=ions entre le contrleur d'a22icha)e et le microcontrleur sont re)roupes dans le tableau 1' %'apr3s le tableau 1 >uel est le mode de 2onctionnement du contrleur d'a22icha)e Y

M1 +I+

11

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


$us C<F,-<# Contrleur -+ -6 & %$1 %A,A %$4 %$ %$4 Microcontrleur -A* -A! -A1 -%* -%! -%1 -%" 0xtrait de P#C/0M ) Plus User's Kuide 52 $%7

Ta6leau $, Connexion entre le contr!leur d'afffic3a+e et le microcontr!leur 4ttention , In a Po=erQon Deset1 D4( and D49,D4* are confi+ured as analo+ in2uts and read as Y*F. D4' is confi+ured as a di+ital in2ut... 5cf datas3eet 2))'7

&.2.

8onctions de .estion
Transfert d('n octet

&.2.1.

#'criture d'un ordre ou d'une donne en mode 4 bits se 2ait selon la s>uence reproduite en 2i)ure 1"B l'octet A trans2rer tant b1b4b b4b*b!b1b" avec b1 bit de poids 2ort'

&i+ure $*, Transfert d'un octet en mode ' 6its Phase I : -6N" et &N"' -+ et %$1'''4 sont positionns A la valeur souhaite : >uartet de poids 2ort ?M+$@ Phase II : &N1' Phase III : &N"B le >uartet trans2r ?poids 2ort@ est pris en compte par le contrleur lors du 2ront descendant' Phase IT : %$1'''4 sont positionns A la valeur souhaite : >uartet de poids 2aible ?#+$@ Phase T : &N1' Phase TI : &N"B le >uartet trans2r ?poids 2aible@ est pris en compte par le contrleur lors du 2ront descendant' -aliser l'al)ori)ramme et crire la 2onction . lcd?ecrire? uartet / >ui )n3re la s>uence ITB TB TI sans tenir compte de l'tat de -+ pour l'instantB & tant dKA initialis A "' #e >uartet A crire est stocE dans les 4 bits de poids 2aible du re)istre de travail . 6 /' #a li)ne & restant A l'tat haut durant ! cHcles' Tous pourreC utiliser les instructions no21 6sf1 6cf1 mov=f1 andl= ?c2' datasheet@' ,ester cette 2onction avec le simulateur de MP#A$' Fous allons maintenant crire la 2onction . lcd?ecrire?octet / ?c'est A dire la s>uence I '''TI@ en utilisant bien videmment la 2onction . lcd?ecrire? uartet /' <n ne tient touKours pas compte de l'tat de -+ et & tant initialis A "' #'octet complet A trans2rer se trouve dans le re)istre . M / et sera sauve)ard dans la variable . lcd?d6 / stocEe en ram' #'instruction s=a2f pourrait vous Mtre utile' 0crire et tester cette 2onction en simulation' #es 2onctions d'criture sont maintenant >uasiment termines' Il reste A )rer l'tat li)ne de la li)ne -+B il su22it pour cela d'aKouter une instruction avant l'appel de la 2onction . lcd?ecrire?octet /' -aliser les al)ori)rammes et crire les deu= 2onctions . lcd?ecrire?ordre / et . lcd?ecrire?donnee /' M1 +I+

1!

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()* &.2.2. Lect're de l(tat d' contrCle'r d(afficha.e

#ors>ue >ue l'on demande au contrleur d'=cuter une action ?ordre ou commande@B ce dernier met un certain temps A la raliser' +i une nouvelle action lui est demande alors >ue la prcdente n'est pas encore termineB elle ne sera pas prise en compte' Pour rsoudre ce probl3me il est ncessaire de savoir si le contrleur est disponible' <n ne va donc plus . crire / mais . lire / dans le contrleur'

&i+ure $$, -ecture de l'tat de l'affic3eur en mode ' 6its Phase I : -6N1 et -+ N "B il s'a)it d'une instruction ?ordre@ de lecture et &N" Phase II : & passe A 1 pour demander le >uartet de poids 2ort' Phase III : <n vient lire la valeur du >uartet M+$ sur %$1'''%$4' Phase IT : & passe A " pour si)naler la 2in de la lecture du premier >uartet' Phase T : & repasse A 1 pour demander le >uartet de poids 2aible' Phase TI : <n vient lire la valeur du >uartet #+$ sur %$1'''%$4' Phase TII : & repasse A " pour si)naler la 2in de la lecture du deu=i3me >uartet' Jote , Pour venir lire /EW.../E' il faut ue les 6roc3es D/9...D/* soient confi+ures en entres. Mais il faut 2ense ; les remettre en sortie 2our la suite. +ur la 2i)ure 1*B l'octet reUu est de la 2orme $F AC4AC AC4AC*AC!AC1AC" avec $F bit de poids 2ort' $F >ui si)ni2ie Eusy &la+ vaut 1 si l'a22icheur est occup' #es bits AC4'''1 reprsentent l'4ddress Counter c'est A dire la valeur courante du pointeur de -AM du contrleur cette in2ormation doit Mtre lue mais ne nous est pas utileB elle ne sera donc pas mmorise' -aliser l'al)ori)ramme puis crire la 2onction . lcd?dis2o / >ui boucle tant >ue le bit $F n'est pas )al "' C'est A dire tant >ue l'a22icheur n'est pas prMt A e22ectuer une nouvelle action' Au dbut de la 2onction mettre les broches -%*'''-%" en entre et penser A les remettre en sortie avant de >uitter celle;ciB )rer )alement les li)nes -+ et -6' Avant de lire le >uartet on attend ! cHcles' ,ester ce sous;pro)ramme avec le simulateur'

M1 +I+

1*

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()* &.2.3. Procd're d(initialisation d' contrCle'r d(afficha.e

Zuand le contrleur dmarre on ne sait pas si il est positionn en 4 ou 8 bitsB comme le montre la procdure d'intialisation reproduite en 2i)ure 1!B il est donc ncessaire d'envoHer la commande de passa)e en mode 8 bits ?Function +et 8;$it Inter2ace@ plusieurs 2ois pour >u'elle soit bien comprise' Puis on demande le passa)e en 4 bits ?Function +et 4;$it Inter2ace@'

&i+ure $), Procdure d'initialisation ' 6its du contr!leur d'affic3a+e 5extrait de la datas3eet du S/''W%*U 7 &n analHsant la procdure on remar>ue >u'il H a trois temporisations ?O1 msB O4B1ms et O1""Ls@' Pour simpli2ier le code nous allons crire deu= 2onctions de temporisationB une d'environ ms ?1 N X*@ et une autre d'environ 1""Ls' &n vous inspirant de la temporisation ralise au ,P n[1' -aliser les al)ori)rammes puis crire les 2onctions M1 +I+

14

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


. tem2o?(ms / et . tem2os?$**us / et les valider par simulation' Si 6esoin est vous 2ouvez crer des varia6les en mmoire. #a derni3re partie de la procdure consiste A r)ler les caractristi>ues de l'cran' %ans notre cas nous prendrons : F N 1 pour 2onctionner sur deu= li)nes' F N " r3)le la taille des caract3res ? X8 dots@' I9% N 1 a2in >ue le curseur se dplace vers la droite apr3s avoir a22ich un caract3re' -aliser l'al)ori)ramme puis crire la 2onction . lcd?init / >ui ralise cette procdureB penseC A utiliser les 2onctions >ue vous aveC dKA cres' Int)rer l'intialisation des ports dans . lcd?init /' Talider la procdure par simulation'

&.2.4.

#asc'lement entre les li.nes

#e contrleur d'a22icha)e dispose d'une mmoire %%-AM reprsentant l'a22icheur' %ans notre cas la taille de la mmoire utilise est de ! li)nes de 14 octets chacune' Pour chan)er de li)neB il su22it de venir positionner l' 4ddress Counter au dbut de li)ne souhaite'

&i+ure $9, //D4M du contr!leur &n utilisant vos di22rentes 2onctions crire les 2onctions . lcd?l$ / et . lcd?l) / permettant de choisir la li)ne sur la>uelle on souhaite crire' 0crire la 2onction . lcd?cls / >ui e22ace tout l'cran' ?c2' 2i)ure 1!@ Modi2ier la 2onction . lcd?ecrire?octet / a2in d'attendre >ue le contrleur est pris en compte l'action'

&.2.&.

Tests des diffrentes fonctions

ToilA nous sommes maintenant prMt A utiliser l'a22icheur #C%' Pour 2aciliter l'utilisation des 2onctions >ue vous veneC de crer il est conseill de toutes les mettre dans un 2ichier . lcd.asm / a2in de pouvoir les inclure dans vos 2uturs pro)rammes' #'utilisation de ce 2ichier par la suite est tr3s simpleB il su22it de taper la commande . Zinclude lcd.asm / A l'endroit de votre pro)ramme oQ vous souhaiteC int)rer vos 2onctions et de d2inir les variables . lcd?d61 ... / au dbut de votre pro)ramme' #e 2ichier . lcd.asm / doit se trouver dans le mMme rpertoire >ue votre pro)ramme' 0crire le pro)ramme >ui reproduit l'cran ci;dessous sur l'a22icheur' I n $ o I n d u , Si vous ta2er G movl= '#' H le re+istre G M H sera c3ar+ avec le code ascii du caractre #.

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

&.3.

=crire 'ne chaine de caractres

#a mthode >ui nous a permis de tester les 2onctions de )estion de l'a22icheur n'est pas des plus e22icace car il est ncessaire de retaper le mMme code pour chacun des caract3res' Fous allons donc crire une 2onction >ui a22iche une chaine de caract3res compl3te' #a chaine de caract3res est stocEe dans la mmoire pro)ramme' Pour stocEer une chaRne en mmoire pro)rammeB il su22it d'utiliser la directive . d6 / comme dans l'e=emple suivant : ... or !"0000" o#o '3in c! d* 9:icrocon#roleur9-";0" 0ecrire en '2'oire 7ro r3''e

'3in no7 ... #a chaRne . Microcontroleur / est stocEe dans la mmoire pro)rammeB elle se termine par le caract3re . [* /' #e label . c3 / pointe vers le premier caract3re de la chaRneB c'est donc l'adresse de dbut de la chaine' %ans la mmoire pro)ramme du PIC 18F4 !"B les adresses sont codes sur !1 bits donc * octets' Comme nous disposons d'un microcontrleur 8 bits nous utiliserons les directives . UPP0D5c371 S#KS5c371 -IM5c37 / pour obtenir respectivement l'octet de poids le plus 2ortB de poids intermdiaire et de poids 2aible' Pour lire dans la mmoire pro)rammeB il 2aut tout d'abord initialiser le pointeur d'adresse de mmoire pro)ramme . TE-PTD / avec l'adresse de l'octet A lire' Pour lire un octet on utilse l'instruction . TE-D/ / >ui trans23re le contenu de la mmoire dans le re)istre . T4-E4T /' Consulter la datas3eet du 2ic 2W9QWV et 29*(. Con2i)urer correctement l'instruction . TE-D/ /' -aliser l'al)ori)ramme de la 2onction . lcd?ecrire?c3aine /' 0crire et tester cette 2onction' -'affic3eur -C/ ne 2eut affic3er ue $V caractres 2ar li+ne...

M1 +I+

14

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

+.

TP n3 !nterr')tions et Pri)hri,'es

ASM

Ce troisi3me ,P est divis en >uatre parties durant les>uelles vous apprendreC A )rer les interruptions et di22rents modules du micro;contrleur en lan)a)e Assembleur et dans un pro)ramme uni>ue'

+.1.

Pro.ramme : *li.notant ; avec interr')tion

Fous devons maintenant 2aire cli)noter la led #1B broche -$"B A une 2r>uence de !SC sans mobiliser le microcontrleur' Il n'est donc plus >uestion d'utiliser une temporisation pour compter le temps ?c2' ,P n[1@' Fous allons demander A un module e=terne : le ,IM&-"B de compter le temps et de si)naler la 2in du compta)e au microcontleur par une interruption dite interruption de dbordement' #a 2i)ure 14 montre le si)nal de sortie du ,IM&-" et les interruptions de dbordement associes' #e ,IM&-" compte Kus>u'A la valeur max en T secondes' ,outes les T secondesB l'tat de la led #1 est invers'
Interruptions de dbordement

ma=

" ,

&i+ure $', #nterru2tion de d6ordement du T#M0D* ,rouverB en utilisant la datasheetB l'e=pression de la valeur max et de la priode de compta)e T en 2onction de la con2i)uration du ,IM&-"' ?cf datas3eet 2$)9@ Zu'elle est la con2i)uration pour une priode de compta)e T d'environ 1s Y Zuels sont les bits A intialiser pour activer l'interruption du ,IM&-" Y &=pli>uer la con2i)uration du re)istre ,"C<F' #'nonc demande de 2aire cli)noter la led A une 2r>uence de !SC donc une priode de compta)e de 1s' Avec la con2i)uration choisi prcdemmentB on a une interruption toutes les ?1\ t@sB si on souhaite mesuer le temps prcisement cette erreur de t seconde n'est pas n)li)eable' Pour compenser cette erreur dcala)eB l'ide est d'initialiser les re)istres ,M-"S ,M-"# a2in >ue le compta)e ne commence pas A " mais A une valeur min permettant d'annuler t comme le montre la 2i)ure 1 '
Interruptions de dbordement

ma=

min " ,;t

&i+ure $(, #nterru2tion de d6ordement du T#M0D* Calculer la valeur min pour avoir une 2r>uence de compta)e de 1s e=catement' -aliser l'al)ori)ramme du pro)ramme demandB crire et tester ce pro)ramme'

+.2.

*hronomtre

Fous allons maintenant raliser un chornom3tre simpli2i en utilisant le ,IM&-"B l'a22icheur #C% et le bouton +!B broche -A4' #e temps doit s'a22icher sur le #C% sous le 2ormat :

M1 +I+

11

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


' ' 1 1 , ,

#e 2onctionnement souhait est le suivant : ] la mise sous tensionB le chronom3tre est initialis A . 001100 /' 8n premier appui sur +! dclenche le chronom3treB le temps volue sur l'a22icheur #C%' 8n deu=i3me appui sur +! arrMte le chronom3treB le temps coul est a22ich sur le #C%' 8n troisi3me appui sur +! rinitialise le chronom3tre' #es nombres reprsentant les minutes et les secondes seront respectivement stocEs dans les octects M#J et S0C' #e temps est mesur par l'interruption de dbordement du ,IM&-"' Comme il a t vu au ,P prcdentB l'a22icheur #C% ne comprend >ue des caract3res ?code A+CII@B on ne peut donc pas directement lui envoHer les octects M#J et S0C puis>ue ceu= sont des nombres'

Caractre Code 4SC##

"

48 47 " 1 ! * 4 4 1 ?"=*"@ ?"=*1@ ?"=*!@ ?"=**@ ?"=*4@ ?"=* @ ?"=*4@ ?"=*1@ ?"=*8@ ?"=*7@ Ta6leau ), Code 4SC## des c3iffres

-aliser l'al)ori)ramme puis crire le code de la 2onction . lcd?ecrire?nom6re / >ui a22iche sur le #C% le nombre contenu dans JE sachant >ue ce nombre est compris entre "" et 77' Il 2aut donc a22icher le chi22re des diCaines puis le chi22re des units' ?JE est un octect ; dclarer1 vous 2ouvez tester cette fonction en simulation@ -aliser l'al)ori)ramme puis crire le code de la routine d'interruption et de l'interruption de dbordement du ,IM&-"' #e bouton poussoir +! permet A l'utilisateur d'a)ir sur l'tat chronom3tre' %'apr3s le 2onctionnement dcrit ci; dessusB 'n appui sur le bouton chan)e l'tat du chronom3tre' -aliser l'al)ori)ramme et crire la 2onction . 6outon?a22ui / >ui dtecte un appui sur le bouton +!B l'appui tant dtect lors>ue l'utilisateur relDche le bouton' -aliser l'al)ori)ramme du chronom3tre puis crire le pro)ramme principal' ,rans2rer votre pro)ramme et chronometreC;vousG

+.3.

Gnrer 'n si.nal rectan.'laire avec 'n mod'le P@M

&n partant du pro)ramme prcdentB on souhaite maintenant aKouter une 2onctionnalit : A cha>ue appui sur le bouton poussoir +* connect A -$"B on souhaite activer le transducteur piCo;lectri>ue ?pendant la dure de l'appui@' #e transducteur piCo;lectri>ue peut Mtre command )rDce A la broche -C! du micro;contrleur' 8n transducteur piCo;lectri>ue est un composant lectroni>ue constitu dIune lamelle de matriau piCo; lectri>ue' Cette lamelle est d2orme si une tension alternative est appli>ue au= bornes du transducteur piCo; lectri>ue'

M1 +I+

18

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

&i+ure $V, -e transducteur 2izoQlectri ue #e mouvement de la lamelle dans lIair )n3re un son' #a 2r>uence du son mis est directement li A la nature et A la 2r>uence du si)nal appli>u au= bornes du transducteur piCo;lectri>ue' +ur la carte dIvaluation PIC%&M ! PlusB le transducteur piCo;lectri>ue peut Mtre command )rDce A la broche -C! du micro;contrleur' #e monta)e lectroni>ue utilis pour commander le transducteur piCo;lectri>ue permet de lIalimenter avec une tension bipolaire ?\ TB ; T@' Pour )nrer un sonB on doit donc )nrer un si)nal rectan)ulaire ?)rDce au module P6M@ >ue l'on appli>uera au transducteur piCo;lectri>ue si l'utilisateur appuie sur le bouton poussoir +*' Il 2audra initialiser tous les modules ncessaires A la )nration d'un si)nal rectan)ulaire ?module CCP1B ,IM&-!@ ?voir p'1 7 du . dataQs3eet H@ et initialiser le PIDTC' ] partir du pro)ramme prcdentB apporter les modi2ications ncessaires : lors de l'initialisation , Con2i)urer le P<-,C en entre e=cept la broche -C! en sortieB Con2i)urer le module P6MB placer la valeur "=8" dans le re)istre P-! ?2i=e la 2r>uence du si)nal rectan)ulaire@B r)ler le dutH time ?rapport cHcli>ue@ A "' B on placera la valeur "="" dans le re)istre CCP1C<FB Activer le ,IM&-!B plac le . 2ostscaler / A 1:1B plac le . 2rescaler H A 4B dans le 2ro+ramme 2rinci2al : on testera la valeur sur la broche -$"B %ans le cas oQ -$" est A l'tat haut on activera le transducteur piCo;lectri>ue en a)issant sur le re)istre CCP1C<FB %ans le cas oQ -$" est A l'tat bas on dsactivera le transducteur piCo;lectri>ue en a)issant sur le re)istre CCP1C<FB %ans le cas oQ la valeur sur la broche -$" est )ale A la derni3re valeur ac>uise on ne 2era rien' Attention : -e /uty Time est le tem2s 2endant le uel le si+nal est ; lFtat 3aut. #l faut ada2ter ce tem2s en fonction de la fr uence du si+nal +nr 2our +arder un ra22ort cycli ue +ale ; *1(. Pour cela lisez la documentation tec3ni ue et trouver la relation uFil doit exister entre les valeurs des re+istres PD) et CCPD$-,CCP$CIJ\(,'L 2our ue le ra22ort cycli ue reste +ale ; *.(. %onner la relation >uIil doit e=ister entre les valeurs des re)istres P-! et CCP-1#:CCP1C<F^ :4O pour >ue le rapport cHcli>ue reste )ale A "' et proposer un partie de pro)ramme ?le plus simple possible@ en lan)a)e Assembleur >ui permet dIadapter le rapport cHcli>ue ?contrl par les re)istres CCP-1#:CCP1C<F^ :4O@ en 2onction de la 2r>uence ?contrle par le re)istre P-!@ du si)nal )nr' -aliser l'al)ori)ramme du pro)ramme demandB 0crire le pro)ramme sur ordinateur avec MP#A$B simuler son 2onctionnement et le valider sur la carte d'valuation' /ans un 2remier tem2s1 modifier le 2ro+ramme 2rcdent 2our uFil +nre un si+nal rectan+ulaire 5en utilisant le module PMM7 sur la 6roc3e DC). Puis vous 2rendrez en com2te la +estion du 6outon DE*. 0n s2arant les deux 2ro6lmes1 la difficult est rduite.

+.4.

Htilisation d' mod'le de conversion AI$


<n souhaite maintenant pouvoir 2aire varier la tonalit du son mis par le transducteur piCo;lectri>ue' Pour

M1 +I+

17

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


celaB on va 2aire varier la 2r>uence ?contrle par le re)istre P-!@ du si)nal rectan)ulaire )nr dans la partie prcdente' Pour 2aire varier la 2r>uence du si)nalB on va utiliser le potentiom3tre -14' ] cha>ue 2ois >ue l'on activera le transducteur piCo;lectri>ueB on va mesurer la tension sur la broche -A" en utilisant le module de conversion A9%B on utilisera la valeur de la tension sur la broche -A" pour dterminer la 2r>uence du si)nal rectan)ulaire' #es modi2ications portes au pro)ramme sont les suivantesB lors de l'initialisation1 con2i)urer le P<-,A de mani3re A ce >ue la broche -A" soit en entreB activer le module de conversion A9% ?voir pa)e !!1 du . datas3eet H@B initialiser les re)istres A%C<F"B A%C<F1 ?les autres re)istres sont correctement con2i)urs par d2aut@B dans le 2ro+ramme 2rinci2al1 raliser une ac>uisition de la valeur de la tension sur la broche -A" en ralisant une conversion A9%B modi2ier la valeur du re)istre P-! ?2r>uence du si)nal )nr@ en utilisant les bits de poids 2orts du rsultat de la conversion A9%B aKuster le rapport cHcli>ue pour >u'il reste )ale A "' ' -aliser l'al)ori)ramme du pro)ramme demandB 0crire le pro)ramme sur ordinateur avec MP#A$B simuler son 2onctionnement et le valider sur la carte d'valuation'

+.&.

Gestion d(interr')tions m'lti)les

<n souhaite maintenant >ue le micro;contrleur )3re par interruption l'appui sur le bouton poussoir' Ainsi A cha>ue appui sur le bouton poussoir +*B on souhaite activer ou dsactiver le transducteur piCo;lectri>ue' Zuand le transducteur piCo;lectri>ue sera activB le pro)ramme principal ralisera une ac>uisition de la tension sur la broche -A" et mettra A Kour la 2r>uence et le rapport cHcli>ue du si)nal rectan)ulaire' Zuand le transducteur piCo;lectri>ue ne sera pas activB le pro)ramme principal ne ralisera aucune opration' Pour )rer les appuis sur le bouton poussoir +*B on utilisera l'interruption IF,"' ] partir du pro)ramme prcdentB il 2audra modi2ier : la con2i)uration des interruptions pour prendre en compte la nouvelle interruption IF,"B simpli2ier le pro)ramme principal en trans2rant une partie du code vers la routine d'interruption' -aliser l'al)ori)ramme du pro)ramme demandB 0crire le pro)ramme sur ordinateur avec MP#A$B simuler son 2onctionnement et le valider sur la carte d'valuation'

M1 +I+

!"

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

-.

TP n4 !nitiation " la )ro.rammation en lan.a.e * -.1. !ntrod'ction assemble'r et com)ilate'r *

#'obKecti2 de cette sance est de vous initier A la 2ro+rammation en lan+a+e C d'un micro;contrleur' Par rapport A l'assembleurB le recours A un lan)a)e de . haut niveau / tel >ue le C s'est notablement dvelopp en prati>ue car il permet de simpli2ier l'criture des codes ainsi >ue leurs portabilits et leurs maintenabilits' FotammentB vous pourreC crire des instructions du tHpe . if5x@@y7 / ou . tem2 @ *x)W / pour e22ectuer un test d')alit ou une a22ectation' #e code >ue vous crireC devra Mtre crit en C standard AF+I' #a compilation des instructions C se 2era par le compilateur C18 >ui permet de )nrer du code pour la 2amille des PIC 18____' Comme l'assembleurB le compilateur traduit des instructions interprtables pour un oprateur humain en un code machine e=cutable par le PIC' Comme nous le verronsB l'criture et la compilation de vos pro)rammes sources C se 2era dans l'environnement MP#A$' Comme pour le dveloppement de codes en assembleurB MP#A$ sera donc l'environnement >ui vous permettra d'crireB de compiler et de dbo)uer vos sources C ?cf'B section * de ce ,P@'

Assemble'r

*om)ilate'r *

8ichiers )rJ com)ils

scri)t de confi.'ration de l(dite'r de lien

&i+ure $W, /ia+ramme de construction d'un excuta6le

<n notera >ueB dans le cadre d'un mRme proKetB il est possible de dvelopper des parties en C et des parties en assembleur' %3s lorsB la construction d'un code mac3ine excuta6le est illustr par le dia)ramme de la 2i)ure 11' %ans cet e=empleB un code source en assembleur et deu= codes sources en C ont t crits' Pour cha>ue sourceB l'assemble'r ?MPA+M6IF@ ou le com)ilate'r?MCC18@ est utilis pour )nrer des fic3iers o6jets ?file$.o1...1file9.o@' #e 2ichier obKet file9.o est ensuite utilis avec un 2ichier pr;compil e=istant file'.o de mani3re A 2ormer un 2ichier de librairie li6$.li6' FinalementB les 2ichiers obKets restants sont utiliss avec le 2ichier de librairie par l'dite'r de lien ?MP#IF(@ pour crer un e=cutable out2ut.3ex'
FoteC bien )alement le 2ichier scri2t.l.r ?cf.B 2i)ure 11@ >ui permet de con2i)urer correctement l'diteur de lien pour le micro;contrleur utilis'

-.2.

Gnration d('n si.nal carr

Pour vous 2amiliariser avec la pro)rammation en C du micro;contrleurB le 2remier 2rojet sera de reprendre le pro)ramme de cli)notement d'une #&% >ue vous avieC crit en assembleur' #e source C ci;apr3s 2ait cli)noter la #&% M1 +I+

!1

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


#1B broche -$"B A une 2r>uence de 1SC' #Itat de la #&% chan)e donc toutes les ""ms' << +u#!or6 === <<================================================ << /e,cri7#ion 6 << Pro r3''e de 2n2r3#ion d"un ,i n3l c3rr2 << ,ur le 7or# %&>0? de 72riode de 1 , <<================================================

0nQtRte du 2ro+ramme

<<111111111111111111111111111111111111111111111111 << /irec#i(e, 3u 7r27roce,,eur <<111111111111111111111111111111111111111111111111 << $ic!ier d"en1#@#e 7our le PIC184020 #include <718$4520.!> << $ic!ier d"en1#@#e 7our le, $onc#ion, de #e'7o #include <del3A,.!> << /2,3c#i(3#ion du B3#c!/o #7r3 '3 con$i B/T = OFF

&ic3iers d'enQtRte 2our le P#C$%'()* ?p1824 !"'h@ et 2our l'utilisation des fonctions de tem2orisation ?delaHs'h@ /irective G 2ra+ma H de dsactivation du Jatchdo)'

<< Pro r3''e Princi73l (oid '3inCDE <<111111111111111111111111111111111111111111111111 << /2cl3r3#ion de, (3ri3*le, loc3le, <<111111111111111111111111111111111111111111111111 << 1<2 Periode d"o,cill3#ion en N* de cAcle, TFP. /e'iPeriode = +%GG:.NT0 << Con$i ur3#ion du 7or#& T%IS& = 05000 << PO%T& en ,or#ie PO%T& = 05000 << %+H du PO%T& << Con$i . %&01%&I en 'ode I<O nu'eriJue +/CON1 = 050F0 /claration et affectation de la varia6le dfinissant le nom6re de cycles ncessaire ; une demiQ2riode d'oscillation ?" com)lter@' Confi+uration du 2ort E

<< 11> &oucle T3n#Kue 6 On *oucle ind2$inie'en#... )!ileC1DE << *3,cule'en# du *i# 0 du PO%T& PO%T& = PO%T& L 05010 << G#ili,3#ion d"une $onc#ion de del3A,.! FONCTIONC+%GG:.NTD0 M << 11> Fin de *oucle T3n#Kue M

Eoucle 2ermanente de c3an+ement d'tat de DE* QL 6asculement de DE* QL a22el ; la fonction de tem2orisation 5cf. delaHs'h7 2ermettant d'attendre (**ms ?" com)lter@'

Comprendre le pro)ramme ci;dessus' %2inir le tHpe de la variable /emiPeriode' %duire du 2ichier d'en;tMte . delays.3 H la 2onction A utiliser pour une temporisation telle >ue la priode soit de 1ms' %duiseC;en )alement l'ar)ument associ' Passer A la section suivante pour crer un proKet pour ce codeB pour le compiler et pour e22ectuer la simulation'

-.3.

=dition et *om)ilation d' )ro.ramme


$marra.e

Cette partie permet d'apprendre A crer un proKet MP#A$B A saisir un pro)ramme en C et A le compiler'

-.3.1.

Avant de commencerB crer le rpertoire . t2' puis dans ce rpertoire crer A nouveau un rpertoire . cli+notement?C H. CopieC dans ce rpertoire les 2ichier . delays.3 H et . $%f'()*.l.r /. M1 +I+

!!

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


#ancer la suite lo)icielle MP#A$ I%& A partir de lIicne >ui se trouve sur votre bureau'

-.3.2.

*ration d>'n no'vea' )ro?et en 'tilisant l>assistant : Pro?ect @i5ard K ;

Cli>uer sur Project LL Project Mizard N Cli>uer sur Suivant L puis slectionner . P#C$%&'()* H dans le menu droulant . /evice H' Cli>uer sur Suivant L puis slectionner . Microc3i2 C$% Toolsuite H a2in de pouvoir dvelopper en C' Cli>uer sur Suivant L puis dans le champ . Project Jame H saisir le nom du proKet ?e= : cli)notant`C@ et dans le champ . Project /irectory H aller chercher A lIaide du bouton . Ero=se HB le dossier cr au dbut : . t2'<cli+notant?C H' Cli>uer de'1 fois sur +uivant O et aKouter . $%f'()*.l.r / au proKet A lIaide du bouton 4dd LL Cli>uer sur Suivant L puis sur Terminer'

-.3.3.

*onfi.'rer les o)tions de com)ilation et d(dition de lien

Cli>uer sur ProjectLEuild I2tions...LProject et cli>uer sur l'on)let . Keneral H' Tri2ieC >ue les chemins de . #nclude Pat3 H et de . -i6rary Pat3 H sont correctement positionns en utilisant l'option . Ero=se H''' %ans l'on)let MP#IF( #inEerB cli>uer sur l'option . Su22ress CI/Qfile +eneration H' Cli>uer sur I]'

-.3.4.

=dition d' )ro.ramme

Crer un nouveau 2ichier dans le proKetB &ile LL 4dd Je= &iles to ProjectN #Ienre)istrer dans le rpertoire proKet avec lIe=tension c ?e= : cli+notant?C.c@ MP#A$ &ditor se lance +aisir le pro)ramme et enre)istrer' ue vous avez 6ien com2ris les diffrentes

Penser ; ajouter des commentaires au 2ro+ramme 2our montrer instructions.

-.3.&.

*om)ilation

#a compilation et l'dition de lien se 2ait en cli>uant sur l'icne de la barre de menu' Comme en assembleurB les erreurs et Jarnin)s sont si)nals dans la 2enMtre . Iut2ut H ainsi >ue le rsultat de la compilation EU#-/ SUCC00/0/ ou EU#-/ &4#-0/.

0n dou6leQcli uant sur une erreur ou un =arnin+ dans la fenRtre G Iut2ut H1 vous serez amener directement ; la li+ne concerne dans votre 2ro+ramme.

-.4.

3im'lation et )ro.rammation d' microJcontrCle'r

#es procdures de simulation et de trans2ert du code e=cutable sur le micro;contrleur ne di223rent pas de celles >ue vous aveC pu mettre en oeuvre pour le dveloppement en assembleur a cf' l'nonc du premier ,P' &22ectueC la simulation du )nrateur de si)nal carr donn ci;avant dans l'nonc'

-.&.

A))lications
*henillard sans interr')tion

-.&.1.

<n souhaite crer un chenillard A moti2 variable' 8n moti2 tant d2ini par une s>uence d'claira)e des #&% comme par e=emple b"="1B "="!B "="4B "="8cB cette s>uence est rpte A l'in2ini' %onner l'al)ori)ramme du chenillard d2ini par la s>uence de moti2 b"="1B "="!B "="4B "="8c' Cha>ue moti2 devra rester allum pendant un temps de "" ms' Pour dfinir la s uence de motifs1 vous 2rendrez soin de dclarer un ta6leau de unsi+ned c3ar car ce ty2e corres2ond ; un format % 6its ui 2ourra directement Rtre affect sur le PIDT E 5cf.1 MP#A$ C18 C C<MPI#&- US0DFS KU#/01 2a+e $$7. M1 +I+

!*

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

0crire et tester ce pro)ramme'

-.&.2.

*henillard m'lti)le sans interr')tions

<n souhaite aKouter un second moti2 distinct au chenillard de mani3re A permettre le choi= de la s>uence' <n prendra par e=emple comme seconde s>uence b"="1B "="!B "="4B "="8B "="4B "="!c' #a s>uence considre sera slectionne par une variable dans la 2onction principale ?ie'B la 2onction main57@' #e moti2 A a22icher A l'intrieur de la s>uence considre sera retourn par une 2onction appele valeur?c3enillard57 dont vous d2inireC les entres et les sorties' %onner l'al)ori)ramme du chenillard d2ini par le couple de s>uences b"="1B "="!B "="4B "="8c et b"="1B "="!B "="4B "="8B "="4B "="!c' 0crire et tester ce pro)ramme'

-.&.3.

*henillard m'lti)le et .estion des interr')tions

#'obKecti2 de ce dernier e=ercice est de permettre de chan)er r)uli3rement le moti2 du chenillard en utilisant les interruptions )nres par le ,IM&-"' 8ne des di22icults consiste alors A con2i)urer correctement le ,IM&-" de mani3re A permettre de )nrer les interruptions priodi>uement' <n donne ci;arp3s les lments du code source pour ce 2aire'

<<1111111111111111111111111111111111111111111111111 << Con$i ur3#ion de, in#erru7#ion,- c$. ,ec#ion, << 11 du d3#3,!ee# e# le $ic!ier !e3der 718!4520.! <<1111111111111111111111111111111111111111111111111 << 3c#i(e l"in#erru7#ion 7our le TI:.%0 INTCON = O+L.G%0 << Pl3ce l"in#erru7#ion TI:.%0 en 7riori#e !3u#e INTCON2 = O+L.G%0

e#

<< +c#i(e l3 e,#ion de, 7riori#e, 7our le, in#erru7#ion, %CON*i#,.IP.N = O+L.G%0 << .$$3ce le re i,#re T:%0P T:%0P = O+L.G%0 << .$$3ce le re i,#re T:%0L T:%0L = O+L.G%0 << +c#i(e le TI:.%0 e# con$i ure l3 (3leur du 7re,c3ler T0CON = O+L.G%0 << +c#i(e le, in#erru7#ion, INTCON*i#,.GI. = O+L.G%0

Confi+uration du microQcontr!leur 2our la +estion d'interru2tion et confi+uration du T#M0D* 2our 5 complter7.

#'obKecti2 est alors de dclencher une interruption A cha>ue 2ois >ue le ,IM&-" est en . over2loJ /B cette interruption commandant le chan)ement de moti2 du chenillard' A toutes 2ins utilesB on rappelle >ue le lan)a)e C ne permet pas directement de traiter les interruptions puis>u'il ne laisse pas A l'utilisateur le contrle des adresses du pro)ramme ?>uivalent du or+ en assembleur@' A la place une directive Z2ra+ma a donc t int)re au compilateur : #es directives #7r3 '3 code 'onQ7ro = R (oid 'onQ7ro C(oidD E code C ... M #7r3 '3 code 2orcent le compilateur A placer le code C A l'adresse @ ?cf.B MP#A$

C18 C C<MPI#&- 8+&-I+

58I%&B pa)e !" et !7@'


M1 +I+

!4

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


#a directive #7r3 '3 in#erru7# '3Q$onc#ion dclare ma?fonction comme la 2onction de traitement des interruptions prioritaires ?adresse "=18@' #a directive #7r3 '3 in#erru7#lo) '3Q$onc#ion dclare ma_fonction comme la 2onction de traitement des interruptions non prioritaires ?adresse "="8@' Da22el , un exem2le de 2ro+ramme C avec interru2tion est dis2oni6le dans le cours. %onner l'al)ori)ramme du chenillard d2ini par le couple de s>uences b"="1B "="!B "="4B "="8c et b"="1B "="!B "="4B "="8B "="4B "="!cB le chan)ement de s>uence tant command par interruption du ,IM&-" par priode de 4 secondesB appro=imativement' 0crire et tester ce pro)ramme'

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

/.

TP n& Gestion de Pri)hri,'es et !nterr')tions /.1. *omm'nication srie 93232

#e module . &nhanced 8niversal +Hnchronous -eceiver ,ransmitter / ?&8+A-,@ est le module du Pic18F4 !" permettant une communication srie de tHpe -+!*!' Ce tHpe de conne=ion tant )alement disponible sur un PC' Fous utiliserons le pro)ramme . hHperterminal / de 6indoJs pour dialo)uer avec le LC'

LC

#iaison srie "; T

Inter2ace
M4^)9)

-+!*!

Port
CIM

SHperterminal PC

Picdem ! Plus

&i+ure $%, Communication PCQCC -+!*! est une norme >ui standardise les communications sries' #a transmission de donnes pouvant se 2aire sur 1 ou 8 bitsB avec ou sans contrle de paritB celle;ci pouvant Mtre )res de 2aUons paire ou impaire' 8ne trame -+!*! commence par un bit de start et se termine par un ou deu= bits de sto2' #a 2i)ure suivante illustre une des con2i)urations possibles' #a vitesse de trans2ert pouvant )alement varier d'une application A l'autre' #a vitesse se mesure en $auds ?nombre de sHmbole transmis par seconde@' 8ne conne=ion -+!*! est asHnchrone car entre l'metteur et le rcepteurB il H a seulement les li)nes de donnes -= et ,= ?pas de li)ne d'horlo)e@'

str

b4

b4

b*

b!

b1

b"

par

stp

stp

&i+ure $X, Trame DS)9)1 W 6its1 2arit1 ) 6its de sto2 Fous utiliserons la con2i)uration suivante : Titesse : 74"" $auds ,aille des donnes : 8 bitsB Parit : AucuneB $it de +top : 1'

+ur un PC le port srie est appel C<M_B avec _ le numro du port'

/.1.1.

L(hB)erterminal

#'hHperterminal est un pro)ramme livr avec 6indoJs >ui permet de se connecter A des htes distants ?ordinateursB sites telnetB oscilloscopeB '''@ A l'aide d'un modemB d'un cDble null;modem ?liaison srie@ ou d'une conne=ion ,CP9IP' A cha>ue 2ois >u'un caract3re est saisiB il est envoH sur le support de communicationB tout caract3re reUu est a22ich' #'hHperterminal est accessible dans le menu /marrer L Tous les 2ro+rammes L 4ccessoires L Communications L Sy2erterminal ?6in _P@ ou alors via la commande . 3y2erterm H dans menu /marrer L 0xcuter' #ors>u'il s'ouvreB il vous demande de con2i)urer la conne=ion : saisir un nom ?e=, Pic@ et cli>uer sur I]1 con2i)urer le tHpe de conne=ionB )nralement CIM$ et cli>uer sur I]1 con2i)urer les proprits de la conne=ion ?74"" $audsB 8 bitsB aucune paritB 1 bit de stopB pas de contrle de 2lu=@ et cli>uer sur I]1 enre)istrer la conne=ion dans votre rpertoire pour ne pas avoir A la recrer ?menu &ic3ier L 0nre+ister sous ...@'

/.1.2.

Pro.ramme : echo ;

#e pro)ramme . echo / renvoie sur la liaison srie tout octet reUu sur celle;ciB l'envoi et la rception des octets est ralis sans interruption'

M1 +I+

!4

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

Con2i)uration du module . &8+A-, /


#es re)istres A initialiser sontB $A8%C<FB '$aud -ate Control -e)ister' >ui initialise la vitesse via le re)istre +P$-5S:+P$-5 dont la valeur est calcule en utilisant les tableau= reproduits en pa)e !" ;!"8 du datasheet' $A8%C<F autorise )alement les interruptionsB la rceptionB ''' -C+,AB '-ecieve +tatus And Control -e)ister' pour con2i)urer la rception ,_+,AB ',ransmit +tatus And Control -e)ister' pour con2i)urer l'mission

_mission et Dce2tion

#'octet reUu est plac dans le re)istre -C-&5 ?Decieve De+ister@ et l'octet A envoHer est A placer dans ,_-&5 ?Transmit De+ister@' MMme lors>ue >ue les interruptions sont interditesB on peut utiliser les 2la)s pour connaRtre l'tat ?vide ou plein@ des re)istres -C-&5 et ,_-&5' #es 2la)s se trouvent dans le re)istre PI-1 ?Peri23eral #nterru2t De uest &la+ De+ister 1@' Pour savoir si un octet est disponibleB il su22it simplement de re)arder le 2la) associ A -C-&5 ?rception d'un octet@' #a procdure d'mission est reprsente par le schma blocB ci;dessous ?e=trait du datac3eet@'

&i+ure )*, Sc3ma 6loc du module d'mission #ors>u'un octet est plac dans ,_-&5B il est . coup / dans ,+- ?Transmit S3ift De+ister@ >ui comme son nom l'indi>ue e22ectue un dcala)e A la vitesse impose par +P$-5S:+P$-5' <n notera >ue l'tat de ,_-&5 est visible dans ,_IF et >ue l'in2ormation de transmission en cours se situe dans ,-M,' #e schma bloc de la rception se trouve en pa)e !1* du . datas3eet H'

8tiliser le datac3eet pour initialiser les re)istres $A8%C<FB -C+,A et ,_+,A'?Pour r+ler $ 6it de sto21 le 6it S0J/E du re+istre T^ST4 doit Rtre ; *@ 0crire et tester le pro)ramme . echo /B utiliser le cDble srie du pro)rammateur pour communi>uer avec la carte LC'

/.2.

A))lications
*henillard " motif variable

/.2.1.

<n souhaite crer un chenillard A moti2 variable' 8n moti2 tant d2ini par une s>uence d'claira)e des #&% comme par e=emple b'""""'B '"""1'B '""1"'B '"1""'B '1"""'cB cette s>uence est rpte A l'in2ini' #e chan)ement de s>uence se 2ait par l'envoi du numro de la s>uence par liaison -+!*! A l'aide de l'hHperterminal' Ainsi la saisie de 1 au clavier Kouera la s>uence 1B etc. #e code A+CII des chi22res du pav numri>ue M1 +I+

!1

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


tant : Caractre Code 4SC## " 1 ! * 4 4 1 8 7

48 47 " 1 ! * 4 4 1 ?"=*"@ ?"=*1@ ?"=*!@ ?"=**@ ?"=*4@ ?"=* @ ?"=*4@ ?"=*1@ ?"=*8@ ?"=*7@ Ta6leau 9, Code 4SC## des c3iffres

,outes les ""msB l'tat des #&% est modi2i en utilisant une 2onction de delays.h' #e chan)ement de s>uence est )r sur interruption de rception ?&8+A-,@B >uand un octet est reUu par le LCB il le renvoi pour l'a22icher dans l'hHperterminal' +i la s>uence demand n'e=iste pasB le LC renvoi 'Y' au PC et ne modi2ie pas le choi= de s>uence' 0crire et tester ce pro)ramme Jote , -a valeur du c3iffre associ au code 4SC## 2eut Rtre o6tenue 2ar une soustraction. 0n C1 le 2remier lment du ta6leau est *. Une matrice est un ta6leau de ta6leau.

/.2.2.

$evinette

#e pro)ramme . %evinette / est un Keu entre le LC et vousB les communications se 2aisant via le PC ?hHperterminal@' #e principe est simpleB le LC choisi un nombre entre " et ! et doit vous le 2aire deviner en un temps donnB 1 min' #e temps restant est visible sur les 4 #&%s ?1 led correspondant A ! s@' +i vous trouveC le nombre choisi avant 1 minB le LC vous donne le temps >ue vous aveC mis en secondesB sinon il vous in2orme >ue vous aveC perdu et vous donne la rponseB puis le Keu recommence'

Fonctions de communications :

0crire et tester les 2onctions de communications ?-+!*!@ suivantes : com?init >ui initialise les re)istres de l'&8+A-,' com?recieve >ui attend l'arrive d'un octet et le renvoie' com?transmit >ui permet d'envoHer un octet vers le PC' com?strin+?transmit >ui envoie une chaRne de caract3res ?tableau d'octets@ au PC' com?strin+?receive >ui permet de recevoir une chaRne de caract3re envoHe par le PCB cette 2onction reUoit en param3tre l'adresse du tableau ?chaRne@ oQ l'on veut stocEer la chaRne reUue' ?#a 2in de la saisie dans l'hHperterminal peut Mtre si)nale par l'appui sur la touche &ntre@ /ans l'3y2erterminal1 le caractre '[n' 2ermet de 2asser ; la li+ne suivante 5touc3e CTD-P0ntre7 et '[r' de faire un retour c3ariot1 retour en d6ut de li+ne 5touc3e 0ntre7. Une c3a8ne se termine 2ar le caractre '[*'.

&onction de +nration G alatoire H du nom6re ,

Cette 2onction doit renvoHer le nombre mHst3re' Pour cela elle incrmente un entier n cod sur 8 octets ?de tHpe unsi)ned char@ tant >u'aucune donne n'est reUue sur la liaison srie' Zuand n N ! B si on aKoute 1 on a n N ! 4 >ui se code sur 7 bits mais comme n est sur 8 bitsB on aura n N "' 0crire cette 2onction'

&onctions de +estion du tem2s

#e temps ma=imal pour trouver la solution est d2init dans le pro)ramme principal ? main@' #e temps restant est une variable )lobale ?commune A toutes les 2onctions@' <n mesure le temps avec le ,IM&- "' 0crire les 2onctions : timer?init >ui initialise les re)istres du timerB des interruptionsB timer?+o >ui lance le dcompte et les interruptionsB timer?sto2 >ui arrMte le dcompte et les interruptionsB timer?interru2t >ui dcrmente le temps et met A Kour les #&% ?une #&% correspond A ! secondes restantes@'

Pro+ramme com2let

M1 +I+

!8

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


#ors>ue le pro)ramme dmarreB le LC envoie un messa)e au Koueur en lui demandant d'appuHer sur une touche pour commencerB ce >ui permet de )nrer le nombre mHst3re' %3s l'appui le chrono est lancB lors>ue une proposition est 2aireB le LC in2orme le Koueur du 2ait >ue le nombre mHst3re est suprieur ou in2rieur A sa proposition' +i le Koueur trouveB il est in2orm de son temps sinon le nombre mHst3re lui est donn' A la 2in d'une partie le pro)ramme se relance' 0crire et tester le pro)ramme . devine /B la conversion d'une chaRne de caract3re en entier peut se 2aire avec la 2onction atoi de la biblioth3>ue stdli6.3, il H a )alement la 2onction inverse itoa' -e tem2s 2eut se terminer lors ue le CC est en attente d'une saisie du joueur. -e jeu se joue avec le 2av numri ue du clavier1 tout a22ui sur une autre touc3e 2eut faire 6u++er le 2ro+ramme. Si vous avez le tem2s1 vous 2ouvez dtecter les erreurs de saisie et demander une nouvelle saisie.

M1 +I+

!7

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

0.

TP n+ Pannea' d(afficha.e l'mine'1

A2in de permettre A la secrtaire de la 2ormation de vous di22useC plus 2acilement divers messa)es nous allons raliser un sHst3me d'a22icha)e A partir de l'a22icheur #C% de la carte' #'a22icha)e se 2ait sur deu= li)nes : #e titre du messa)e sur la premi3re li)neB il est centr et ne doit pas dpasser 14 caract3res' #e corps du messa)e >ui d2ile en boucle sur la seconde li)ne' Pour mettre A Kour le titre et9ou le corps du messa)e la secrtaire utilisera . 3y2erterminal / ?liaison rs!*!@B elle aura aussi la possibilit de dsactiv l'a22icheur' #e messa)e ainsi >ue l'tat de l'a22icheur . actif / et . inactif / devront Mtre sauve)ard mMme en cas de coupure de courant'

0.1.

Gestion de l(affiche'r L*$


*onversion des fonctions de bas nivea' d' driver en *

0.1.1.

%ans le ,P n[*B nous avons cris le driver de l'a22icheur en assembleurB il n'est donc pas directement utilisable dans un pro)ramme C' #e compilateur MCC18 permet l'int)ration de code assembleur dans le code C en utilisant les directives . ?asm / et . ?endasm /' Contrairement au compilateur MPA+M6IFB le compilateur C ne connait pas les options par de2aut des intructions ?c2' Keu d'instructions@ il 2aut donc raKouter toutes les options A votre code assembleur' Ainsi la 2onction lcd`ecrire`>uartet deviendra : (oid lcdQecrireQJu3r#e#Cc!3r JD E B%.G=J0 Q3,' 3ndl) 050F *c$ PO%T/-I-0 *c$ PO%T/-2-0 *c$ PO%T/-1-0 *c$ PO%T/-0-0 ... Qend3,' M Complter la 2onction . void lcd?ecrire? uartet5c3ar 7 / +ur le mMme principe crire . void lcd?dis2o5void7 / Fous avons maintenant cod les deu= 2onctions de base pour la )estion du lcdB les autres 2onctions vont Mtre recodes en C' 0crire la 2onction . void lcd?ecrire?octet5c3ar lcd?d67 /' %ans MCC18 l'instruction s=a2f est remplace par la 2onction S=a2f. Pour inverser les >uartets M+$ et #+$ de . = /B il su22it d'crire . S=a2f 5MD0K1*1*7O /' 0crire les 2onctions . void lcd?ecrire?ordre5c3ar o7 / et . void lcd?ecrire?donnee 5c3ar d7 /' 0crire les 2onctions . void lcd?cls5void7 /B . void lcd?l$5void7 / et . void lcd?l)5void7 /' 0crire les 2onctions . void lcd?init5void7 / en utilisant la biblioth3>ue . delays.3 / pour les temporisations' Crer la 2onction . void lcd?curseur?2osition5c3ar l1 c3ar 27 / >ui permet de positionner le curseur d'a22icha)e A la . 2 /i3me position de la li)ne . l /' ?c2 2i)ureB pa)e @ ,ester ses 2onctions sur la carte d'valuation'

0.1.2.

*ration de fonctions de ha't nivea'

#e lan)a)e C nous permet d'crire tr3s simplement des 2onctions plus volues pour la )estion de l'a22icheur' 0crire la 2onction . void lcd?lcls5c3ar l7 / >ui e22ace la li)ne . l /' 0crire la 2onction . void lcd?ecrire?c3aine5c3ar `c37 / >ui a22iche une chaine de caract3re sur la li)ne active' 0crire la 2onction . void lcd?ecrire?c3aine?centre5c3ar `c31 c3ar l7 / >ui a22iche une chaine de caract3re en la centrant sur la li)ne . l /B selon le principe ci dessous' ; Cas d'une chaine de lon)ueur paire :

M1 +I+

*"

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


C P + I N . ; Cas d'une chaine de lon)ueur impaire : ?plus d'espace A droite@' C P + I N . S ,ester ses 2onctions sur la carte'

0.1.3.

*ration de la libraire : affiche'rlcd ;

Fous disposons maintenant d'un ensemble de 2onctions de )estion du #C% a2in de les utiliser et de pouvoir les di22user plus 2acilement nous allons les re)rouper dans une librairie >ue l'on nomera . a22icheurlcd /' 8ne librairie ?2ichier d'lib@ est en 2ait une compilation de 2ichier obKets' #es 2ichiers obKets contiennent entre autres la liste des noms de 2onctions ou les ti>uettes ?pour A+M@ ainsi >ue leur code machine ?coda)e binaireB ces 2ichiers ne sont pas ditables@' #es 2ichiers obKets ?d'o@ sont obtenus apr3s compilation de votre code dans MP#A$' Crer un nouveau proKet sous MP#A$ comme pour 2aire un pro)ramme classi>ue' %ans le 2ichier source . coller / vos 2onctions de )estion de l'a22icheur avec les di22rents . Zinclude / CompilerB une erreur vous in2orme >ue la 2onction . main / n'est pas d2inieB c'est normal G %ans votre rpertoire proKetB un 2ichier obKet du mMme nom >ue votre pro)ramme a t cr' C'est ce 2ichier >ue nous allons maintenant convertir en librairie A l'aide de l'utilitaire de )estion de biblioth3>ue MP#I$' MP#I$ est un pro)ramme 2onctionnant en mode console sous %<+ avec les options suivantes : <c Cration contenant un ou plusieurs 2ichiers obKets <# <d <r <5

#iste le contenu de la libraire &22ace un obKet de la librairie -emplace un obKet e=istant dans la librairie &=trait un membre de la librairie

#a sHnta=e d'utilisation de MP#I$ est :

:PLI& <Ec#dr5M no'Qli*r3irie >li,#e de $ic!ier, o*Se#,?


<uvrir une 2enMtre dos ?Menu dmarrerB 0xcuter1 cmd@ +e positionner dans le rpertoire oQ vous souhaiter crer la librairieB dans l'e=emple /,[t2s[t2V[ ?commande %<+ cd : chan)e directorH@ Crer la librairie en utilisant la commande MP#I$ 9c a22icheurlcd'lib votre?fic3ier?o6jet. Un exem2le de cration est re2roduit en fi+ure )$. C6;/ocu'en#, 3nd Se##in ,;Fl3(ien>/6 /6;>cd #7,;#7T /6;#7,;#7T> /6;#7,;#7T>'7li* <c 3$$ic!eurlcd.li* /6;#7,;#7T;li*;lcdli*.o :PLI& 4.12- Li*r3ri3n Co7Ari !# CcD 200U :icroc!i7 Tec!nolo A Inc. .rror, 6 0 /6;#7,;#7T> &i+ure )$, Cration d'une li6rairie avec MP-#E Pour utiliser une librairie il 2aut soit lui associer un 2ichier d'entMte ?d'h@ dans le>uel se trouve les prototHpes de vos 2onctions soit dclarer les prototHpes dans votre pro)ramme' #e 2ichier d'entMte tant simplement un 2ichier te=te renomer . affic3eurlcd.3 /' Crer le 2ichier . affic3eurlcd.3 / dans le mMme rpertoire >ue . affic3eurlcd.li6 /

#nclure la li6rairie dans un 2rojet +i l'on souhaite utiliser notre biblioth3>ue comme une biblioth3>ue dKA installe ?avec

M1 +I+

*1

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


Zinclude\affic3eurlcd.3L avec MP#A$B il est necesaire de modi2ier la variable d'environnement MCC?include et de modi2ier le 2ichier d'dition de liens ?d'lEr@' %ans le cadre des travau= prati>ues nous n'utilerons pas cette mthode' #a procdure A suivre pour utiliser la biblioth3>ue est la suivante : %ans votre rpertoire proKetB copier;coller les 2ichiers . affic3eurlcd.li6 / et . a22icheurlcd'h /' AKouter le 2ichier . affic3eurlcd.li6 / au dossier . -i6rary &iles / de votre proKet' Insrer la directive . Zinclude aaffic3eurlcd.3a / au dbut de votre pro)ramme' ,ester votre librairie'

0.2.

Gestion de l(%%P9LM

#a mmoire &&P-<M ?&lectricallH;&rasable Pro)rammable -ead;<nlH MemorH ou mmoire morte e22aUable lectri>uement et pro)rammable@ ?aussi appele &!P-<M ou &eP-<M@ est un tHpe de mmoire morte' C'est A dire utilise pour enre)istrer des in2ormations >ui ne doivent pas Mtre perdues lors>ue l'appareil >ui les contient n'est plus aliment en lectricit' ,outes les in2ormations ncessaires A la lecture est A l'criture dans l'&&P-<M interne se trouvent dans la datasheet pa)es 8* A 81' #e PIC 18F4 !" dispose de ! 4 octets de mmoire &&P-<M interne >ui sont rparties de la mani3re suivante : l'tat du panneau ?1 octet@ le titre du messa)e ?11 octets : 14 caract3res \ le caract3re 'f"' de 2in de chaine@ le corps du messa)e ?!*1 octets : !*4 caract3res \ le caract3re 'f"'@ 0crire les 2onctions . c3ar ee2rom?lire5c3ar ad7 / et .void ee2rom?ecrire5c3ar data1 c3ar ad@ / >ui permettent respectivement de lire et d'crire A l'adresse . ad / de l'&&P-<M' #'adresse mmoire varie entre *x** et *x&&' /ans la fonction d'criture l'interdiction des interru2tions est ncessaire seulement si celleQci ont t active et on ne doit 2as uitter cette 2rocdure tant ue l'enre+istrement dans la mmoire n'est 2as termin. Tous 2ouvez tester les fonctions d'criture et de lecture dans l'00PDIM avec le simulateur de MP-4E ; condition de dsactiver l'attente de fin d'criture... 4ller dans le menu Tie= L 00PDIM en dou6le cli uant sur un es2ace mmoire vous 2ouvez le modifier. Pour notre panneau d'a22icha)eB nous allons venir lire la chaine ?li)ne 1@ ou une partie de la chaine ?li)ne !@ dans l'&&P-<M' Pour cela vous alleC crie la 2onction . void ee2rom?lire?c3aine5 c3ar `c31 c3ar len1 c3ar ad7 /' Cette 2onction copie dans la chaine . ch / le contenu de l'&&P-<M A partir de l'adresse . ad / Kus>u'A ce >ue le caract3re '[*' soit rencontrer ou >ue la chaine . c3 / soit de lon)eur . len / Zuel sont les pla)es d'adresse en &&P-<M de l'tat de l'a22icheurB le titre et le corps du messa)e Y 0crire la 2onction ee2rom?lire?c3aine. +imuler cette 2onction avec MP#A$+IM'

0.3.

Pannea' d(afficha.e
Pannea' " messa.e fi1e

0.3.1.

0crire un pro)ramme >ui a22iche le titre du messa)e sur la premi3re puis 2ait d2iler en continu le corps du messa)e sur la seconde li)ne: le corps du messa)e commence A apparaRtre sur la droite de l'cranB puis d2ile vers la )auche' Zuand la derni3re lettre du corps du messa)e sort de la )auche de l'cranB le d2ilement recommence' %ans ce pro)rammeB vous deveC )alement )rer l'tat du panneau : si l'tat vaut "B le te=te ne d2ile pas et gSors +erviceg est a22ich sur le panneauB si l'tat vaut 1B le corps du messa)e d2ile' #a vitesse de d2ilement est de "" ms9caract3re' #ors>ue l'a22icheur est en service la led connecte A -$" est allumeB en hors service elle cli)note A une 2r>uence de 1 SC' Tous pouveC pro)rammer l'&&P-<M interne du LC via MP#A$ a2in d'initialiser le te=te A a22icher' Tous pouveC initialiser vous mMme le te=te A a22icher dans l'&&P-<M en respectant les pla)es mmoiresB les valeurs et le caract3res '[*' ou alors importer directement le 2ichier . t2V?ee2rom.mc3 / >ui vous est 2ourni' #ors de la pro)rammation du LCB l'&&P-<M le sera )alement' ,ester ce pro)ramme sur la carteB penser A essaHer le cas oQ le panneau est acti2 et celui oQ il est hors service' M1 +I+

*!

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()* 0.3.2. Pannea' " messa.e variable

#e pro)ramme >ue vous veneC d'crire est tr3s utile pour di22user un messa)e mais peu prati>ues' &n e22etB si A cha>ue 2ois >ue la secrtaire veut modi2ier le messa)e elle doit prendre un pro)rammateur et repro)rammer l'&&P-<MB elle ne voudra pas l'utiliser : c'est compli>uB Ua prend du tempsB il 2aut sortir le microcontrleur du panneau''' Pour r)ler ce probl3me vous alleC mettre en place un sHst3me de mise A Kour A distance en utilisant le protocole -+!*! comme vous l'aveC dans le ,P n[ ' Tia hHperterminal la secrtaire acc3dera A une inter2ace d'administration >ui lui permettra de modi2ier l'tat du panneauB le titre et le corps du messa)e' #e pro)ramme va donc a22icher en continu le messa)e et basculer en mode mise A Kour lors>ue la commande sera reUue' #es di22rentes commandes et la procdure de mise A Kour sont d2inis dans l'al)ori)ramme 2i)rue !! pa)e suivante' Complter le pro)ammme prcdent pour int)rer l'inter2ace d'administration' CommenteC bien ce pro)ramme a2in d'e=pli>uer ce >ue vous 2aRtes et pour>uoi' Penser ; +rer la taille maximale des c3aines et le carctre '[*' en cas de d2assement de la taille maximale en inform la secrtaire 53y2erterminal7.

Taleur dans -C-&5 Y -C-&5N'd' Mettre le panneau hors le service Mettre panneau hors service -C-&5N'e' -C-&5N's' -envoHer l'tat du panneau et le contenu du titre et du corps du messa)e dans hHperterminal -C-&5N'u' A22icher .hMise A Kourh/ sur le panneau -cuprer le nouveau titre du messa)e -cuprer le nouveau corps du messa)e

Mettre le panneau en service

A22icher dans hHperterminalB >ue la commande a t e22ectue

&i+ure )), 4l+ori+ramme de l'interface d'administration du 2anneau #'application ralise ici est tr3s proche d'un cas d'utilisation relle si ce n'est >ue l'a22icheur aurait peut Mtre plus de li)nes' #a di22rence maKeure serait dans l'interace d'administration elle ne serait pas ralise avec hHperterminalB mais avec un pro)ramme spcial en CB C\\B etc ''' >ui serait crit avec des boRtes de dialo)ues beaucoup plus conviales pour la secrtaire'

M1 +I+

**

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

12.

TP n- 3tation 3ervice

%ans ce ,P nous allons raliser de la mani3re la plus raliste possible le pro)ramme de commande d'un automate de pompe A essence'

12.1.

A'tomate de Pom)e

#e bouton poussoir connect A -$" reprsente la poi)ne de distribution de carburant' #ors>ue le bouton est appuHB la distribution est en coursB le moteur de la pompe est alors est alors activ ?led -$* claire@' 8n dbitm3tre mesure le dbit de carburant a2in de calculer le volumeB il donne une impulsion A cha>ue centilitre vers' IciB il sera simul par le timer " >ui e22ectura une impulsion toute les 1 ms environ' 0crire un premier pro)ramme >ui initialise les entres sorties utilisesB le timer "B autorise les interruptions puis A l'in2ini =cute : 'o#eur 7o'7e 3rr@#2 d2*i'V#re 3rr@#2 #3n# Jue Poi n2e +ccroc!2e $3ire $in $3ire 'o#eur 7o'7e 3c#i(2 d2*i'V#re 3c#i(2 #3n# Jue Poi n2e /2croc!2e $3ire $in $3ire Pour tester ce 2ro+ramme lors d'une interru2tion1 inverser l'tat de DC) afin d'envoyer un si+nal d'environ (* Sz sur le transducteur 2izoQlectri ue. Fous allons maintenant int)r au pro)ramme les calculs de volume et de pri=' #e volume est compt en centilitres de " A 7777 cl' Il peut donc Mtre stocEer dans une variable de tHpe entier ?14 bits@' #e pri= du litre est 2i= A 1B"8iB un centilitre vaut donc 1B"8 centime d'euro' #e pri= ma=imun peut atteindre 1"8B"" i' #e pri= sera donc un nombre de centi3mes de centimes variant entre " et 1"1787!B il doit Mtre cod sur entier lon) ?*! bits@' Cha>ue interruption du timer " correspond A un centrilitre vers' #e sous pro)ramme d'interruption incrmentre le volume ?\1cl@ et le pri= en centi3me de centime ?\1"8c@' <n aurait )alement pu calcul le pri= en multipliant le volume par le pri= au litre mais cela aurait ncessit des multiplicationsB plus lon)ues A e22ectuer >ue les additions' Modi2ier votre pro)ramme pour int)rer ces calculsB puis assureC;vous en simulation >ue le volume et le pri= voluent correctement' #'a22icheur #C% va nous permettre ?via la librairie crite au ,P n[4@ d'a22icher le pri= et le volume lors>ue la distribution est en cours' #e volume est un entier compris entre " et 7777 et nous voulons l'a22icher A l'cran sous la 2orme dcimale :

^mO^cOB^dO^uO l oQ ^ m OB '''B ^ u O reprsentent respectivement le chi22re des milliersB centaintesB diCaines et units' +i on e22ectue la division euclidienne de la variable volume par 1"""B ^ m O est le >uotient et le reste reprsente centainesB diCainesB units '''
0n C1 le uotient de la division euclidienne est donne 2as l'o2rateur < et le reste 2ar b. AKouter ces calculs au pro)ramme prcdentB et le simuler' Tri2ier l'e=actitude des di22rents chi22res A a22icher' Puis en utilisant les points d'arrMtB mesurer la dure d'=cution du code de calcul des chi22res A a22icher' Pour acclrer les calculsB nous allons utiliser l'al)orithme suivantB donn ici pour le chi22re ^mO' #es calculs tant e22ectu dans la variable vol a2in de ne pas modi2ier la variable volume' ' = 0 (ol = (olu'e #3n# Jue (ol >= 1000 $3ire ' = ' W 1 (ol = (ol X 1000 $in $3ire

M1 +I+

*4

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


Apr3s avoir bien compris cet al)orithmeB remplacer toutes les divisions de votre pro)ramme par ces boucles ?2onction : deu= valeurs sont A retourner e22ectuer un passa)e par adresse pour l'une des deu= '''@' +imuler le 2onctionnement et mesurer la dure d'=cution' Attention G #a dure dpend du chi22re A dterminer' Faites des essais avec le volume A 1 puis avec les valeurs >ui donneront la plus )rande dure' Avons nous )a)n beaucoup de temps Y #e pri= et le volume sont a22ichs de la mani3re suivante : G 3 8 o l e 5 5 - 5 5 l 1 - 0 8 . < l A A A - A A .

<n calcule le pri= A a22icher de la mMme 2aUon >ue le volume' Zuel est le premier chi22re A a22icher Y 0crire le code corresspondant au calcul des HHHBHH i' #ors>ue >ue le client raccroche la poi)neB la pompe est blo>ue tant >ue celui;ci n'a pas paH' #a validation du paiement tant reUue de l'automate de caisse' Pour l'instant un appui sur -A4 validera la paiement et permettra au client suivant de se servir en carburant' Int)rer )alement la contrainte >ue le volume ne doit pas dpasser pas 7777clB sinon la pompe s'arrMte et attends le paiement' 0crire et tester ce pro)ramme sur la carte'

12.2.

*omm'nication avec l(a'tomate de caisse

5nralement une station service est constitue de plusieurs pompes' <n ne peut donc pas utiliser une conne=ion de tHpe -+!*! pour communi>uer avec l'automate de caisse ou alors il 2autB A cha>ue clientB aller brancher le cDble sur la bonne pompe''' Seuresement il e=iste d'autres mani3res de communi>uer a2in de mettre plusieurs entits en rseau' #e PIC 18F4 !" int3)re un module M++P de communication srie ?Master +Hnchronous +erial Port@ >ui )3re entre autre le protocole IeC >ue nous allons utiliser'

12.2.1.

Le b's !M*

IeC ?pour Inter Inte)rated Circuit $us@ est le nom du bus histori>ueB dvelopp par Philips pour les applications de domoti>ue et dIlectroni>ue domesti>ue au dbut des annes 178"B notamment pour permettre de relier 2acilement A un microprocesseur les di22rents circuits dIune tlvision . moderne /' #e bus IeC est un bus srie sHnchrone constitu de deu= li)nes : +erial %ata #ine ?+%A@ et +erial ClocE #ine ?+C#@ >ui assurent la communication entre di22rents modules'

+%A +C#
Maitre
m etteur1 rce2teur

&sclave 1
m etteur1 rce2teur

'''

&scalve n
m etteur1 rce2teur

&i+ure )9, 4rc3itecture #cC #e module >ui demande le trans2ert de donnes et >ui )n3re lIhorlo)e est le maRtreB le module >ui rpond est un esclave' 8n mMme sHst3me peut disposer de plusieurs maRtresB on le nomme alors multimaRtre' %ans ce casB il 2aut arbitrer la discussion entre les di22rents modules' Fous ne verrons ici seulement le cas d'un seul maRtre avec plusieurs esclaves' #e bus IeC travaille A une vitesse de 1"" Ebits9s en mode standard et 4"" Ebits9s en mode rapide' #es li)nes +%A et +C# sont bidirectionnelles' Au reposB elles sont au niveau haut' #e 2ormat d'une trame standard est reproduit dans le tableau 4' 8n trans2ert tHpe IeC est reproduit en 2i)ure ! '

Adresse

-6

%onnee

A '''

%onnee

A P

Ta6leau ', Trame #cC 3 : bit de startB est la condition de dpart : +%A passe de lItat haut A lItat bas pendant >ue +C# est au niveau haut ?c2' 2i)ure !4@' Adresse : reprsente celle du module A la>uelle on veut s jadresserB elle est compose de 1 bits A4A A4A*A!A1A"B A4A A4A* sont 2i=s par lIIeC commitee A!A1A" sont libres pour nous permettre de

M1 +I+

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


mettre plusieurs 2ois le mMme esclave sur le bus ?au ma=imum 8@' 9@ ?-ead 6rite@ : est le bit de mode de transmission' +Iil est A "B on est en mode critureB cIest le maRtre >ui envoie des donnes A lIesclave' +Iil est A 1B on est en mode lectureB cIest lIesclave >ui envoie des donnes au maRtre' #IAdresse et -96 sont transmis ensemble ce >ui 2orme un mot de 8 bits' A : bit dIac>uittementB il a lieu A la 2in de cha>ue transmission dIun mot pour dire >ue le rcepteur a bien reUu les donnes' Apr3sB lIenvoi du mot de 8 bitsB au coup dIhorlo)eB le rcepteur 2orce +%A A lItat bas' $onne : sont les huit bits de donnes >ue lIon transmet' P : bit de stopB est la condition de stop' +%A passe de lItat bas A lItat haut pendant >ue +C# est au niveau haut ?c2' 2i)ure !4@'

&i+ure )', Eus #cC1 Eit de Start et Eit de Sto2 %Iapr3s le protocole de trans2ertB on peut voir >ue le nombre ma=imal dIesclaves est !1 soit 1!8' Comme les li)nes +%A et +C# sont au repos au niveau hautB les composants ?maRtresB esclaves@ IeC ne peuvent donc >ue les 2orcer >uIA lItat bas' Ce 2onctionnement impose au= circuits des sorties A collecteur ?2i)ure !4@ ouvert ou A drain ouvert pour +%A et +C# ?c2' %ocumentation IeC@'

#e maRtre met l'adresse de l'esclaveB -6 et )3re l'horlo)e'


#e maRtre met l'adresse de l'esclaveB -6 et )3re l'horlo)e'

l'metteur met les donnesB le maRtre )3re l'horlo)e'


l'metteur met les donnesB le maRtre )3re l'horlo)e'

&i+ure )(, Transfert de donnes sur le 6us #cC

M1 +I+

*4

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

Pour stopper une transmissionB en mode lecture le maRtre nIac>uitte pas le dernier mot transmis et )n3re un bit de stop' &n mode critureB si lIesclave nIac>uitte pas le dernier motB le maRtre )n3re le bit de stop' #es donnes ne sont valides >ue sur un niveau haut de +C#' 8ne e=tension de l'IeC permet d'avoir plus de priphri>ues en codant l'adresse sur 1" bitsB nous ne verrons pas ce cas dans ce tp'

&i+ure )V, Connexions ; collecteur ouvert +ur un bus IeCB le pic peut Mtre soit maRtre soit esclave' %ans notre application >ui Kouent les rles de maRtre et d'esclave Y Justi2ier votre rponse'

12.2.2.

=chan.e entre les a'tomates de caisse et de )om)es


Messa+e

#es tableau= suivants reprsentent les chan)es entre les automates :

&n attente de client %istribution en cours %istribution termineB attente de validation du paiement
Ta6leau (, Communication 4utomate de 2om2e vers caisse

'c' 'o' 'aHHHHH' d

Messa+e

Talidation du paiement
Ta6leau V, Communication 4utomate de caisse vers 2om2e d : HHHHH sont les chi22res du montant A paHer'

'v'

12.2.3.

Le b's !M* et l(a'tomate de caisse

Fous allons commencer par tudier le pro)ramme de l'automate de caisse' Ce pro)ramme permet via hHperterminam de communi>uer avec les pompes' Pour connaRtre le statut d'une pompeB il su22it de saisir son numro dans hHperterminal A l'aide du pav numri>ue' Fous nous intressons seulement A la partie IeC du pro)ramme dans le ,P' &=pli>uerB commenter les 2onctions de l'automate de caisse reproduite dans le tableau 1' ] partir de ces 2onctions de )estion du busB crire les 2onctions de communication . void i)c?master?to?slave5 c3ar adresse1 c3ar donnee 7 / et . c3ar i)c?slave?to?master5 c3ar adresse 7 / ralisant respectivement le trans2ert d'un octet du maRtre vers l'esclave et de l'esclave vers le maRtre' -es c3rono+rammes 2a+e $X) et $X9 de la datas3eet 2ourraient vous Rtre utile. Zuelles modi2ications 2aut;il apporter au= 2onctions >ue vous veneC d'crire pour >u'elles soient utilisables dans le cas de la station service Y

M1 +I+

*1

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


(oid i2cQ'3,#erQini#C (oid D E T%ISC*i#,.T%ISCI=10 T%ISC*i#,.T%ISC4=10 SSPCON1=0*001010000 SSPST+T*i#,.S:P=10 SSP+//=N0 SSPCON2=00 M (oid i2cQ'3,#erQ,#3r#Q*i#C (oid D E SSPCON1*i#,.SSP.N=10 SSPCON2*i#,.S.N=10 )!ileCSSPCON2*i#,.S.ND0 M (oid i2cQ'3,#erQre,#3r#Q*i#C (oid D E SSPCON2*i#,.%S.N=10 )!ileCSSPCON2*i#,.S.ND0 M (oid i2cQ'3,#erQ,#o7Q*i# C (oid D E SSPCON2*i#,.P.N=10 )!ileCSSPCON2*i#,.P.ND0 SSPCON1*i#,.SSP.N=00 M (oid i2cQ'3,#erQ3cYC (oid D E SSPCON2*i#,.+C4/T=00 SSPCON2*i#,.+C4.N=10 )!ileCSSPCON2*i#,.+C4.ND0 M (oid i2cQ'3,#erQn3cYC (oid D E SSPCON2*i#,.+C4/T=10 SSPCON2*i#,.+C4.N=10 )!ileCSSPCON2*i#,.+C4.ND0 M c!3r i2cQ'3,#erQecrireC c!3r oc#e# D E SSP&GF=oc#e#0 )!ileCSSPST+T*i#,.%QBD0 re#urn SSPCON2*i#,.+C4ST+T0 M c!3r i2cQ'3,#erQlireC (oid D E SSPCON2*i#,.%C.N=10 )!ileCSSPCON2*i#,.%C.ND0 re#urn SSP&GF0 M

Ta6leau W, &onction #cC 4utomate de Caisse

12.2.4.

Le b's !M* et l(a'tomate de )om)e

Intressons nous maintenant au pro)ramme d'un automate de pompeB la pompe tant intrro) par l'automate de caisse' #'adresse de l'automate de pompe sur le bus IeC est code sur 1 bits et correspond au code A+CII du numero de la pompe' Ainsi l'adresse de la pompe n[1 sera "=*1 >ui se code bien sur 1 bits' #a pla)e d'adresse est de "=*1 A "=*8' #'adresse doit Mtre stocEe dans les bits de poids 2ort du re)istre correspondantB le bit " de ce re)istre restant A Cro' #es li)nes +C# et +%A sont connectes respectivement au= broches -C* et -C4B broches >ui doivent Mtre con2i)ures en entre' Fous utiliserons le mode de 2onctionnement standard et sans interruptions de bits de +tart et de +top' C'est l'automate de caisse >ui va venir demander A l'automate de pompe la somme A encaisser' #ors>ue

A4 $it de +tart

A" -6

%1

%4

% '''" $it de +top

Ac>uittement de l'esclave

Ac>uittement du rcpeteur si ce n'est pas la 2in du trans2ert

l'automate de caisse veut 2aire une demandeB il envoi sur le bus l'adresse de la pompe intrro)e ?mode lecture@' +i l'automate de pompe reconnaRt son adresse et le 2la) ++PIF se l3ve' +i les interruptions ont t autorise le pro)ramme passe alors A la routine associe' #'automate de pompe 2onctionnant en mode esclave il est donc ncessaire d'utiliser les interruptions car sinonB le pro)ramme va passer son temps A surveiller le bus et ne pourra pas e22ectuer la distribution de carburant' %'autant plus >ue la demande de l'automate de caisse peut intervenir n'importe >uand' ?Fous utiliserons les messa)es reproduits en tableau '@ M1 +I+

*8

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

Complter la 2onction d'initialisation ?ci;apr3s@ du module M++P pour l'utilisation en mode IeC dans le cas d'un automate de pompe' &=pli>uer vos initialisations' (oid i2cQ,l3(eQini#C(oidD E T%ISC*i#,.T%ISCI = ... T%ISC*i#,.T%ISC4 = ... SSPCON1 = ... SSPCON2=00 SSPST+T=00 SSPST+T*i#,.S:P = ... SSP+// = ... IP%1*i#,.SSPIP = 1 ... = ... ... = ... M

<<C4P=1 ...

&n utilisant la datasheet du picB >uels sont les bits A initialiser pour autoriser l'interruption du module IeC Y -aKouter ces initialisations A la 2onction . void i)c?slave?init5 void 7 /' &n re)ardant la datasheet on s'aperUoit >uand mode esclaveB il H'a * bits >ui permettent de connDitre l'tat de la communication IeC' ,out le reste tant )rer par le module M++P et donc transparent pour nous' Ceu= sont les bits -`6B %`A et $F du re)istre ++P+,A,' Zuelles sont les in2ormations >ue nous donnent chacun de ces bits Y #'tude des chrono)rammes pa)e 114 et 111 de la datasheet montrent les di22rentes con2i)urations possibles de ces bits lors d'une interruption du module IeC :

/?4 " 1 " 1 1

D?M " " 1 1 "

E& 1 1 " " "

Point de vue Ma8tre

Point de vue 0sclave

Mode lecture : le maRtre a )nr un Fin de l'envoiB ce cas n'est pas obli)er AC( si)ni2iant la 2in de la lecture' d'Mtre traiter dans le pro)ramme'

Ta6leau %, #cC1 esclave1 interru2tion MSSP , /iffrentes confi+urations 2ossi6les Complter le tableau 8' &n 2onction de la con2i)uration de . %`AB -`6B $F /B e=pli>uer ce >ue veut le mettre et ce >ue doit 2aire l'esclave' #ors d'une re>uMte de lectureB le module IeC esclave du PIC 2orce +C# A " pour empMcher >ue le maRtre reprenne le contrle du bus avant >u'il est pu prparer la donne A transmettre' 8ne 2ois >ue la donne A transmettre est prMtre il 2aut repositionner le bit C(P du re)istre ++PC<F1 A 1 a2in de relDcher l'horlo)e' <n parle de clocE stretch' Erratum Microchip Mode I C : /ans la datas3eet du P#C$%&'()*1 il est dit ue dans le cas d'une lecture du ma8tre1 la rce2tion de l'octet d'adresse ne 2ositionne 2as le 6it E&1 or ce n'est 2as le cas U Tenez com2te de cette erreur dans l'criture de votre routine d'interru2tion #cC. Int)rer les 2onctions IeC au pro)ramme de l'automate de pompe et tester son 2onctionnement' #e pro)ramme de l'automate de caisse vous est 2ournit' #iseC la partie suivante avant de tester votre pro)ramme sur la carte'

12.2.&.

*onne1ion !M* entre de'1 cartes P!*$%M 2 Pl's

Comme on peut le voir sur la 2i)ure !4B la partie phHsi>ue d'un bus IeC est ralise par trois li)nes lectri>ues : la masse ?5F%@B les donnes ?+%A@ et l'horlo)e ?+C#@' Comme les composants connects sont de tHpes collecteur ouvert

M1 +I+

*7

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*


ou drain ouvertB les li)nes +%A et +C# doivent Mtre maintenues A l'tat haut par une rsistance' Ces rsistances sont dites de . pull;up / et sont cacules en 2onction du nombre de composantsB de la lon)ueurs du bus ''' ?c2' documentation IeC de Phillips@' %ans le cas des cartes PIC%&M ! PlusB chacune d'entre elle a dKA ses rsistances puis>u'elles disposent d'un capteur de temprature et d'une &&P-<M IeC' %onc si on connecte directement deu= cartes ensembleB on se retrouve avec les deu= rsistances en parall3le sur cha>ue li)ne ?le courant est donc multipli par !@ et on a deu= 2ois le mMme composant sur le bus ?cela ne serait pas )rave si les composants n'avait pas la mMme adresseB hors les deu= cartes sont identi>ues@' Pour vos testsB vous deveC donc utiliser le microcontrleur pour le>uel le support a t modi2i : les broches -C*B -C4 et 5F% ont t remplaUes par des 2ils connects A une autre carte PIC%&M ! Plus'

PIC%&M ! Plus ; I

PIC

PIC%&M ! Plus ; II

PIC

5F%

!4#! 4

!4#! 4

,C14

,C14

5F%

-C*

-C4

-C*

-C4

+%A 5F% +C# \ T

+%A 5F% +C#

\ T

&i+ure )W, Connexion en #cC de deux cartes P#C/0M ) Plus /ans le 2ro+ramme de caisse1 si vous ta2er le caractre 't' dans 3y2erterminal1 la tem2erature sera affic3e en utilisant le ca2teur TCW' connect au 6us ; l'adresse *x'/!

-di)er un petit bilan sur l'ensemble des travau= prati>ues : Zu'est ce >ui vous a pluB dpluB ennuH Y Zu'aveC vous apprisB retenu Y k'a t'il des choses A amliorer pour les 2uturs tudiants Y '''

M1 +I+

4"

!"119!"1!

Travaux Prati ues de Microcontr!leur " P#C $%&'()*

Notes

M1 +I+

41

!"119!"1!

Travaux Prati ues de Microcontr!leur