Module Microcontroleurs

  • Upload
    simokas

  • View
    22

  • Download
    0

Embed Size (px)

DESCRIPTION

Module Microcontroleurs

Citation preview

Informatique industrielle (microcontrleurs)EL MORNAN

Page 1

1-Architecture interne dun systme microprocesseurL'architecture interne d'un ordinateur se compose essentiellement de trois blocs: le microprocesseur, la mmoire et les entres/sorties relies entre elles par trois bus de communication; le bus de donnes, le bus dadresses et le bus de commande.

Bus de donnes (8 lignes)MmoireEntres/SortiesUnit centrale detraitement microprocesseurBus d'adressesBus de contrle

Figure 0-1 Architecture interne dun ordinateur1.1.1 Le microprocesseurUn microprocesseur est l'implantation en un seul botier, en technologie LSI ou VLSI, d'une unit centrale de traitement de donnes CPU et dune unit arithmtique et logique ALU. Son principal travail est de fournir aux autres lments, qui lui sont raccords, la synchronisation ncessaire et fonctionnelle du traitement des informations qui lui sont achemines.1.1.2 La mmoireC'est la partie o l'on retrouve les programmes excutables et les donnes traiter. Cette section est subdivise en deux; d'une part, il y a la mmoire latente et d'autre part, la mmoire vive.Mmoire morteC'est la mmoire de lecture; elle contient le programme du systme. L'avantage de la ROM (Read Only Memory), cest d'tre permanente; son contenu ne disparat pas quand le systme n'est plus aliment. La ROM contient toujours un programme de chargement initial ou un moniteur pour permettre le fonctionnement du systme ds la mise sous tension. Dans un contexte de contrle de processus, presque tous les programmes rsideront en ROM car ils seront rarement changs et devront tre protgs des pannes d'alimentation.Mmoire viveC'est la mmoire de lecture et dcriture du systme ou RAM (Random Access Memory). Le contenu de ce type de mmoire est perdu lorsque l'on coupe l'alimentation. La mmoire vive (RAM) doit tre charge, avant utilisation, partir du clavier ou partir dune mmoire de masse comme, par exemple, une unit ruban magntique ou une unit disque.

Informatique industrielle (microcontrleurs)EL MORNAN

Page 2

1.2 Les entres/sorties

Les entres/sorties sont ncessaires pour que le microprocesseur communique avec le monde extrieur et, videmment, avec l'utilisateur. Il serait tout fait inutile de raliser un ordinateur sans qu'il y ait quelques entres et quelques sorties afin de communiquer avec l'extrieur.

1.3 Les bus de communication

videmment, pour que le systme fonctionne, il doit y avoir une communication entre le microprocesseur, la mmoire et les entres/sorties. Cette communication est ralise l'aide de trois bus qui regroupent les signaux, selon leur fonction.

1.3.1 Le bus de donnesC'est un bus bidirectionnel sur lequel transitent les donnes changes par les lments du systme.

1.3.2 Le bus dadressesIl s'agit d'un bus unidirectionnel, manant du microprocesseur et se propageant vers les dispositifs qu'il peut adresser. L'adresse qu'il porte permet d'atteindre une case mmoire ou un registre spcifique avec laquelle une opration est dsire.

1.3.3 Le bus de contrleC'est un groupe de lignes issues de ou allant vers le microprocesseur et reliant ce dernier d'autres dispositifs. Son rle est de vhiculer les signaux destins assurer la synchronisation et la commande de l'ensemble du systme. Par exemple, la ligne Reset et R/W (lecture/criture), les lignes d'interruptions et l'horloge appartiennent ce busIntroductionUn PIC est un microcontrleur, cest une unit de traitement de linformation de type microprocesseur laquelle on a ajout des priphriques internes permettant de raliser des montages sans ncessiter lajout de composants externes.Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), ou encore composant jeu dinstructions rduit. L'avantage est que plus on rduit le nombre dinstructions, plus facile et plus rapide en est le dcodage, et plus vite le composant fonctionne.La famille des PICs est subdivise en 3 grandes familles : La famille Base-Line, qui utilise des mots dinstructions (nous verrons ce que cest) de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876), et la famille High-End, qui utilise des mots de 16 bits

Nous nous limiterons dans ce document la famille Mid-Range et particulirement au PIC 16F84, sachant que si on a tout assimil, on pourra facilement passer une autre famille, et mme un autre microcontrleur.

Pour identifier un PIC, on utilise simplement son numro : Les 2 premiers chiffres indiquent la catgorie du PIC, 16 indique un PIC Mid-Range. Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner avec une plage de tension beaucoup plus tolrante. Vient en suite une ou deux lettres pour indiquer le type de mmoire programme :

C indique que la mmoire programme est une EPROM ou plus rarement une EEPROM CR pour indiquer une mmoire de type ROM F pour indiquer une mmoire de type FLASH. On trouve ensuite un nombre qui constitue la rfrence du PIC. On trouve ensuite un tiret suivi de deux chiffres indiquant la frquence dhorloge maximale que le PIC peut recevoir.

Donc, un 16F84-04 est un PIC Mid-Range donc la mmoire programme est de type FLASH de rfrence 84 et capable daccepter une frquence dhorloge de 4MHz.

Notez que les PICs sont des composants STATIQUES, cest dire que la frquence dhorloge peut tre abaisse jusque larrt complet sans perte de donnes et sans dysfonctionnement. Une version 10 peut donc toujours tre employe sans problme en lieu et place dune 04. Pas linverse, naturellement.

Pourquoi choisir un PIC ? Les performances sont identiques voir suprieurs ses concurrents Les prix sont les plus bas du march Les outils de dveloppement sont gratuits et tlchargeables sur le WEB Le jeu d'instruction rduit est souple, puissant et facile matriser Les versions avec mmoire flash prsentent une souplesse d'utilisation et des avantages pratiques indniables La communaut des utilisateurs des PICs est trs prsente sur le WEB. On trouve sur le net quasiment tout ce dont on a besoin, tutoriaux pour dmarrer, documents plus approfondis, schmas de programmeurs avec les logiciels qui vont avec, librairies de routines, forums de discussion . . .

Le PIC 16F84Les caractristiques principales du 16F84 sont : Une mmoire programme de type flash de 1K (1024) mots de 14 bits Une mmoire RAM constitue des registres du microcontrleur ainsi qu'une mmoire de donnes libre de 68 octets. Une mmoire EEPROM de 64 octets Deux ports d'entre sortie, un de 8 bits et un de 5 bits Un timer/Compteur Un chien de garde / compteur 4 sources d'interruption 4 types d'oscillateurs slectionnables Protection de code Fonctionnement en mode sleep pour rduction de la consommation Programmation par mode ICSP (In Circuit Serial Programming)

Aspect externe du 16F84

RA2 RA3RA4/T0CKIMCLR VSSRB0/INTRB1 RB2 RB3

RA1 RA0 OSC1 OSC2

1182173164PIC155 16F8X 14613712811910Vdd RB7 RB6 RB5 RB4

Fig. 0-1 : brochage du 16 F84

Les lments essentiels du 16F84

PORTB16 registres systme (SFR)68 octets de RAM utilisateurEEPROM de configuration, 14 bitsMmoire EEPROMMmoire programmede type Flash1024mots de 14 bitsPORTARA4Horlogesystme /4TOSERAM01TOCS10TMR00Prescaler11WDT0HorlogeWDTPSA

Fig. 0-2 : les lments essentiels du 16F84

La mmoire programme (flash)Cette mmoire de 1024 mots stocke le programme. L'emplacement de celui-ci peut se trouver n'importe quel endroit de la mmoire. Cependant il faut savoir que suite un RESET ou lors de la mise sous tension, le PIC commence l'excution l'adresse 0000H. De plus, lorsqu'il y a une interruption, le PIC va l'adresse 0004H. Il est donc conseill de placer le dbut du programme aprs l'adresse 0004H et de mettre un branchement au dbut du programme l'adresse 0000H et un branchement au dbut de la routine d'interruption s'il y en a une l'adresse 0004H.

La mmoire RAM - RrgistresLa mmoire RAM est constitue de deux parties :

Les registres SFR (Special Function Register), ce sont les registres de fonctionnement du PIC. L'ensemble de ces registres est souvent appel fichier des registres. Nous reviendrons sur ces registre un peu plus loin dans ce document.

Les registres GPR (General Propose Register) sont des positions mmoire que l'utilisateur peut utiliser pour stocker ses variables et ces donnes. On remarquera donc que, indpendamment de leur nature, les position de la RAM sont toujours appel registresLa mmoire RAM est organise en deux banks, pour accder un registre, il faut d'abord se placer dans le bank o il se trouve. Ceci est ralis en positionnant le bit 0 appels RP0 du registre STATUS.

bank 0bank 1

00INDFINDF80

01TMR0OPTION81

02PCLPCL82

03STATUSSTATUS83

04FSRFSR84

05PORTATRISA85

06PORTBTRISB86

0787

08EEDATAEECON188

09EEADREECON289

0APCLATHPCLATH8A

0BINTCONINTCON8B

0C

Mmoire

Maped in bank08C

..

.utilisateur.

..

2FAF

Tableau 0.1 : les registres et la RAM du 16F84Pour la mmoire utilisateur, l'utilisation des pages (Bank ) n'est pas ncessaire puisque le Bank 1 est "mapped" avec le Bank0. Cela signifie qu'crire une donne l'adresse 0CH ou l'adresse 8CH revient au mme.

LES PORTS D' E/S PORTA ET PORTBLe PORTA est un port de 5 bits (RA0 RA4). Chaque E/S est compatible TTL. La configuration de direction pour chaque BIT du port est dtermine avec le registre TRISA.La broche RA4 est une sortie drain ouvert. En entre, elle est multiplexe avec l'entre d'horloge du timer TMR0, elle est donc soit une entre du port A, soit l'entre horloge du Timer TMR0, le choix se fait l'aide du bit T0CS du registre OPTION. Le choix du front d'incrmentation du timer se fait par le bit T0SE de ce mme registre.

Le PORTB est un port bidirectionnel de 8 bits. Toutes les broches sont compatibles TTL. La configuration de direction se fait l'aide du registre TRISB.

Toutes les entres du port B peuvent tre pourvues de rsistances de tirage (weak pull up) valides par le bit RBPU du registre OPTION. Le pull up est dsactiv la mise sous tension et quand le E/S sont programmes en sorties

En entre, la ligne RB0 appele aussi INT peut dclencher linterruption externe INT. En entre, une quelconque des lignes RB4 RB7 peut dclencher l'interruption RBI.Le Timer TMR0Cest un compteur libre de 8 bits incrment en permanence par lhorloge interne Fosc/4/Prescaler ou par la broche RA4 du port A, dans ce cas, le bit TOSE du registre OPTION slectionne le front actif. Le Prescaler est gr par les bits PSA, PS0, PS1 et PS2 du registre OPTION.Toute criture dans le registre TMR0 inhibe lincrmentation du compteur TMR0 pendant deux cycles dhorloge.Le dbordement de TMR0 (FF 00) peut dclencher l'interruption T0IE.

Le Timer Watchdog WDT (Chien de garde)Cest un compteur incrment en permanence (mme si le C est en mode sleep) par une horloge RC intgre indpendante de l'horloge principale. Lorsquil ce compteur, arrive dborde, (WDT TimeOut), deux situations sont possibles :

Si le C est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permet dviter de rester plant en cas de blocage du microcontrleur par un processus indsirable non contrl. Pour viter un WDT time-out lors de l'excution d'un programme, on a deux possibilits : Inhiber le WDT d'une faon permanente en mettant 0 le bit WDTE du mot de configuration Remettre le WDT 0 priodiquement dans le programme l'aide de l'instruction CLRWDT pour viter qu'il ne dborde

Si le C est en mode SLEEP, il est alors "rveill" par WDT time-out et l'excution du programme continue normalement. Cette situation est souvent exploite pour raliser des temporisations

Dure du time-outLe Time Out vaut en principe 18 ms. Il est cependant rglable au moyen dun pr diviseur (Prescaler) programmable entre 1 et 128 l'aide des bits PSA, PS0, PS1 et PS2 du registre OPTION..

L'Horloge

L'horloge peut tre soit interne soit externe. L'horloge interne est constitue d'un oscillateur quartz ou d'un oscillateur RC.

Avec l'oscillateur Quartz, on peut avoir des frquences allant jusqu' 4, 10 ou20 MHz selon le type de C.Le filtre passe bas RS, C2 limite les harmoniques dus lcrtage et Rduit lamplitude de loscillation. (il n'est pas obligatoire)

Avec un relaxateur RC, Lorsque la tension aux bornes de Cext atteint le seuil haut du trigger de Schmitt, la sortie de celui-ci passe au niveau haut, le transistor MOS devient fortement conducteur et dcharge Cext. Quand la tension au point OSC1 atteint le seuil bas, le transistor MOS se bloque et Cext se (re)charge de nouveau avec la constante de temps RC.

Dans certains cas, une horloge externe au microcontrleur peut tre utilise pour synchroniser le PIC sur un processus particulier.La broche OSC2 est alors inutilise.

Organisation de la mmoire

Le PIC contient de la mmoire de programme et de la mmoire de donnes. La structure Harvard des PICs fournit un accs spar chacune. Ainsi, un accs aux deux est possible pendant le mme cycle machine.Mmoire de programmeC'est elle qui contient le programme excuter. Ce dernier est tlcharg par liaison srieLa Figure montre l'organisation de cette mmoire. Elle contient 1k "mots" de 14 bits dans le cas du PIC 16F84, mme si le compteur de programme (PC) de 13 bits peut en adresser 8k.

L'adresse 0000h contient le vecteur du reset, l'adresse 0004h l'unique vecteur d'interruption du PIC.

Registre fonction spciale (Special Function Register : SFR) :

Les registres fonction spciales sont utiliss par le microprocesseur et les priphriques internes. Ils sont stocks dans la RAM statique , ce qui limite 8 bits (et non 14 bits) ces registres. Les SFRs sont toujours stocks dansles 32 premiers octets de chaque page (bank). Registre W :Le registre W est le registre de travail sur 8 bits pour raliser des oprations arithmtiques ou logiques. Pointeur de pile S :Le pointeur de pile S est un ensemble de registre sur 13 bits. Sur les PICs, il y a 8 mots de 13 bits, ce qui limite le nombre maximal dinterruption ou dappel des sous-programmes. Le pointeur de pile S mmorise une adresse, cest dire le contenu du compteur programme. Attention, elle nest pas manipulable, exclusivement rserve au microprocesseur. Compteur programme ou PC :Le compteur programme, PC, indique ladresse du prochain code binaire 14 bits traiter. Le registre PC est constitu de deux registres , un registre PCL constitu de 8 bits et un registre PCLATH constitu de5 bits. Le registre PC fait donc 13 bits qui correspondent 8192 mots de 14 bits mais dans notre cas limit 4096 mots de 14 bits (voir doc du pic16F648A). Registre dtat (Status Register) :Le registre dtat est un registre sur 8 bits. Chaque bit une signification particulire :

Le bit C (Carry) : C est mis 1 lorsquune opration arithmtique gnre une retenue. Il est galement utilis comme indicateur derreur lors dune multiplication ou dune division, et sert lors de certaines oprations de dcalage ou rotation qui peuvent passer par son intermdiaire ou non. Le bit Z (Zro) : Z est mis 1 lorsque le rsultat de linstruction excut est nul. Les bits RP1 et RP0 : Bits indiquant sur quelle page (bank), le microprocesseur travail en adressage direct (seul 7 bits dadresses sont ncessaires). Le bit IRP : Bit indiquant sur quelle page (bank), le microprocesseur travail en adressage indirect (8 bitsdadresses sont ncessaires).

Les directives les plus utilises

LIST : permet de dfinir le type de PIC utilis, le format du fichier hex produire ainsi que d'autres paramtres. Exemple :LISTp=16f84 INCLUDE : permet d'insrer un fichier source INCLUDE"p16f84.inc"INCLUDE

CONFIG : permet de dfinir les fusibles de configuration (protection de code, type d'oscillateur, chien de garde et temporisation du dpart)

Page 10

CONFIGH'3FF9' CONFIGB'11111111111001'si le fichier p16f84.inc a t insr, on peut utiliser les constantes prdfinies : CONFIG_CP_OFF & _XT_OSC &_PWRTE_OFF& _WDT_OFF

Bits (ou "fusibles") de configurationOn se place dans le cadre de l'outil de dveloppement MPLAB de Microchip. La synthaxe utilise est alors :NomValeurs possiblesSignification

CP

Code Protection bit)

ONRend impossible la lecture de la mmoire de programme Flashet de l'EEPROM ( travers un programmateur) C'est une protection contre le piratage industriel.

OFFLecture possible

PWRTE

(Power-up Timer Enable bit)ONA la mise sous tension du C, lance une temporisation d'environ 72 ms durant laquelle est effectu un RESET interne.

Il est conseill d'utiliser cette configuration.

OFFTemporisation dsactive

WDT

(Watchdog Timer Enable bit)ONActive le watchdog (chien de garde)

OFFDsactive le watchdog

OSC

(Oscillator Selection bits)RCOscillateur de type Rsistance / Condensateur Remarques : conomique, rserv aux applications ola prcision de la base de temps n'est pas critique.

HSOscillateur quartz haute frquence (4 MHz, 20 MHz ...).

XTOscillateur quartz ou rsonateur cramique

LPOscillateur quartz de faible puissance (32,768 kHz ...)

Exemple de configuration

Dans le code source (fichier avec extension .asm), les fusibles de configuration sont indiqus au compilateur avec la directive suivante :

config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

Remarque

Les bits de configuration ne sont pas modifiables.

Dans l'exemple ci-dessus, pour activer le watchdog et utiliser un oscillateur de type RC, il faut modifier le code source, recompiler et reprogrammer le C ...

config _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC

EQU : permet de dfinir une constante ou une variable : XXEQU0x20XX peut tre soit une constante soit une variable, l'assembleur fait la correspondance correcte selon le contexte. Chaque fois que le compilateur rencontrera XX, il la remplacera soit par la constante 0x20 s'il s'agit d'un adressage immdiat, soit par le contenu de la mmoire 0x20 s'il s'agit d'un adressage directe

#DEFINE : dfinit un texte de substitution#DEFINEpos(x,y,z)(y-2z+x)chaque fois que le compilateur rencontrera le texte pos(x,y,z), il le remplacera par (y-2z+x)

ORG : dfinit la position dans la mmoire programme partir de laquelle seront inscrites les instructions suivantes.

CBLOCK/ENDC : dfinit un bloc de constantesCBLOCK0X0C; var1=0x0C, var2=0x0D, k=0x0Dvar1,var2 kENDC

DE : pour dclarer des donns qui seront stocke dans l'EEPROM de donneORG0x2100DE"Programmer un PIC, rien de plus simple", .70, 'Z'

DT : pour dclarer un tableau RETLWprocaddwfPCL,f; saut la position : (position suivante + W)

DT "Programmer un PIC",23,0x47 ; L'assembleur remplacera cette ligne par la suite d'instructions :

RTLW 'P' RTLW 'r'

RTLW 'o'

. . . RTLW 'C' RTLW 23RTLW 0x47

END : indique la fin du programmeFormat des nombresL'assembleur reconnat les nombres en dcimal, hexadcimal, binaire ou octal. Pour prciser la base il faut utiliser les prfixes prciss dans le tableau ci-dessous :

BasePrfixeExemple (36)DcimalD'nnn'.nnnD'36'.36HexadcimalH'nn' 0xnn nnhH'24' 0x2424hBinaireB'.'B'00100100'OctalO'nnn'O'44'On peut l'aide de la directive LIST ou RADIX dfinir un format par dfaut. Si par exemple on place une des instructions suivantes au dbut du programme, tous les nombres sans prfix seront interprts en dcimal :LIST r = dec

RADIX dec

(les radix valables sont dec, hex ou oct)

Structure d'un programme crit en assembleurUn programme crit en assembleur doit respecter une certaine syntaxe et un certain nombre de rgles afin qu'il soit facile lire et dbuguer :

Tout ce qui commence la premire colonne est considr comme une tiquette (label) permettant de faire des renvois et aussi des assignations de constantes et de variables.

tout ce qui suit un point virgule est considr comme un commentaire non interprt par le compilateur

Un programme apparat donc comme un texte crit sur 3 colonnes :- la colonne de gauche contient les tiquettes la colonne du milieu contient les instructions la colonne de droite contient des commentaires

Il existe diffrentes faons indiquant comment doit tre organis un programme. Voici un exemple d'organisation :

1) Quelques lignes de commentaire prcisant la fonction du programme,

2) Configuration, exemple :

LISTp=16f84;f=inhx16m INCLUDE"p16f84.inc" CONFIG H'3FF9'

3) Dfinition des constantes et des variables, exemple : ledequ0xequ 0x0Ccblock0x0D y,zu,v,w endc

4) mettre l'adresse 0000 (adresse du RESET) une instruction de branchement au dbut du programme principal :

org 0goto debut

5) mettre l'adresse 0004 (adresse d'interruption) une instruction de branchement au dbut de la routine d'interruption :

org 4call interruption

Si le programme est configur pour interdire les interruptions, on peut se passer de cette tape et mme de la prcdente et commencer le programme principal l'adresse 0000 sans mme l'utilisation de la directive ORG.

6) Ecrire les sous programmes et les sous programmes d'interruption

7) Ecrire le programme principal

8) terminer avec la directive END

LES INSTRUCTIONS DU 16F84Tous les PICs Mid-Range ont un jeu de 35 instructions. Chaque instruction est code sur un mot de 14 bits qui contient le code opration (OC) ainsi que l'oprande. A part les instructions de saut, toutes les instructions sont excutes en un cycle d'horloge. Sachant que lhorloge fournie au PIC est pr divise par 4 au niveau de celle-ci, si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000 cycles/seconde, cela nous donne une puissance de lordre de 1MIPS (1 Million d Instructions Par Seconde). Avec une horloge de 20MHz, on obtient une vitesse de traitement plus quhonorable.

1.3.4 Classement des instructions par nature

INSTRUCTIONS OPERANT SUR REGISTRE (direct)StatusCycles

ADDWFF,dW+F {W,F ? d}C,DC,Z1

ANDWFF,dW and F {W,F ? d}Z1

CLRFFClear FZ1

CLRWClear WZ1

CLRWDTClear Watchdog timerTO', PD'1

COMFF,dComplmente F {W,F ? d}Z1

DECFF,ddcrmente F {W,F ? d}Z1

DECFSZF,ddcrmente F {W,F ? d} skip if 01(2)

INCFF,dincrmente F {W,F ? d}Z1

INCFSZF,dincrmente F {W,F ? d} skip if 01(2)

IORWFF,dW or F {W,F ? d}Z1

MOVFF,dF {W,F ? d}Z1

MOVWFFW F1

RLFF,drotation gauche de F a travers C {W,F ? d}C1

RRFF,drotation droite de F a travers C {W,F ? d}1

SUBWFF,dF W {W,F ? d}C,DC,Z1

SWAPFF,dpermute les 2 quartets de F {W,F ? d}1

XORWFF,dW xor F {W,F ? d}Z1

INSTRUCTIONS OPERANT SUR BIT

BCFF,bRAZ du bit b du registre F1

BSFF,bRAU du bit b du registre F1

BTFSCF,bteste le bit b de F, si 0 saute une instruction1(2)

BTFSSF,bteste le bit b de F, si 1 saute une instruction1(2)

INSTRUCTIONS OPERANT SUR DONNEE (Immediat)

ADDLWKW + K WC,DC,Z1

ANDLWKW and K WZ1

IORLWKW or K WZ1

MOVLWKK W1

SUBLWKK W WC,DC,Z1

XORLWKW xor K WZ1

INSTRUCTIONS GENERALES

CALLLBranchement un sous programme de label L2

GOTOLbranchement la ligne de label L2

NOPNo operation1

RETURNretourne d'un sous programme2

RETFIERetour d'interruption2

RETLWKretourne d'un sous programme avec K dans W2

SLEEPse met en mode standbyTO', PD'1

L'adressage relatif

L'instruction addwf PCL , f permet de faire ce que l'on appelle un adressage relatif.

Cette technique est largement utilise pour la gestion des tableaux de donnes.Exemplebcd7seg

addwfPCL,1

retlw0x40; 0

retlw0x79; 1

retlw0x24; 2

retlw0x30; 3

retlw0x19; 4

retlw0x12; 5

retlw0x02; 6

retlw0x78; 7

retlw0x00; 8

retlw0x10; 9

LA PILE

La pile est une zone mmoire particulire.

Pour le PIC 16F84A, elle est constitue de 8 emplacements de 13 bits. La pile intervient dans le mcanisme interne des instructions : CALL RETURN RETLW RETFIE

En effet, c'est dans la pile qu'est mmorise l'adresse de retour d'une routine.

Quand intervient une instruction CALL ou une interruption, l'adresse de l'instruction suivante (qui se trouve dans le compteur de programme PC) est sauvegarde dans la pile.

Quand une instruction RETURN, RETLW ou RETFIE apparat, le C lit la dernire valeur sauvegarde dans la pile, libre l'emplacement et se branche l'adresse indique.

Avec le mcanisme de la pile, un sous-programme peut appeler un sous-programme (ou plutt un sous-sous-programme) : la pile rserve un autre emplacement..

La taille de la pile est limite 8 niveaux (pour le PIC 16F84A).

Informatique industrielle (microcontrleurs)EL MORNAN

S'il y a plus de 8 routines actives en mme temps, le contenu de la pile est cras et le programme ne fonctionne plus correctement.

Cela se traduit par un plantage (le C ne fait plus rien) ou bien par un comportement plus ou moins incohrent (le C fait des choses bizarres) ... problmes que l'on retrouve exactement sur des programmes plus complexes (Windows de Microsoft ...).

LES OUTILS DE DVELOPPEMENTLes tapes ncessaires permettant de voir un programme s'excuter sur un PIC sont :

Ecrire un programme en langage assembleur dans un fichier texte et le sauvegarder avec l'extension .asm Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le rsultat est un fichier avec l'extension .hex contenant une suite d'instruction comprhensible par le pic. Copier le fichier .hex dans la mmoire programme du PIC (mmoire flash) l'aide d'un programmateur adquat. On peut utiliser les programmateurs de Microchip ou tout autre programmateur achet ou ralis par soit mme. Mettre le PIC dans son montage final, mettre sous tension et admirer le travail.

Microchip propose gratuitement l'outil de dveloppement MPLAB qui regroupe l'diteur de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Le programmateur lui-mme, n'est malheureusement pas gratuit.Pour ce qui nous concerne, nous utiliseront MPLAB pour crire, compiler et ventuellement simuler nos programmes, ensuite nous utiliserons un programmateur pour copier les programme dans la mmoire flash du PIC.Les interruptionsUne interruption provoque larrt du programme en cours pour aller excuter une procdure d'interruption. A la fin de cette procdure, le microcontrleur reprend le programme lendroit o il stait arrt. Comme une interruption est un vnement asynchrone, il faut alors sauvegarder (empiler) le contexte dans lequel se trouvait le microcontrleur avant linterruption, afin quil puisse reprendre correctement la continuit du programme.

Page 18Le PIC16F84 possde 4 sources d'interruption. A chaque interruption sont associs deux bits. Un bit de validation et un drapeau. Le premier permet d'autoriser ou non l'interruption, le second permet au programmeur de savoir de quelle interruption il s'agit. Tous ces bits sont dans le registre INTCON part le drapeau EEIF de l'interruption EEI qui se trouve dans le registre EECON1.

Informatique industrielle (microcontrleurs)EL MORNAN

Droulement d'une interruptionLorsque l'vnement dclencheur d'une interruption intervient, alors son drapeau est positionn un. Comme au dbut de chaque instruction le processeur vrifie les drapeaux, il verra le drapeau lev et vrifie alors si l'interruption en question a t valide. Si c'est le cas, l'interruption est dclenche : le programme arrte ce qu'il est en train de faire et va excuter la procdure d'interruption qui se trouve l'adresse 4 : l'adresse contenue dans le PC (Program Counter) est sauvegarde dans la pile, puis remplace par la valeur 0004 (adresse de la routine d'interruption). Le bit GIE est plac "0" pour inhiber toutes les interruptions (afin qu'on ne soit pas drangs pendant l'excution de la procdure d'interruption). A la fin de la routine d'interruption (instruction RETFIE), le bit GIE est replac l'tat haut (autorisant ainsi un autre vnement) le contenu du PC est recharg partir de la pile et le programme est repris l o on l'a laiss.

Deux remarques importantes sont faire :

Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquent, il faut toujours le remettre "0" la fin de la routine d'interruption sinon l'interruption sera dclenche de nouveau juste aprs l'instruction RETFIE

Seul le PC est empil. Si cela est ncessaire, les registres W et STATUS doivent alors tre sauvegards en RAM puis restaurs la fin de la routine pour que le microcontrleur puisse reprendre normalement le cours du programme.

L'interruption INT (Entre RBO DU PORTB)Cette interruption est provoque par un changement d'tat sur l'entre RB0 du port B quand elle est programme en entre. Elle est gre par les bits : INTE : bit de validation (1=oui,0=non) INTF : drapeau INTEDG : front de dclenchement 1=montant, 0=descendant (registre OPTION)

L'interruption RBI (RB4 A RB7 DU PORTB)Cette interruption est provoque par un changement d'tat sur l'une des entres RB4 RB7 du port B, Le front n'a pas d'importance. Les bits associs sont RBIE (bit de validation) et RBIF (drapeau)

L'interruption TOI : Dbordement du Timer TMR0Cette interruption est provoque par le dbordement du timer TMR0. Les bits associs sont TOIE (bit de validation) et TOIF (drapeau)

L'interruption EEI : Fin d'criture dans l'EEPROMCette interruption est dclenche la fin d'une criture russie dans l'EEPROM. Les bits associs sont EEIE (validation) et EEIF (drapeau).

Page 19

Sauvegarde et restauration du contexte de travail

Il est important que le contexte de travail du programme principal soit le mme avant et aprs l'excution de la routine d'interruption.

Cela concerne le registre STATUS et l'accumulateur W qui doivent retrouver le mme contenu (en effet, ces deux registres sont souvent utiliss et donc modifis pendant la routine d'interruption).

Voici la procdure prconise par Microchip :

La routine d'interruption commence par la sauvegarde du registre W puis du registre STATUS :

org H'0004' ; vecteur d'interruption (directive du compilateur MPLAB)

movwf W_TEMP swapf STATUS, W movwf STATUS_TEMPLa routine d'interruption finit par la restauration du registre STATUS puis du registre W :

swapf STATUS_TEMP, W movwf STATUSswapf W_TEMP, f swapf W_TEMP, Wretfie ; retour d'interruption

Page 20

L'Initialisation : RESET

Le RESET peut avoir plusieurs causes : Mise sous tension Etat 0 sur broche MCLR Dbordement du timer du chien de garde.

Lorsque le RESET intervient, le C peut tre : En fonctionnement normal En mode SLEEP.

L'tat des registres la mise sous tension est donn par le tableau ci-dessous :

RegistrePower-on RESET MCLR

WDT on normal operationRveil d'un SLEEP

Pour le registre STATUS, voir tableau ci-dessous,

Cause du RESETEtat avant RESETTOPD

Mise sous tension11

0 sur MCLRNormalNANA

SleepNA0

Chien de gardeNormal01

Sleep00

Les registres de contrle du 16F84

Le registre OPTION ou OPTION_REG (81H)Le registre d'OPTION contient les bits de contrles du PRESCALER, de l'interruption externe INT, de l'horloge du timer TMR0 et du "tirage au plus" du PORT B.

bit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0

r/wr/wr/wr/wr/wr/wr/wr/w

RBPUINTEDGT0CST0SEPSAPS2PS1PS0

BIT 0,1 et 2: Slectionnent le ratio du PRESCALER.Ces trois bits dterminent le ratiodu prescaler. Les timers TMR0 et WDT s'incrmente au rythme de l'horloge divise par le prescaler

PS2PS1PS0ratio TMROratio WDT

00021

00142

01084

011168

1003216

1016432

11012864

111256128

Tableau : ratios du prescaler

BIT 3: PSA ( PreScaler Assignment).Si PSA=1 alors le prescaler est associ avec le WDT. Si PSA=0 alors le prescaler est associ avec le TIMER.

BIT 4: T0SE ( TMR0 Source Edge).Ce bit dtermine sur quel front l'entre RA4 incrmentera le registre TMR0 T0SE=1 Front descendant.T0SE=0 Front montant.

BIT 5: T0CS ( TMR0 Clock Source)Ce bit permet de slectionner l'horloge de TMR0. T0CS=1 slection de l'horloge externe RA4 (PORTA). T0CS=0 slection de l'horloge interne.

BIT 6: INTEDG ( INTerrupt EDGe)Si INTEDG=1 alors la broche RBO/INT gnre une interruption sur un front montant.Si INTEDG=0 alors la broche RBO/INT gnre une interruption sur un front descendant.

BIT 7: RBPU ( PORT B Pull-Up).RBPU=1 Le "tirage au plus" interne du PORT B est dsactiv. RBPU=0 Le "tirage au plus" interne du PORT B est activ.Le pull-up est dsactiv la mise sous tension et quand le port est configur en sortie

Le registre INTCON (0B,8BH)Le registre INTCON contient tous les bits de validation et les drapeaux des diffrentes interruptions.

bit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0

r/wr/wr/wr/wr/wr/wr/wr/w

GIEEEIETOIEINTERBIETOIFINTFRBIF

BIT 0: RBIF

Figure : registre INTCON

Drapeau de l'interruption RBI qui provient d'un changement d'tat d'un des bits RB4 RB7. RBIF= 1 : drapeau lev.RBIF= 0 : drapeau baiss.

BIT 1: INTF (INT interrupt Flag).Drapeau d'interruption INT qui provient d'un changement d'tat de l'entre RB0. RBIF=1 drapeau lev.RBIF=0 drapeau baiss.

BIT 2: TOIF ( TMRO Overflow Interrupt Flag).Drapeau de l'interruption TOI qui intervient au dbordement du timer TMR0 TOIF=1 drapeau lev.TOIF=0 drapeau baiss.

BIT 3: RBIE (RB Interrupt Enable).Bit de validation de l'interruption RBI qui provient d'un changement d'tat sur l'une des entre RB4 RB7 du port B.RBIE=1 : Autorise l'interruption. RBIE=0 : interdit l'interruption

BIT 4: INTE ( INT interrupt Enable).Bit de validation de l'interruption INT qui provient d'un changement d'tat sur l'entre RB0 du port B.INTE=1 : Valide l'interruption INT. INTE=0 : Interdit l'interruption INT.

BIT 5: TOIE (TMRO Overflow Interrupt Enable).Bit de validation de l'interruption TOI qui intervient au dbordement du timer TMR0 TOIE = 1 : Valide l'interruption.TOIE= 0 : Interdit l'interruption.

BIT 6 : EEIE (EE write Interrupt Enable).Bit de validation de l'interruption EEI qui intervient la fin d'une criture dans l'EEPROM EEIE=1 : Valide l'interruption.EEIE=0 : Interdit l'interruptionRemarque : le drapeau de cette interruption se trouve dans le registre EECON1

BIT 7: GIE (Global Interrupt Enable).Bit de validation globale de toutes les interruptions.GIE=1 : chaque interruption dpendent de son propre bit de validation. GIE=0 : Toutes les interruption sont interdite.Le registre STATUS (03,83H)Divis en plusieurs blocks, il contient:

Les indicateur sur le rsultat d'un calcul reprsent par les bits d'tat C, DC, et Z. Le status d'un RESET par l'intermdiaire des bits PD et TO. L'accs aux diffrents bancs de la mmoire par les bits IRP, RP1 et RP0

bit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0

r/wr/wrrr/wr/wr/wr/w

IRPRP1RP0TOPDZDCC

BIT0: C (Carry).Il passe "1" lorsque le rsultat d'une opration dpasse la valeur FF ou d'un rsultat ngatif.

BIT1: DC (Digital Carry).il se positionne "1" lorsque une retenue s'est produite entre les bit 3 et 4.

BIT2: Z (Zero).Quand il est "1", il indique que le rsultat de l'opration est nul.

BIT3: PD (Power-Down).PD=1 aprs un Power-up ou suite l'instruction CLRWDT. PD=0 lorsque l'instruction SLEEP est excute.

BIT4: TO (Time-Out).Il passe "1" aprs les instructions SLEEP et CLRWDT. Lorsque le WDT (chien de garde) dborde, ce bit passe "0".

BIT5 et 6: RP0 et RP1 (bits de slection de bancs).Avec ces 2 bits, on accde aux diffrents bancs de la mmoire.

RP1RP0BANCADRESSE

00000 7F

01180 FF

102100 17F

113180 1FF

BIT7: IRP.Ce bit n'est pas utilis avec le PIC16F84 et doit rester "0".

Le registre TMR0 (01H)Cest le registre d'accs au TIMER/COMPTEUR TMT0.

Les registres FSR et INDF (04,84H et 00,80H).Les registres FSR et INDF permettent l'adressage INDIRECTE. Dans le registre FSR, on inscrit l'adresse de la case mmoire laquelle on veut accder. Le registre INDF devient alors une image de cette case mmoire.En rsum, toute lecture/criture dans le registre INDF se fait dans la case mmoire pointe FSR (INDF = [FSR]).

Les registre EEADR(09H) et EEDATA (08H).Ces registres permettent d'accder la mmoire EEPROM avec un adressage indirect (exactement de la mme faon que FSR et INDF). Une lecture/criture dans de registre EEDATA se fait dans la position mmoire pointe par EEADR

Le registre EECON1 (88H)C'est un registre de contrle de la mmoire EEPROM. Seuls les 5 bits de poids faible sont utiliss.

bit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0

r/wr/wr/www

EEIFWRERRWRENWRRD

Bit 0: RD (ReaD EEPROM).Lorsque ce bit est mis "1", il indique au microcontrleur que l'on souhaite une lecture de l'EEPROM. Apres le cycle de lecture, il est mis automatiquement 0.

BIT 1: WR (WRite EEPROM).Lorsque ce bit est mis "1", il indique au microcontrleur que l'on souhaite une criture dans l'EEPROM. Apres le cycle d'criture, il est mis automatiquement 0.

Bit 2: WREN (EEPROM WRite ENABLE).C'est un bit de confirmation d'criture dans l'EEPROM. En effet, il ne suffit pas de dfinir un cycle d'criture uniquement avec le bit WR. Il faut imprativement valider le bit WREN (WREN=1) pour autoriser une criture.

Bit 3: WRERR (EEPROM WRite ERROR flag).Ce drapeau indique qu'une erreur c'est produite lors d'un cycle d'criture dans l'EEPROM. WRERR=1 : une opration d'criture a chou.WRERR=0 : le cycle d'criture c'est droul normalement.

Bit 4: EEIF ( EEPROM Interrupt Flag).Drapeau de l'interruption EEI qui intervient la fin d'un cycle d'criture russi dans l'EEPROM. EEIF=1 : drapeau lev.EEIF= 0 : drapeau baiss.

Le registre EECON2 (89H).Ce registre de 8 bits est exclusivement utilis pour les squences d'critures dans l'EEPROM. Il n'a pas d'adresse physique et la lecture de ce registre retourne une valeur nulle. C'est un registre de scurit dcriture en EEProm de donnes. Une donne ne peut tre crite quaprs avoir crit successivement 0x55 et 0xAA dans ce registre.

Le registre TRISA (85H).Le registre TRISA permet de configurer les E/S du PORTA en entre ou en sortie. Si le bit associ est "1", alors l'E/S est configure en ENTREE. Si le bit est "0", elle est configure en SORTIE.Apres un RESET, toutes les E/S sont configures en ENTREE.Comme le port A ne comporte que 5 bits, alors les bits 5, 6 et 7 ne sont pas significatifs

Le registre PORTA (05H).C'est le registre d'accs au port PORTA.

Le registre TRISB (86H)Le registre TRISB configure chaque E/S du PORTB en ENTREE ou en SORTIE Si le bit associ la porte est "1", alors elle sera configure en ENTREE. Si le bit est "0", elle sera en SORTIE. Apres un RESET, toutes les E/S sont configures en ENTREE.

Le registre PORTB (06H).C'est le registre d'accs du port B

Les registres PCL et PCLATH (02,82H et OA,8AH).Le PC est un registre de 13 bits :

PCHPCL

PCL (8 bits) est la partie basse de PC, il est accessible en lecture criture PCH (5 bits) est la partie haute de PC, il n'est pas accessible directement. On peut toutefois le modifier indirectement l'aide du registre PCLATH qui est une registre SFR accessible en lecture criture et o seuls 5 bits sont utiliss. Chaque fois qu'on crit dans PCL, PCLATH est recopi automatiquement dans PCH

PCHPCL

PCLATHEcriture dans PCL

Le PC contient une adresse code sur 13 bits :

Le registre PCL contient l'adresse de poids faible (8 bits) du PC Le registre PCLATH contient l'adresse de poids fort (5 bits) du PC.

Par exemple :

(PCL) = B'10110011'

(PCLATH) =B'---00010' (les bits 5 7 ne sont pas utiliss par le PIC 16F84A) (PC) = B'0001010110011' (adresse 0x2B3 en numration hexadcimale).La prochaine instruction que va excuter le PIC est donc situe l'adresse 0x2B3 de la mmoire de programme.

Le compteurLe PIC 16F84 est dot d'un compteur 8 bits. La Figure en donne l'organigramme

Le timer0 peut fonctionner suivant deux modes en fonction du bit T0CS (OPTION_REG.5). En mode timer (T0CS=0), le registre TMR0 est incrment chaque cycle machine (si le pr-diviseur n'est pas slectionn). En mode compteur (T0CS=1), le registre TMR0 est incrment sur chaque front montant ou chaque front descendant du signal reu sur la broche RA4/T0CKl en fonction du bit T0SE (OPTION_REG.4). Si T0SE=0, les fronts montants sont compts, T0SE=1, les fronts descendants sont compts. VII.3. Pr-diviseur En plus des deux horloges, un pr-diviseur, partag avec le chien de garde, est disponible. La priode de l'horloge d'entre est divise par une valeur comprise entre 2 et 256 suivant les bits PS2, PS1 et PS0 (respectivement OPTION_REG.2, .1 et .0) (Figure). Le bit PSA (OPTION_REG.3) permet de choisir entre la pr-division de timer0 (PSA=0) ou du chien de garde (PSA=1).

L'utilisation du mode SLEEPL'utilisation du mode SLEEP (Power-down mode) n'a d'intrt que dans les applications alimentes par piles ou batteries.

En effet, en mode SLEEP la consommation lectrique du C devient trs faible.

2- Mise en mode Sommeil

Le C est plac en mode SLEEP aprs une instruction SLEEP. L'instruction SLEEP provoque : La mise 0 du bit /PD du registre STATUS La mise 1 du bit /TO du registre STATUS L'inhibition de l'horloge (broches OSC1/CLKIN et OSC2/CLKOUT) ce qui a pourconsquence d'arrter le programme (d'o une consommation d'nergie lectrique rduite) Le mise 0 du timer du watchdog (chien de garde)

Attention : le timer du watchdog continue de fonctionner pendant le mode SLEEP (si le watchdog est actif).

3- Rveil (Power-up)

Le C se rveille, et reprend une activit normale, quand :

Il y a un RESET externe (niveau bas sur la broche /MCLR) : le programme est rinitialis (adresse H'0000' de la mmoire de programme).

La temporisation du watchdog est dpasse (si le watchdog est actif) : le programme reprend l'instruction qui suit l'instruction SLEEP. Une interruption RB0/INT, RB ou EEPROM survient (si ces interruptions sont autorises) si GIE = 0 : le programme reprend l'instruction qui suit l'instruction SLEEP si GIE = 1 : l'instruction qui suit l'instruction SLEEP est excute puis le programme saute la routine d'interruption (adresse H'0004' de la mmoire de programme)

Remarque : l'interruption TMR0 ne peut pas rveiller le C.

Le timer WATCHDOG (chien de garde)

Le timer watchdog (le watchdog pour simplifier) est un dispositif qui permet au C de reprendre la main en cas de plantage.

Nous entendons par plantage :

la consquence d'un bug (dans ce cas, c'est une erreur humaine et il faut corriger le programme) la consquence d'une perturbation lectrique qui fait sauter le programme une adresse quelconque et inattendue

Le plantage se traduit gnralement par un "blocage" : le C ne fait plus rien ou bien des choses tranges.

Il faut alors faire un RESET externe (en supposant qu'un bouton poussoir sur la broche /MCLR a t prvu cet effet) :

Autrement, il faut couper l'alimentation, attendre quelques secondes que les condensateurs de filtrage se dchargent, et remettre en route. Nous allons voir que le watchdog, par logiciel, permet de faire un RESET interne.

- Reset du watchdog

Pour utiliser le watchdog, il faut choisir de l'activer : cela se fait au niveau des bits de configuration.

Il faut ensuite placer (judicieusement) dans le programme l'instruction CLRWDT.

Cette instruction remet 0 le timer du watchdog.

Si le timer watchdog dpasse une certaine dure, cela provoque un RESET interne : le programme est rinitialis (adresse H'0000' de la mmoire de programme).

Cette dure dpend des bits PSA, PS2, PS1 et PS0 du registre OPTION_REG :

PSAPS2, PS1, PS0Taux de prdivision

du WatchdogDure indicative

0XXX118 ms

1000118 ms

1001236 ms

1010472 ms

10118144 ms

110016288 ms

110132576 ms

1110641,15 s

11111282,3 s

X = 0 ou 1

En effaant le watchdog intervalles rguliers (avec CLRWDT), le timer ne doit normalement jamais "dborder".

En cas de plantage, le timer dborde ce qui gnre un RESET, et le programme redmarre. Remarques :L'instruction CLRWDT :

met 1 le bit /TO du registre STATUS met 1 le bit /PD du registre STATUS

La mmoire EEPROM de donnesLa mmoire EEPROM (Electrical Erasable Programmable Read Only Memory), est constitue de 64 octets commenant l'adresse 0x2100 que l'on peut lire et crire depuis un programme. Ces octets sont conservs aprs une coupure de courant et sont trs utiles pour conserver des paramtres semi permanents.On y accde l'aide des registres EEADR et EEDATA : toute lecture criture dans le registre EEDATA se fait dans la position mmoire pointe par EEADR.Deux registres de contrle (EECON1 et EECON2) sont associs la mmoire EEMROM.

Page 30

La dure dcriture dun octet tant de lordre de 10 ms, la fin de chaque criture russie est annonc par le dclenchement de l'interruption EEI.

Procdure de lecture dans l'EEPROM de donnes

Placer ladresse de la donne lire dans EEADR Mettre le bit RD de EECON1 1 Lire le contenu du registre EEDATA

Procdure d'criture dans l'EEPROM de donnes

Placer ladresse de la donne crire dans EEADR Placer la donne crire dans EEDATA Placer 0x55dans EECON2 (processus de scurit pour viter une criture accidentelle) Placer 0xAA dans EECON2 (processus de scurit pour viter une criture accidentelle) Mettre le bit WR de EECON1 1 Attendre le drapeau EEIF avant de continuerLes tapes ncessaires pour programmer un pic :

Exemples en assembleur avec 16F84Calcul de la temporisationTemporisation prcise : utilisation du timer Temporisation non prcise : utilisation des bouclesA chaque fois que lon dsire fabriquer une temporisation, il faut calculer le temps machine ncessaire pour excuter cette temporisation afin de dterminer la valeur exacte de la temporisation.Sachant que lhorloge interne divise par quatre la frquence issue du quartz.

Prenons lexemple dune temporisation avec un quartz de 4Mhz : linstruction GOTO TEMPO dure 2 cycles , et linstruction DECFSZ 1cycle. Le compteur (retard) est initialis 255. Le PIC fera 255 fois la boucle de temporisation : la temporisation est donc 3*255=765s(3cycles *255*1s)Exemple dune temporisationde 0.2s;------------Dfinition des registres temporaires---------------

retard1EQU0x0C; le registre temporaire retard1 se trouve l' adresse 0C

retard2EQU0x0F; le registre temporaire retard2 se trouve l' adresse 0F

;------------Programme de temporisation ( 0.2 s )---------------MOVLW 0xFF; on met 255 dans le registre WMOVWF retard1; on charge retard1 avec 255 ( FFh contenu du registre W ) MOVWF retard2; on charge retard2 avec 255 ( FFh contenu du registre W ) tempoDECFSZ retard1,F; on dcrmente retard1 et on saute la prochaine instruction siGOTO tempo; le registre retard1 = 0 sinon retour tempoMOVLW 0xFF; on met 255 dans le registre WMOVWF retard1; on charge retard1 avec 255 ( FFh contenu du registre W ) DECFSZ retard2,F; on dcrmente retard1 et on saute la prochaine instruction si GOTO tempo; le registre retard1 = 0 sinon retour tempoRETURN; retour au programme principal aprs l 'instruction CALL

1.1 Exemple de temporisateur interne utilisant le TimerCLIGNOTER UNE LED, TEMPO AVEC TMR0

;************************** programme led_tmr.asm ***************************; Clignotement d'une LED relie n'importe quelle sortie du port B; la temporisation est ralise l'aide de l'interruption provoque; par le dbordement du timer TMR0. Ce dernier est cadenc par l'horloge; interne pr divise par 256 ce qui donne une priode d'interruption; de 255 x 255 = 65536 s. l'aide du compteur TIME, on fait changer; l'tat du port B tous les 8 cycles de TMR0 ce qui donne une temporisation; de l'ordre de 524288 s soit un peu plus d'une demi seconde;***************************************************************************

listp=16f84,f=inhx8m config _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC#include "p16f84.inc" TIMEequ0x10; ************************************ dmarrage sur REST org0gotostart; ************************************ vecteur d'interruption org4bcfINTCON,T0IF; baisser le drapeau lev par l'interruption decfszTIME,fretfiecomfPORTBmovlwd8; initialiser TIME movwfTIMEretfie

startbsfSTATUS,RP0; select bank1clrfTRISB; programme tous les bits du bort B en sortie movlwB'00000111'; timer cadenc par horloge internemovwfOPTION_REG; prescaler associ TMR0, ratio 255 bcfSTATUS,RP0; select bank0movlwB'10100000'; autorisation globale des interruptions; autorisation de l'interruption par TMR0movwfINTCONmovlwd8; initialise TIME pour le premier passage movwfTIMEmovlwB'00001111'; met n'importe quelle valeur dans PORB movwfPORTB

Loop

gotoLoop; le PIC reste plant ici et n'en sort que pour aller excuter une interruption end

Exemple d'application: Un compteur binaire

; Titre : Compteur binaire; PIC utilis : PIC 16 F 84; On ralise un compteur binaire sur les broches RB0 RB7 d' un PIC 16 F 84 le quartz utilis; est de 4 Mhz , on effectue une tempo environ gale 0.2 seconde.;------------Directive d' assemblage pour MPLAB---------------listp=16f84A#include p16f84A.inc

config H'3FF9';------------ Dfinition des constantes ---------------#define inter0 0 ; bouton marche;------------ Dfinition des registres temporaires ---------------retard1 EQU 0x0C ; le registre temporaire retard1 se trouve l' adresse 0C retard2 EQU 0x0D ; le registre temporaire retard2 se trouve l' adresse 0D memo EQU 0x0E ; le registre memo tampon se trouve l' adresse 0E;------------Init des ports A et B---------------ORG 0bsf STATUS,5; on met 1 le 5eme bit du registre status pour accder

; la 2eme page mmoire ( pour trisa et trisb )MOVLW B'00000000'; on met 00 dans le registre WMOVWF TRISB; on met 00 dans le port B il est programm en sortieMOVLW 0x1F; on met 1F dans le registre WMOVWF TRISA; on met 00 dans le port A il est programm en entrebcf STATUS,5; on remet 0 le 5eme bit du registre status pour accder; la 1ere page mmoire;------------Programme principal---------------Mainbtfss PORTA,inter0; interrupteur 0 ( marche ) appuy ? si oui on continu sinongoto Main; on va l' tiquette MainMOVLW 0xFF; on met 255 dans le registre WMOVWF retard1; on charge retard1 avec 255 ( FFh contenu du registre W )MOVLW 0xFF; on met 255 dans le registre WMOVWF retard2; on charge retard2 avec 255 ( FFh contenu du registre W )MOVF memo, W; on met memo dans W MOVWF PORTB; on met W sur le port B ( leds ) CALL tempo; on appel la temporisation MOVLW 0x01; on met 1 dans le registre W ADDWF memo, F; on additionne memo + 1GOTO Main; retour au dbut du programme;------------Programme de temporisation ( 0.2 s )---------------tempoDECFSZ retard1,F; on dcrmente retard1 et on saute la prochaine instruction siGOTO tempo; le registre retard1 = 0 sinon retour tempoMOVLW 0xFF; on met 255 dans le registre WMOVWF retard1; on charge retard1 avec 255 ( FFh contenu du registre W ) DECFSZ retard2,F; on dcrmente retard1 et on saute la prochaine instruction si GOTO tempo; le registre retard1 = 0 sinon retour tempo

RETURN; retour au programme principal aprs l 'instruction CALLEND; fin du programmeExemple d'application: Les feux tricolores

; Titre : Feux tricolores PIC utilis : PIC 16 F 84; On ralise des feux tricolores sur les broches RB0 RB5 d' un PIC 16 C 84; le quartz est de 4 Mhz , on effectue une tempo longue environ gale 4 secondes et; une tempo courte environ gale 1.5 secondes.; un bouton marche sur le port A permet de lancer l' application; RB0=rouge1 RB1=orange1 RB2=vert1; RB3=rouge2 RB4=orange2 RB5=vert2;------------Directive d' assemblage pour PLAB---------------listp=16f84A#include p16f84A.inc

config H'3FF9'

;------------ Dfinition des constantes ---------------#define inter0 0 ; bouton marche#define inter1 1 ; bouton clignotement orange;------------ Dfinition des registres temporaires ---------------retard1 EQU 0x0C ; le registre temporaire retard1 se trouve l' adresse 0C retard2 EQU 0x0F ; le registre temporaire retard2 se trouve l' adresse 0F retard3 EQU 0x10 ; le registre temporaire retard3 se trouve l' adresse 10;------------Init des ports A et B---------------ORG 0bsf STATUS,5; on met 1 le 5eme bit du registre status pour accder; la 2eme page mmoire ( pour trisa et trisb )MOVLW 0x00; on met 00 dans le registre WMOVWF TRISB; on met 00 dans le port B il est programm en sortieMOVLW 0x1F; on met 1F dans le registre WMOVWF TRISA; on met 1F dans le port A il est programm en entrebcf STATUS,5; on remet 0 le 5eme bit du registre status pour accder; la 1eme page mmoire;------------ Init des feux ROUGE1 et ROUGE2 ---------------MOVLW B'00001001'; on met 0C dans le registre W ( Rouge1 et Rouge2 )MOVWF PORTB; on met W sur le port B ( led );-------------------- Programme principal ----------------------debutMOVLW B'00001001'; on met 0C dans le registre W ( Rouge1 et Rouge2 )MOVWF PORTB; on met W sur le port B ( led )btfss PORTA,inter0; interrupteur 0 ( marche ) appuy ? si oui on continu sinon;va debutgoto debutret_clibtfsc PORTA,inter1; interrupteur 1 ( clignotant ) appuy ? si oui on

;va clignote

goto clignoteMOVLW B'00001001'; on met 0C dans le registre W ( Rouge1 et Rouge2 )MOVWF PORTB; on met W sur le port B ( led );--------------- Chargement de la temporisation ---------------------CALL tempo; on appel la temporisation 1 ( longue )MOVLW B'00001100'; on met 0C dans le registre W ( Vert1 et Rouge2 )MOVWF PORTB; on met W sur le port B ( led )CALL tempo; on appel la temporisation 1 ( longue )MOVLW B'00001010'; on met 0A dans le registre W ( Orange1 et Rouge2 )MOVWF PORTB; on met W sur le port B ( led )CALL tempo2; on appel la temporisation courteMOVLW B'00001001'; on met 0C dans le registre W ( Rouge1 et Rouge2 )MOVWF PORTB; on met W sur le port B ( led )CALL tempo2; on appel la temporisation courteMOVLW B'00100001'; on met 24 dans le registre W ( Rouge1 et Vert2 )MOVWF PORTB; on met W sur le port B ( led )CALL tempo; on appel la temporisation longueMOVLW B'00010001'; on met 14 dans le registre W ( Rouge1 et Orange2 )MOVWF PORTB; on met W sur le port B ( led )CALL tempo2; on appel la temporisation courteGOTO debut; retour au dbut du programme;------------Programme de temporisation longue---------------tempoMOVLW 0xFF; on met ff dans le registre W MOVWF retard1; on met W dans le registre retard1 MOVWF retard2; on met W dans le registre retard2 MOVLW 0x12; on met 12 dans le registre W MOVWF retard3; on met W dans le registre retard3

attenteDECFSZ retard1,F; on dcrmente retard1 et on saute la prochaine instruction siGOTO attente; le registre retard1 = 0 sinon retour attente

movlw 0xFF; on recharge retard1movwf retard1DECFSZ retard2,F; on dcrmente retard2 et on saute la prochaine instruction siGOTO attente; le registre retard2 = 0 sinon retour attentemovlw 0xFF; on recharge retard2movwf retard2DECFSZ retard3,F; on dcrmente retard3 et on saute la prochaine instruction siGOTO attente; le registre retard3 = 0 sinon retour attenteRETURN; retour au programme principal aprs l 'instruction CALL

;------------Programme de temporisation courte---------------tempo2MOVLW 0xFF; on met ff dans le registre W MOVWF retard1; on met W dans le registre retard1 MOVWF retard2; on met W dans le registre retard2 MOVLW 0x07; on met 7 dans le registre W MOVWF retard3; on met W dans le registre retard3 attente2DECFSZ retard1,F; on dcrmente retard1 et on saute la prochaine instruction siGOTO attente2; le registre retard1 = 0 sinon retour attente2 movlw 0xFF; on recharge retard1movwf retard1DECFSZ retard2,F; on dcrmente retard2 et on saute la prochaine instruction siGOTO attente2; le registre retard2 = 0 sinon retour attente2movlw 0xFF; on recharge retard2

movwf retard2DECFSZ retard3,F; on dcrmente retard3 et on saute la prochaine instruction siGOTO attente2; le registre retard3 = 0 sinon retour attente2RETURNclignoteMOVLW B'00010010'; on met 12 dans le registre W ( Orange1 et Orange2 )MOVWF PORTB; on met W sur le port B ( led )CALL tempo2; on appel la temporisation courteMOVLW B'00000000'; on met 00 dans le registre W ( aucune led )MOVWF PORTB; on met W sur le port B ( led ) CALL tempo2; on appel la temporisation courte GOTO ret_cliEND

UTILISATION DE LINTERRUPTION RB0;-----Application avec un PIC : Gestion d'une interruption sur RB0 ------; Titre : Interruption sur RB0; PIC utilis : PIC 16 F 84; Ce montage d'initiation base de PIC 16F84 permet de tester le droulement d 'une; interruption. Lorsque la broche RB0 passe de 0 1 ( front montant ) alors on gnre; une IT , on allume une led ( RB7 ) et aprs une temporisation on teint celle-ci.; Une prochaine action sur RB0 redclenche l ' IT

;------------Directive d' assemblage pour PLAB--- - list p=16f84A#include p16f84A.inc config H'3FF9';**** Le programme pricipal commence l ' tiquette init ****** ORG 0

Page 40

goto init

;**** Le programme d' interruption se dclenche lorsque l' entre RB0 passe de 0 1 *** ORG 4;*********** Programme d 'interruption ********************** bsf PORTB,7; on allume la led connecte sur rb7;------------ temporisation---------------

tempo2MOVLW 0xFF; on met ff dans le registre W MOVWF retard1; on met W dans le registre retard1 MOVWF retard2; on met W dans le registre retard2 MOVLW d'52'; on met 7 dans le registre W MOVWF retard3; on met W dans le registre retard3

attente2

DECFSZ retard1,F; on dcrmente retard1 et on saute la prochaine instruction si GOTO attente2; le registre retard1 = 0 sinon retour tempo

movlw 0xFF; on recharge retard1 movwf retard1

DECFSZ retard2,F; on dcrmente retard2 et on saute la prochaine instruction si GOTO attente2; le registre retard2 = 0 sinon retour tempo

movlw 0xFF; on recharge retard2 movwf retard2

DECFSZ retard3,F; on dcrmente retard3 et on saute la prochaine instruction si GOTO attente2; le registre retard3 = 0 sinon retour tempo

bcf PORTB,7; on teint la led connecte sur rb7bcf INTCON,INTF; on remet 0 le bit du registre d' IT qui est pass 1

RETFIE; retour d 'interruption;************* Programme d' INIT ************************** initretard1EQU0x0C; le registre temporaire retard1 se trouve l' adresse 0C retard2EQU0x0F; le registre temporaire retard2 se trouve l' adresse 0F retard3EQU0x0E; le registre temporaire retard3 se trouve l' adresse 0F bsf STATUS,5; on met 1 le 5eme bit du registre status pour accder; la 2eme page mmoire ( pour configurer trisa et trisb; -> broches en entre ou en sortie )MOVLW B'00000001'; rb0, en entre ( rb0 sera la broche utilise; pour l ' interruption )MOVWF TRISBbsf OPTION_REG,INTEDG; Le passage de 0 1 sur RB0 provoque une IT; sur un front montant ( choix du front sur RB0 )bcf STATUS,5; on remet 0 le 5eme bit du registre status pour accder; la 1ere page mmoirebsf INTCON,INTE; autorise l ' IT sur RB0 bsf INTCON,GIE; autorise les Interruptions clrf PORTB

;************ Programme principal en rebouclage *********************

debut RB0

sleep; mise en sommeil du PIC conso : 3.2 mA, attente impulsion sur GOTO debut

;*********** Fin du programme *********** end

COMMANDE D'UN AFFICHEUR 7 SEGMENT PAR LE PORT B

;*********************************** programme 7seg_bcl.asm ******************; Afficher un compteur 4 bits sur un afficheur 7 segment Anode Commune; connect au port B. Le tableau de dcodage 7 segments est situ dans; la mmoire programme.; La temporisation d'affichage est ralise par boucle;*************************************************************************************

listp=16f84,f=inhx8m include config _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC

C1equ0x0C; compteur en position 0x0C de la RAM

T1equ0x0D; T1,T2,T3 = compteurs temporisateur

T2equ0x0E

T3equ0x0F

; ************************************ dmarrage sur REST org0x00gotomain

; ************************************ vecteur d'interruption

org0x04; normalement on ne devrait jamais passer par-l

clrfINTCON; aucune interruption autorise

retfie

; *************************** Codes 7 segments anode commune bcd7seg

addwfPCL,1

retlw0x40; 0

retlw0x79; 1

retlw0x24; 2

retlw0x30; 3

retlw0x19; 4

retlw0x12; 5

retlw0x02; 6

retlw0x78; 7

retlw0x00; 8

retlw0x10; 9

retlw0x08; A

retlw0x03; B

retlw0x46; C

retlw0x21; D

retlw0x06; E

retlw0x0E; F

; ******************************** Routine de temporisation

tempomovwfT3

bcltmpdecfszT1,f

gotobcltmp

decfszT2,fgotobcltmpdecfszT3,fgotobcltmpreturn

; *************************************** Programme principal mainbsfSTATUS,RP0; passage en bank 1 des registresclrfTRISB; port B en sortie bcfSTATUS,RP0; passage en bank 0loopmovfC1,w andlw0x0Fcallbcd7segmovwfPORTB; affichagemovlw4; 0.59 s calltempoincfC1,1gotoloop end

afbgecdpa b c d e f g PRb0 RB1 RB2 RB3 RB4 RB5 RB6 RB75VPIC16f84

La compilation se fait a laide du logiciel MPLAB de Microchip

Simulation dun PIC sous ProteusPour faire cela il est ncessaire davoir :-> Proteus qui contient le module de simulation des pic (Module VSM)-> Un schma dont tout les composants sont simulables (ou ceux qui le sont pas : exclus de la simulation :exemple les borniers )-> Un fichier excutable (code machine) FICHIER.HEX, OU MIEUX un code machine + informations de Dbugage :FICHIER.COF1. Prsence Module VSM

Le module VSM effectue la simulation du microprocesseur partir de votre code source. Vrifier la prsence du module VSM adapt au microprocesseur simuler sous Proteus.-> Lancer Licence Manager :

VSL pour PIC 16 XXXX dans lexemple.2. Fichier simulerEditer les proprits du Microprocesseur puis slectionner le fichier source, on peut utiliser :VERSION 1 : Soit le fichier_source.HEX

VERSION 2 : Soit le fichier_source.COF (contenant le fichier source et les directives de dsassemblage)Il est prfrable dutiliser plutt ce fichier. Ce qui permet des mises au point plus efficace (mode pas pas)

Pour lancer la simulation il suffit de cliquer sur licone PLAY verte en bas de page

Pour lancer la simulation en mode pas pas (et dbogage) :

*En excutant la simulation en mode pas pas , vous pouvez ensuite excuter le programme par pas, mettredes points darrt dans le programme, voir ltat des registres, etc...

Circuits dinterfaces avec le microcontrleur1 Utilisation des leds

2-AFFICHEUR LCD2-1 Prsentation :Lafficheur LCD, autrement appel un afficheur cristaux liquide. Il consomme relativement de 1 5 mA et constitu de deux lames de verre, distante de 20 m environ, sur lesquelles sont dessines les mers nantisses formant les caractres. Lapplication entre les deux faces dune tension alternative basse frquence de quelques volts (35V) le rend absorbant .Un afficheur cristaux liquide ne peut tre utilis quavec un bon clairage ambiant .Son lisibilit augmente avec lclairage2-2 Principe de fonctionnement :on utilise le mode 4 bits de lafficheur LCD. Dans ce mode, seul les 4 bits de poids fort (D4 D7) de lafficheur sont utiliss pour transmettre les donnes et les lires. Les 4bits de poids faible (D0 D3) sont alors connects la masse, on a donc besoin hors alimentation de sept fils pour commander lafficheur. Les donnes sont crites squentiellement les quatre bits de poids fort suivi des quatre bits de poids faible. Une impulsion positive dau moins 450ns doit tre envoye

sur la ligne E pour valider chaque demi -octet. On peut aprs chaque action sur lafficheur vrifier que celui-ci est en mesure de traiter linformation suivante .Pour cela, il faut demander une lecture en mode commande et tester le flag Busy BT. Lorsque BF=0, lafficheur est prs recevoir une nouvelle commande ou donne.2-3 Prsentation dun cran LCD :Quil soit une ou deux lignes, un afficheur LCD se prsente sous la forme suivante :

Au-dessus de lcran cristaux liquides proprement dit, on trouve une srie de 14 broches aux rles Suivantes : Broche 1 : masse ; Broche 2 : Vcc ; Broche 3 : luminosit ; Broche 5, R/W : slection du mode lecture ou criture :

0criture

1lecture

Broche 6, E : Commande des oprations dcriture ou de lecture ;Broche 7 14 : utilises pour le transfert des donnes ou des instructions. Le transfert peut se faire sur 8 bits, toutes les broches sont alors utilises, ou sur 4 bits, dans ce cas, seules les broches 11 14 sont utilises.

Page 50

U1OSC1/CLKINOSC2/CLKOUT1MCLR/Vpp/THV234567RA0/AN0RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/T0CKI RB0/INTRB1 RB2 RB3/PGMRB4 RB5 RB6/PGC RB7/PGD3334353637383940RWRS ELCDLM032LRA5/AN4/SS8 RE0/AN5/RDRE1/AN6/WRRE2/AN7/CSRC0/T1OSO/T1CKIRC1/T1OSI/CCP2RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT1516171823242526RD0/PSP019RD1/PSP120RD2/PSP221RD3/PSP322RD4/PSP427RD5/PSP528RD6/PSP629RD7/PSP730PIC16F877VDD=VCC VSS=GNDMontages de lafficheur LCD avec le PIC

3-1 Prsentation :

3- Le clavier

123GND VCC VEEVSS VDD VEE456RS RW ERS RW E7891011121314D0 D1 D2 D3 D4 D5 D6 D7Le clavier est le priphrique le plus commode pour saisir du texte, mais dans notre carte on va utiliser un clavier alphanumrique 16 touches matrices pour saisir des numros et un peut dalphabets, pour connecter le clavier au microcontrleur on est besoin dun codeur de clavier 74LS922 pour prserver les ressources du microcontrleur.

3-2 Principe de fonctionnement :

Le clavier se compose de 16 touches reparties sur une matrice de 4 lignes (chaque ligne contient 4 touches) 4 pistes sont disposes horizontalement (elles correspondant aux 4 lignes de touches) et 4 autres pistes sont disposes verticalement (elles correspondant aux 4 colonnes de touches). Chaque touche agit comme un bouton poussoir qui tablit le contact entre une des 4 pistes horizontales et une des 4 pistes verticales. Chaque touche est un interrupteur, normalement en position ouverte .Lorsquune touche est appuye un signal lectrique est envoy vers le codeur, circuit lectronique trs simple qui associe chaque signal un code (par exemple le code ascii de la touche). Ce signal peut tre utilis pour envoyer une interruption au processeur fin quil traite linformation. Les codeurs rellement utiliss assurent de fonctions supplmentaires comme le dcodage automatique des touches appuyes longtemps.

4 Circuit ULN2003LULN est un composant qui pour rle de commander les relais. Il comporte deux transistors, deux diodes et deux rsistances. Le fait quil renferme tous les composants lui permet davoir une longue dure de vie et de minimiser les pertes de courant.LULN est capable d'couler un courant max de 500mA par transistor et supporte une tension max de 50V. Ainsi vous pouvez connecter directement la majorit des relais sans problme

Figure : Structure interne de lULN2003

Circuit ULN2803L'ULN2803 est dcrit comme "un conducteur 8 lignes". Cela signifie qu'il contient le circuit pour contrler huit lignes de productions individuelles, chaque acte indpendamment des autres.

5-1. Moteur pas pas :

5-Les moteurs

Moteur pas pas5-2 Prsentation :Le moteur pas pas est un moteur qui tourne en fonction des impulsions lectriques reu dans ses bobinages. Langle minimal entre deux modifications des impulsions lectrique sappelle un pas .On caractrise un moteur par le nombre de pas par tour.5-3 Principe de fonctionnement :Pour identifier le brochage du moteur ,un simple ohmmtre(calibre 100 ou 200ohms)permet de dterminer dune part les trois fils appartenant chaque bobinage [P1-com1-P1\]et[P2-com2- P2\] ,dautre part le point milieu dun bobinage donne(si la rsistance entre le commun et une phase vaut alors que celle entre les deux phase vaut2R) .les deux les deux bobinages sont interchangeable, ainsi que les deux phases extrmes dun mme bobinage (P1etP1\) ; signalons que cette dernire manipulation entrane un changement du sens de rotation. Un cycle tant ralis en quatre tapes successives, la squence ment est donc effectu par un compteur binaire quatre sorties, lesquelles prsenteront donc cinq combinaisons diffrentes (0000, 0001, 0010, 0100, 1000).Les tapes dfilent au rythme de lhorloge intgre au compteur.5-4 Connexion du moteur pas pas sur la carte :

Le moteur pas pas+ULN2003A sont connects aux lignes RD0 RD3 du microcontrleur.5-5 Moteur courant continue :Le moteur courant continue est une machine lectrique tournante constitu de deux parties principales : le stator (la partie fixe) et le rotor (la partie mobile).

Moteur courant continue5-6 re on utiliser deux relaies pour changer le sens deConnexion du moteur

Dans ce figurotation du moteur courantcontinue. Les deux pins MCC1 et MCC2 relier avec les pins RE0 etRE1 du microcontrleur.

Lorsqu'on veut commander le sens de rotation dun moteur ( courant continu ou pas pas) on est souvent oblig d'inverser la polarit. De plus il est gnralement prfrable de pouvoir faire varier la vitesse du moteur. La solution est dutiliser le pont en H.

Figure : Principe du pont en HEn regardant les schmas, on voit le sens de rotation du moteur : sur le schma a ; le moteur est l'arrt (on devrait mme dire qu'il est frein : en effet court-circuiter les deux ples d'un moteur revient le freiner).

Sur le schma b ; il tourne dans le sens inverse du schma c, et enfin sur le schma d ; il est frein. Et bien voici la base du pont en H, toute l'ide rside dans ce schma. Bien sr, pour l'implmenter, il va nous falloir remplacer les interrupteurs par des transistors.

IN1IN2ETAT MOTEUR

00ARRET

01SENS 1

10SENS 2

11ARRET

Figure : Tableau des diffrentes squences

Lorsqu'on arrte le moteur, et qu'il continue tourner avec l'inertie, il se comporte comme une gnratrice. Pour viter d'avoir des courants dans les transistors on monte des diodes de roues libres.

Figure: Schma dun pont en H Commande de 2moteurs DC avec L293D

6-Les relaisLes relais sont pilots via un transistor de commande, une diode de roue libre est monte aux bornes du relais pour la protection du transistor

Montage du relais

7 Isolation laide dun opto- triacExemple de commande dune lampe.

8 Isolation galvanique laide dun opto_transistor

Page 60

9 Affichage 7sgments multiplex

10-Les touches de commande

SW O12SW 112SW 212R10 R9R82.2k2.2k2.2kSi on dispose de trois boutons poussoirs (SW0, SW1 et SW2)qui sont relis trois entres numriques du microcontrleur en les reliant respectivement aux rsistances (R10 ,R9 et R8) de rappel la source Vcc de moyenne valeurs (2.2 K) pour ne pas consommer plus de lnergie .

RE0RE1 RE2VCC

Montage des boutons poussoirs

11-Communication srie avec RS232Le circuit adaptateur de niveau de tension TTL :RS232 permet alors de relier un interface (exemple le tlphone au port srie dun PC) .

Prsentation :Les liaisons sries permettant la communication entre deux systmes numriques en limitant le nombre de Fils de transmission.. DCD (Data Carrier Detecte ) : Cette ligne est une entre active ltat haute. Elle signal lordinateur quune liaison a t tablie avec un correspondant. RX( Reciver Data) : Cette ligne est une entre.Cest ici que transitent les informations du correspondant vers lordinateur. TX (Transmit Data ) : cette ligne est une sortie. Elle permet la vhicule des donnes de lordinateur vers le correspondant. DTR (Data Terminal Ready ) :Cette ligne est une sortie active ltat haut Elle permet lordinateur de signaler au correspondant que le port srie t libr et quil peut tre utilis sil le souhaite. GND (GrouND) : cest la masse. DSR (Data Set Read) : Cette ligne est une entre active ltat haut. Elle permet au correspondant de signaler quune donne est prte. RTS (Request To Send ) : cette ligne est une sortie active ltat haut. Elle indique au correspondant que lordinateur veut lui transmettre des donnes.. CTS (Clear To Send ) : Cette ligne est une entre active ltat haut.Elle indique lordinateur que le correspondant est prt recevoir des donns.

RI( RING Indicator) :Cette ligne est une entre active ltat haut.Elle permet lordinateur de savoir si un correspondant veut initier une communication avec lui.

Fonctionnement :Pour pouvoir dialoguer avec le PC, le microcontrleur utilise son module USART signifie (Universal Synchronous Asynchronous Reciever Transmitter ).Cest donc un module qui permet denvoyer et de recevoir des donnes en mode srie, soit de faon synchrone, soit asynchrone. Le module USART de notre PIC gre uniquement deux pins, savoir RC6/TX/CK et RC7/RX/DT.Une liaison srie synchrone ncessite une connexion ddie lhorloge, donc il reste une seule ligne pour transmettre les donnes. Alors quen mode asynchrone on na pas besoin dune ligne dhorloge, il nous restera alors deux lignes pour communiquer, chacune tant ddie un sens de transfert. Nous pourrons donc envoyer et recevoir des donnes en mme temps.Les liaisons RS 232 sont des liaisons asynchrones trs utilises en informatique. Elle ncessite que lmetteur et le rcepteur soit inform de la vitesse choisie de transfert.Puisque le rcepteur connat la vitesse du transfert il peut se passer de signal de synchronisation.Trois lignes sont ncessaires cette liaison. TX : transmission de donns.RX:rcepteur de donn.GND :masse

Grce cette liaison la carte peut servir dinterface entre un PC et un montage extrieure afin dadapter les signaux TTL du microcontrleur au standard RS232Un MAX232 est monte de faucon classique, les lignes RX, TX et la masse sont disponibles sur un connecteur DB9 mle qui permet ainsi de relier la carte au PC avec un simple cble srie.

11-2 MAX 232Le circuit intgr MAX232 qui cble avec ces condensateurs au tantale de 1F , permet dadapter les niveaux de tension entre le PC et le tlphone comme certains PC ne disposent pas dune puissance suffisante sur leur port srie, cest le cas notamment des portable , il est possible de connecter une alimentation externe dlivrant une tension de 12V

12 BUS I2CLe bus I2C (inter integrated circuit ce qui donne IIC et par contraction I2C), a t propos initialement par Philips mais adopt de nos jours par des trs fabricants. Cest bus de communication de type srie.

1. Prsentation :

Le bus I2C qui nutilise que deux lignes de signal (et les masses correspondantes bien sr) permet un certain nombre dappareils dchange des informations sous forme srie avec un dbit pouvant atteindre 100 Kbits par seconde ou 400 kbits par seconde pour les versions les plus rcentes. Mme si ces dbits peuvent sembler relativement faibles, les premires applications du bus I2C sont des applications audio ou vido pour lesquelles la simplicit de mise en uvre est nettement plus importante quun dbit lev.Les points forts du bus I2C sont :Premirement cest un bus srie bifilaire utilisant une ligne de donnes appele SDA (Serial Data) et une ligne dhorloge appele SCL (Serial Clock).Les donnes peuvent tre changes dans les deux sens sans restriction.Le bus est multi-matre : chaque abonn dispose dune adresse code sur 7 bits, on peut donc connecter simultanment 128 abonns dadresses diffrentes sur le mme bus.Un acquittement est gnr pour chaque octet de donne transfr.Le bus peut travailler une vitesse maximum de 100 K bits par seconde (ou 400 Kbits par seconde) tant entendu que son protocole permet de ralentir automatiquement lquipement le plus rapide pour sadapter la vitesse de llment le plus lent, lors dun transfert.

Le nombre maximum dabonns nest limit que par la charge capacitive maximale du bus qui peut tre de 400pF.Les donnes envoyes par paquets de huit bits indpendants(le bit de poids fort est envoy le premier) sur la ligne SDA, chaque octet est suivie par un bit dacquittement .La ligne SCL fonctionne comme une horloge srielle dun registre dcalage, tant que cette ligne est ltat haut les donnes de la ligne SDA doivent tre stables.Certaines combinaisons particulires de niveaux et de fronts des deux lignes dterminant la condition de dpart ou darrt de la transmission des donnes.Condition de dpart : Un front descendant sur SDA quand SCL est ltat haut. Condition darrt : Un front montant sur SDA quand SCL est ltat haut.13 Module horloge temps rel :PCF8583 :Le PCF8583 fonctionne en vritable horloge calendrier c'est--dire en mode de 24 heures et sur une priode de vingt quatre ans. Il possde une sortie dinterruption et de la RAM qui possde 232 octets disponibles en plus de ceux de sa propre fonction.

Figure : Schma de brochage

Caractristiques lectriques : consommation faible de courant. garantie de la fonction dhorloge et de rtention de mmoire sous 1v (et 2A) ce qui permet de le secourir facilement par une batterie.Figure : architecture interne du PCF85832. Connexion de PCF8583:

Lhorloge temps rel PCF8583 accs I2C est raccorde la ligne RC3 du Pic pour lhorloge (SCL) et RC4 pour les donnes (SDA), la liaison aux lignes RC3 et RC4 seffectue en changeant ltat

du SW9. Les rsistances R48 et R49 maintiennent positivement ces signaux au repos. Le montage contient aussi une pile rechargeable pour alimenter le PCF8583 en cas o la carte nest pas alimente.Le bus I2C appartient la catgorie des bus srie par opposition aux bus parallle ou les donnes sont transmises par bloc, les donnes sont ici envoyes bit par bit par groupe doctet sur la ligne SDA.La ligne SCL fonctionne comme une horloge srielle dun registre dcalage. Tant que la ligne SCL est ltat haut les donnes de la ligne SDA doivent tre stables.Lorsque la ligne SCL est ltat bas, le circuit qui met les donnes peut modifier ltat.

Figure: condition de validit des donnes sur le bus I2C

Certaines combinaisons particulires de niveaux et de fronts des deux lignes dterminant la condition de dpart ou darrt de la transmission des donnes. Condition de dpart : Un front descendant sur SDA quand SCL est ltat haut. Condition darrt : Un front montant sur SDA quand SCL est ltat haut.

Pic 16F877 :Le pic 16F877 est un circuit intgre contenu dans un botier nommer DIL 40 , il prsente 40 broches, 20 de chaque cot. Les broches sont virtuellement numrotes de 1 40. La 1ere broche est plac dans le coin situ gauche de lencoche de reprage.

Figure : Les pins du 16F8771. Les PINS de 16F877 :

MCLRCette broche sert initialiser le microcontrleur.Le microcontrleur dispose de plusieurs sources de RESET : POR. EXTERNAL RESET WDT BOR POR: (POWER ON RESET) Mise sous tension.Un front montant sur MCLR dclenche l'initialisation du microcontrleur. Le temps ncessaire est au minimum de 72ms et au maximum de 72ms+1024*Tosc. Le microcontrleur dispos en interne dun circuit de dtection de niveau, quand la tension VDD est comprise entre 1.2V et 1.7V, il dmarre une procdure dinitialisation.Cette broche peut tre simplement relie VDD si on na pas besoin de RESET externe. Par contre si on souhaite implanter un bouton de remise zro, on pourra cbler un simple rseau RC sur la broche MCLR.

Remarque importante : On peut se passer de circuit RC la seule condition que le temps de mont de VDD soit suffisamment rapide (au minimum 50mV/ms). Si le temps de monte est infrieur 50mV/ms, il faut rajouter un rseau RC. EXTERNAL RESET (Mise ltat bas de MCLR). Remise zro extrieure. Il faut appliquer un niveau bas sur l'entre RESET pendant au moins 2S pour que l'Initialisation soit prise en compte. WDT: Chien de garde.Si le WDT arrive la fin du temps de garde sans avoir t rafrachi il y aura alors une initialisation du microcontrleur. BOR: Baisse de lalimentation.Si la tension VDD chute en dessous de 4V pendant 100S au moins, le microcontrleur peut gnrer un RESET.

Oscillateur : OSC1 et OSC2 ou CLKIN et CLOUT.Ces broches permettent de faire fonctionner loscillateur interne du PIC. On peut utiliser 3 types doscillateurs : Un quartz ou rsonateur cramique Un oscillateur externe Un rseau RCRemarque : Les instructions standards durent 1 cycle machine (sauf les instructions de sauts 2cycles). Le microcontrleur utilise 4 coups dhorloge pour raliser un cycle machine.Si la frquence du QUARTZ est de 20MHz (T=50nS), une instruction sera excute toutes les 200nS, Dans ce cas l, le microcontrleur a une puissance de calcul de 5MIPS (5 Millions dinstructions par secondes ! ! !).

OSC1/CLK INRB 0/INTOSC2/CLK OUTRB1 MCLR/V pp/T HVRB2RB3/PGMRA0/AN0RB4RA1/AN1RB5RA2/AN2/V RE F-RB6/PGCRA3/AN3/V RE F+RB7/PGD RA4/T 0CKIRA5/AN4/S SRC0/T 1OS O/T 1CKI RC1/T 1OSI/CCP2RE0/AN5/RDRC2/CCP 1 RE1/AN6/W RRC3/S CK /S CLRE2/AN7/CSRC4/SDI/S DA RC5/SDO RC6/T X/CKRC7/RX/DTRD0/PS P0 RD1/PS P1 RD2/PS P2 RD3/PS P3RD4/PS P4 RD5/PS P5 RD6/PS P6 RD7/PS P7C11nFU1X113 C2CRYS T AL141 1nF234567333435363738 3940 8910 15161718 2324 25 26 1920212227 28 29 30PIC16F877La frquence MAX est de 20MHz pour les microcontrleurs dont les rfrences se terminent par - 20.Par exemples : 16F876-20 (20MHz max) et 16F876-04 (4MHz max).

.

Brochage du circuit doscillation PIC16F877

Page 70

Remarque : La consommation du circuit sera d'autant plus faible que la frquence sera petite, cela peut tre intressant pour des applications de faible consommation (alimentation autonome).Pour des applications faible consommation, on peut utiliser les sries LF (Low Frequency and Low Power). Alimentation : VDD et VSS.Ce sont les broches d'alimentation du circuit. Les tensions qui peuvent tre appliques vont : De 4,5V 6V pour la gamme standard F. De 2 6V pour la gamme tendue LF.L'intensit du courant consomm peut aller de 1A 10mA. La consommation du microcontrleur sera fonction de : La tension d'alimentation. La frquence interne. Le mode de fonctionnement.De plus ces bornes doivent tre dcouples par deux condensateurs :- 1F lectrolytique.- 10nF cramique.

LInterruption : RBO/INT.Cette broche une double fonction elle peut tre utilise comme une broche standard RBO ou comme une entre dinterruption INT.Si cette broche est utilise comme une entre d'interruption externe, elle doit tre maintenue un niveau haut par l'intermdiaire de rsistances de 10 k pour ne pas dclencher dinterruptions imprvues, cela permet aussi de relier plusieurs sources d'interruptions sur une mme ligne (OU CABLE).2. Architecture interne du16F877 :Comme pour tous les circuits intgre, chacun de ses broches une ou plusieurs fonctions qui sont rsumes par un sigle mnmotechnique.Ce microcontrleur prsente une architecture Harvard, les donnes sont places dans une mmoire de type RAM de 368 bytes. La mmoire de programme est constitue de mot de 14 bytes, est type FLASH (non volatile).Ces ressources sont donc prcieuses, en comparaison de celles dautres composantes. Le 16F877 possde encore 5 ports (A E) et 3 temporisateurs (timers), ce diagramme bloc prsente les composantes du 16F877 :

Figure 2: Architecture interne du PIC 16F877*Les 5 ports sont dentres sorties input/output, ils sont bidirectionnels :-Le port A (6 bits) I/O pure et/ou convertisseur analogique et/ou TIMER 0. La broche RA4 5Entre du timer 0 T0CKI) est de type DRAIN OUVERT.-Le port B (8 bits) I/O pure et/ou programmation in situ ICSP/ICD, RB0 est entre dinterruption externe.-Le port C (8 bits) I/O pure et/ou SPI/I2C et/ou USART.

-Le port D (8 bits) I/O pure et/ou port parallle 8 bits associ au port E.-Le port E (3 bits) I/O pure et/ou pilotage du port E RE0/R, RE1/WR et RE/CS.Remarque : Si le PIC est utilis en mode ICSP/ICD il faut laisser libre les broches RB3/PGM, RB6/PGC ainsi que RB7/PGD) et les configurer en entre. Le PORT C (8 bits) I/O pure et/ou TIMER 1 et/ou SPI / I2C et/ou USART. Le PORT D (8 bits) I/O pure et/ou port parallle 8 bits associ au PORT E. Le PORT E (3 bits) I/O pure et/ou pilotage du PORT E RE0/RD, RE1/WR et RE2/CS.

Configuration des PORTx, les registres PORTx et TRISx.Tous les ports sont pilots par deux registres : Le registre de PORTx, si le PORT x ou certaines lignes de PORT X sont configures en sortie, ce registre dtermine ltat logique des sorties. Le registre TRISx, cest le registre de direction. Il dtermine si le PORTx ou certaines lignes de port sont en entre ou en sortie. Lcriture dune 1 logique correspond une entre (1 comme Input) et lcriture dune 0 logique correspond une sortie (0 comme Output).Au RESET toutes les lignes de ports sont configures en entres.Remarque : Les registres TRISx appartiennent la BANQUE 1 des SFR.Lors de linitialisation du microcontrleur il ne faut pas oublier de changer de page mmoire pour les configurer.Le tableau ci dessous reprsente les caractristiques de PIC :

Tableau de caractristiques. Les mmoires du PIC 16F877 :Les mmoires sont de trois types diffrents :3.1 La mmoire FLASH :Cest une mmoire programme de taille 8ko. Chaque case mmoire unitaire est de taille 13 bits. Cette mmoire est de type mmoires stable, c'est--dire quon peut rcrire dessus volont, car le 16F877 est caractris par la possibilit dcrire des donnes. La zone mmoire est caractrise

par une adresse de 13 bits, alors ceci nous impose donc pour ladressage les registres EEAR et EEADRH. De mme, nous aurons pour les donnes, les registres EEDATA et EEDATH.3.2 La mmoire RAM :Cette mmoire de taille 368 octets est une mmoire daccs rapide et elle est volatile (les donnes seront perdus lorsque elle nest plus sous tentions). Elle contient tous les registres de configuration du PIC ainsi que les diffrents registres de donnes. Elle contient galement les variables utilises par le programme. La RAM est la mmoire la plus utilise. Toutes les donnes qui y sont stockes sont perdues lors dune coupure de courant.La RAM est subdivise de plus en deux parties dans chacune on trouve des cases mmoire spciales appele REGISTRES SPECIAUX et des cases mmoire libre dont on peut se servir provoque un fonctionnement spcial du PIC ou la mise en service dune fonction particulire.3.3 LEPROM Interne :Le pic 16F877contient galement la mmoire lectriquement effaable. Ce type de mmoire est daccs plus lent. Pour grer cette EEPROM on a besoin de quatre registres, savoir EEDR, EEDATA, EECON1 et EECON2.Le registre EEADR est utilis pour placer ladresse relative en EEPROM, tandis que le EEDATA contient la donn lire ou crire.Ladresse relative de laccs EEPROM est donc comprise entre 0000 et 00FF ce qui nous permet dutiliser un registre de huit bit pour dfinir cette adresse.4. Les Timers :Il possde 3 timers qui sont :-Le Timer0 (8bits) : il peut tre incrment par des impulsions extrieures via la broche (TOCKI/RA4) ou par lhorloge interne (Fosc/4).-Le Timer1 (16 bits) : il peut tre incrment soit par lhorloge interne par des impulsions sur la broche T1CKI/RC0 ou par un oscillateur (RC ou quartz) connect sur les broches T1OSO/RC0 et T1OSI/RC1. Le Timer2 (8bits) : il est incrment par lhorloge interne, celle peut tre pr divise. Tous ces timers peuvent dclencher une interruption interne, sils ont t autoriss.5. Lunit centrale :

Organisation mmoireComme les PICs utilisent un bus pour les instructions et un bus pour les donnes, il faut considrer deux plans mmoire lun pour les instructions et lautre pour les donnes ainsi que les registres internes.

Figure 3 : Plan Mmoire pour les instructions

(Code programme)

Le plan mmoire est linaire les adresses vont de 0000h 1FFFh (8k mots de 14 bits), par page de 2K mots. On peut remarquer, le vecteur de reset est fig en 0000h.Les PICs nont quun seul vecteur dinterruption en 0004h. Lors dune interruption, le sous programme associ devra dterminer quel priphrique a demand une interruption.La pile utilise par les sous programmes nest pas implante en mmoire de donne comme avec les microcontrleurs classiques, mais dans la mmoire programme. Elles sont utilises lors dappels de sous programmes, on ne peut pas imbriquer plus de 8 sous programmes (Ce qui est dj beaucoup).6. Les interruptions :6.1 Prsentation :Le microcontrleur dispose de plusieurs sources d'interruptions. Une interruption externe, action sur la broche INT/RB0. Dbordement du TIMER0. Changement dtat logique sur une des broches du PORTB (RB4 RB7). Une interruption dun des priphriques (PEIE). Fin de programmation dune case mmoire de lEEPROM. Changement dtat sur le PORTD (PSPIE). Fin de conversion analogique numrique (ADIE). Rception dune information sur la liaison srie (RCIE). Fin dmission dune information sur la liaison srie (TXIE).

Interruption SPI ou I2C du module MSSP (SSPIE). Interruption du registre de capture et/ou de comparaison 1 (CCPI1E). Interruption du registre de capture et/ou de comparaison 2 (CCPI2E). Dbordement du TIMER1 (TMR1E). Dbordement du TIMER2 (TMR2E). Collision de BUS (BCLIE)

6.2 Fonctionnement :

Lors dun vnement dans un ou plusieurs des circuits priphriques (ADC, EEPROM, USART- SCI, MSSP-I2C-SPI, TIMER1, TIMER2) comme par exemple : la fin de conversion, la fin de programmation dun octet dans lEEPROM, la rception dune information, la dtection dun front, etc. et si le bit de linterruption concerne a t autorise (EEIE, PSPIE, ADIE, RCIE, TXIE, SSPIE, CCP1IE, TMR2IE, TMR1IE, CCP2IE ou BCLIE : Registres PIE1 et PIE2) alors uneinterruption priphrique est dclenche. Pour que celle-ci soit prise en compte il faut que le bit dautorisation des interruptions priphriques soit positionn 1 (PEIE) ainsi que le bit GIE dautorisation globale des interruptions du registre INTCON.Pour qu