Vous êtes sur la page 1sur 77

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Le PIC 16F84 Lessentiel

Auteur : Galod Alexandre Date : 11/11/2004

Ce document est la proprit intellectuelle de son auteur

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

INTRODUCTION
Ce livre, qui sapparente plus un aide-mmoire, a t crit afin de corriger nombre de problmes rencontrs au cours de mon cursus, notamment des informations contradictoires, voire fausses , que ce soit sur le net, dans des livres, ou autre. Le but de ce livre est donc de constituer en quelque sorte un livre de rfrences pour comprendre, programmer et tester le PIC 16F84. Un livre la fois, simple, comprhensible, mais aussi, je lespre, efficace. Le but nest pas ici de faire un livre avec des tonnes de documentations ne servant jamais rien, mais au contraire, un livre avec uniquement les informations utiles et ncessaires la comprhension et la mise en uvre du PIC 16F84. Nous ne nous attarderons donc pas sur les schmas dtaills du PIC 16F84, mais uniquement sur des reprsentations schmatiques, suffisantes son utilisation. Il vous sera cependant ncessaire davoir un minimum de connaissances en lectronique et informatique afin de comprendre lintgralit de ce livre. Jespre quil vous permettra de fabriquer de nombreux systmes, de toutes sortes, avec pour principale limite, votre imagination. Ce livre sadresse donc aussi bien aux amateurs avertis, quaux tudiant(e)s et/ou professionnels. Bonne lecture !!!

Ce document est la proprit intellectuelle de son auteur

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

STRUCTURE INTERNE DUN PIC

Ce document est la proprit intellectuelle de son auteur

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

SOMMAIRE
1- Le PIC 16F84 1.1 Prsentation du microcontrleur 1.2 Caractristiques du PIC 16F84 1.3 Fonctionnement du PIC 16F84 1.3.1 Les entres/sorties 1.3.2 Les diffrents types doscillateurs 1.3.3 Le Reset 1.3.4 La mmoire EPROM 1.3.5 La mmoire flash 1.3.6 Les interruptions 1.3.7 Le TMR0 1.3.8 Le Watchdog 1.3.9 Le RTCC 2- Programmation du PIC 16F84 2.1 Ncessaire la programmation 2.2 Choix dun langage 2.3 Le langage assembleur (bases) 2.4 Le langage C 2.4.1 Les bases du langage C 2.4.2 Le C pour PIC 2.5 Exemple de programme 2.5.1 Fonction Delay 3- Le PIC 16F628 3.1 Le futur PIC 16F84 4- Programmer le PIC 4.1 Un programmateur de PIC 4.2 Les logiciels de programmation 5- Un testeur de PIC 6- En bref, tout ce qui est utile 7- Conclusion 8- Lexique 9- Liens Internet utiles 10- Annexes P2 P3 P8 P10

P16 P17 P22 P24 P28 P36 P37 P38 P40 P41 P44 P59 P61 P66 P67 P68 P69

Ce document est la proprit intellectuelle de son auteur -1-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 1 : LE PIC 16F84

1.1 Prsentation du microcontrleur 1.2 Caractristiques du PIC 16F84 1.3 Fonctionnement du PIC 16F84 1.3.1 Les entres/sorties 1.3.2 Les diffrents types doscillateurs 1.3.3 Le Reset 1.3.4 La mmoire EPROM 1.3.5 La mmoire flash 1.3.6 Les interruptions 1.3.7 Le TMR0 1.3.8 Le Watchdog 1.3.9 Le RTCC

Ce document est la proprit intellectuelle de son auteur -2-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

1- LE PIC 16F84 1.1- Prsentation du microcontrleur :

Deux exemples de microcontrleurs

Aujourdhui, les microcontrleurs sont partout : ordinateurs, portable Assez facile dutilisation, pour la plupart, et programmable de fort nombreuses fois (plus de 1000), ou dfinitivement (OTP : One Time Programmable), leur souplesse dutilisation a sduit rapidement les divers constructeurs de divers domaines. Aujourdhui, un des gants mondiaux sappelle Microchip. Mais il ne faut surtout pas confondre les microcontrleurs et les microprocesseurs. Pour rsumer, on peut dire quun microcontrleur est un ordinateur extrmement miniaturis et possdant donc assez peu de mmoire, et dont le processeur est relativement simple, alors quun microprocesseur ne fait quexcuter des instructions qui lui sont communiques, puis renvoie les rsultats. Les principaux problmes des microcontrleurs sont la taille de leur mmoire et le nombre limit de priphriques quils peuvent recevoir en mme temps. Cependant, le nombre de ces derniers peut parfois tre augment en associant, sur les mmes pattes un priphrique dentre et un de sortie, permettant alors de doubler le nombres de priphriques connectables

Ce document est la proprit intellectuelle de son auteur -3-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Les microcontrleurs sont tellement miniatures, que la plupart du temps, ils sont implants sur lapplication mme quils sont censs piloter, comme par exemple un clavier dordinateur, ou la souris. Ces systmes sont alors appels systmes embarqus . Ils excutent tout le temps, en boucle, le mme programme. Leur champ dapplication ne connat comme limite, que lingniosit des divers concepteurs. Grce eux, la rception radio est de plus en plus fine. Leur avenir sannonce radieux en ce dbut de XXI me sicle. Pour lan 2000, le bilan tait trs positif : Communication : 30% Consommation gnrale : 27% Industrie automobile : 18% Priphriques informatiques : 15% Industrie : 10% Nous pouvons en effet rencontrer des microcontrleurs tous les jours dans les appareils que nous utilisons. La classifications gnrales de puces se fait par nombre de bits : 4, 8, 16, 32 bits. Un microcontrleur se dcompose en diverses parties : la mmoire de programme, la mmoire de donnes, le processeur, les ressources auxiliaires. Les modles les plus vendus sont les PIC de chez Microchip, en raison dun excellent rapport qualit/prix, et surtout le PIC 16F84, qui est le sujet de ce livre, et qui est utilis par toute la communaut lectronique, que ce soit amateur, ou mme par certains professionnels. Facile programmer et utiliser, son prix tourne aux alentours des 7.5, avec une cadence de fonctionnement pouvant aller jusqu 20 MHz. Chez les PIC, il y a la gamme de base (16C5X : 33 instructions de 12 bits, DIL 18 et 28), la gamme intermdiaire (16C/FXXX : 72 modles DIL 18 68, 35 instructions de 14 bits), la gamme mini (12CXXX : DIL 8), la gamme suprieure (58 instructions de 16 bits), la gamme avance (18CXXX : 10 MIPS 40 MHz, 77 instructions de 16 bits, DIL28 80, 16 Kmots de 16 bits).

Ce document est la proprit intellectuelle de son auteur -4-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Des exemples de la famille PIC de chez Microchip

Jusqu une certaine poque, les microcontrleurs respectaient larchitecture Von Neumann, inventeur de lENIAC, premier ordinateur au monde. Cependant, celle-ci prsente des inconvnients. En effet, la vitesse dexcution est limite, les instructions et les donnes transitaient par le mme bus. Pour rsumer, son principal dfaut tait le fait quelle ne possdait quun bus pour, simultanment, la mmoire programme et la mmoire donne.

Larchitecture de Von Neumann

Ce document est la proprit intellectuelle de son auteur -5-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Do larchitecture Harvard, utilise maintenant par les PIC. Sa particularit tient dans le fait quil y a deux mmoires accessibles en mme temps par le processeur, par lintermdiaire de deux bus spcifiques. Lun sert pour les donnes, et lautre pour les instructions. De ce fait, les deux peuvent tre accessibles en mme temps, do un gain de vitesse, au niveau excution.

Larchitecture Harvard

Ceci aidant, il existe depuis quelques annes, un nouveau type de mmoires dites flash , avec criture et effacement lectrique des donnes dans la mmoire. Elle est de type RAM, mais est associe une mmoire EPROM pour des donnes auxiliaires. Cependant, dautres architectures existent, mais nanmoins moins rpandues, comme par exemple, larchitecture Flynn dveloppe en 1996. Chaque microcontrleur possde des registres. Il sagit de mmoires intervenant dans les oprations de lUAL (Unit Arithmtique et Logique). Celle-ci requiert deux oprandes (instructions) pour raliser une opration. Quand un processeur excute une instruction, il le fait en deux tapes : dabord une phase de recherche, puis une phase dexcution. Tous les microcontrleurs, ou presque, possdent des entres/sorties programmables. Celles-ci se configurent simplement sur les PIC en entrant une valeur ladresse du port correspondant. En plus du programme, les microcontrleurs ont besoin de ce quon appelle un mot de configuration, tenant compte du type doscillateur (RC, XT,), de lactivation ou non du Watchdog (qui empche un
Ce document est la proprit intellectuelle de son auteur -6-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

dysfonctionnement), dune temporisation au dmarrage ou non, et du code P (non utilis et explicit dans ce livre, le code P, pour Protection, sert verrouiller la programmation du PIC ; c'est--dire que pour le programmer, il faut un mot de passe).

Ce document est la proprit intellectuelle de son auteur -7-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

1.2- Caractristiques du PIC 16F84 :

Ce microcontrleur, que nous surnommerons le pic pour des raisons de commodit, dans ce livre, possde 13 broches configurables, rparties sur deux ports : le port A et le port B. Remarque : On ne peut affecter que deux valeurs diffrentes de configuration chaque patte : un 1 pour la mettre en entre, ou un 0 pour une sortie. Le port A possde 5 broches (nommes RA1 RA4), mais la quatrime, galement appele TOCKI peut servir pour une ventuelle temporisation externe. Le port B, lui, possde 8 broches (de RB0 RB7) ; mais la broche RB0 peut galement servir comme interruption ventuelle (un peu comme un garde sur un vnement) La broche 4, le MCLR barre, sert indiquer au PIC sil est en fonctionnement normal (un 1 logique) ou alors sil est en cours de programmation (un 0 logique). Cette broche sert galement un ventuel Reset du PIC. Ne reste que 4 broches : lalimentation (la 5 (0 volts) et la 14(+5 volts)) loscillateur(pattes 16 et 15) Outre ces caractristiques, il faut savoir que le PIC 16F84 nutilise pas de signaux analogiques, mais uniquement numriques (logique). De
Ce document est la proprit intellectuelle de son auteur -8-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

plus, il faut savoir, quil ne fait pas la diffrence entre les niveaux logiques TTL et CMOS. Il est donc alors prfrable dutiliser les deux extrmes de signaux logiques TTL (0 et 5 volts), pour viter tout problme possible. Voici enfin, les caractristiques du PIC 16F84 fournit par Microchip : Mmoire de programme : 1KO, type Flash Mmoire de donnes RAM : 68 octets Mmoire de donnes EPROM : 64 octets Niveau de la pile : 8 Jeux dinstruction RISC : 35 de 14 bits Temps dexcution des instructions normales : 4*Tosc Temps dexcution des instructions de saut : 8*Tosc Cause dinterruption : 4 Frquence max de travail : 10 MHz Lignes E/S numrique : 13 Temporisateur : un pour lutilisateur, un pour le Watchdog Tension dalimentation : 2 6 V continu Tension de programmation : 12 14 V continu Botier : DIL 18 Enfin, autre point fort du PIC : la consommation, car en tant que systme embarqu, il faut que ce microcontrleur consomme peu. Ainsi, des 2 mA de consommation en fonctionnement normal, il peut passer 10A en fonction veille ou sommeil, comme par exemple sur un tlphone portable, quand on ne sen sert pas, la lumire reste teinte : il est en veille. En revanche, au moindre appui sur un bouton (interruption externe, broche RB0 ici), il se remet en marche. Le Pic fonctionne de la mme manire. Remarque : il faut cependant savoir que le PIC peut fournir jusqu 20 mA par sortie, soit, si tous les ports sont en sortie, un dbit de 260 mA. Il est ais de comprendre alors que les 2 mA sont une consommation moyenne et que celle-ci varie selon lutilisation du PIC

Ce document est la proprit intellectuelle de son auteur -9-

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

1.3- Fonctionnement du PIC 16F84 :


Dans cette partie du livre, nous traiterons des principaux systmes du PIC, plus ou moins utiles. Nous illustrerons ces systmes par des schmas, les plus clairs et les plus comprhensibles possible. Certains de ces systmes, tant des paramtres configurables, devront faire lobjet dattention selon que vous deciderez o non de les mettre en uvre. Nous verrons donc : les entres/sorties les diffrents types doscillateurs possibles (pour lhorloge) le Reset la mmoire EPROM la mmoire flash, utilise dans le PIC les interruptions le TMR0 le Watchdog le RTCC 1.3.1- Les entres/sorties :

Les entres/sorties sont linterface entre le systme embarqu et le monde extrieur.


Ce document est la proprit intellectuelle de son auteur - 10 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Les entres/sorties sur le Pic sont rparties sur deux ports : le port A (5 E/S) et le port B (7 E/S). Pour configurer ces dernires, il sagit de rentrer un 1 pour la mettre en entre, ou un 0 pour une sortie. Quand chaque bit est dtermin, on obtient alors le mot binaire rentrer dans le registre de configuration. 1.3.2- Les oscillateurs : Ils peuvent tre de plusieurs types. Nous verrons donc ceux-ci en dtail, afin de pouvoir choisir le meilleur possible. RC :

Cet oscillateur cote peu cher fabriquer, mais nest pas trs prcis. Il peut convenir si votre systme na pas besoin dune horloge prcise. La constante de temps est alors : =RC Remarque : F=1/ Systmes quartz :

Ce systme peut se diviser en trois sous-systmes : HS, XT et LP

Ce document est la proprit intellectuelle de son auteur - 11 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

La plupart du temps, loscillateur utilis sera un XT, un quartz 4 MHz. Cependant, le Pic peut monter jusqu 20 MHz en utilisant un mode HS (High speed). Quand au mode LP, il sagit du mode de fonctionnement en basse frquence, peu utilis. 1.3.3- Le reset : Ce systme est relativement important. En effet, lorsque le systme a des rats, ou plante, il est utile de pouvoir le rinitialiser. Il est galement possible et utile parfois deffectuer un reset lors de la mise sous tension. Le reset seffectue en mettant un 0 logique sur la patte 4 du microcontrleur. Il existe plusieurs types de systme de reset : le manuel, lautomatique, et un mixte.

Le reset automatique (condensateur de 1F et une rsistance de 1 K)

Le reset manuel (avec une rsistance de 1K)

Ce document est la proprit intellectuelle de son auteur - 12 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Le modle mixte, permettant un reset automatique lors de la mise sous tension et galement un interrupteur de reset manuel

1.3.4- La mmoire EPROM : LEPROM( Electrically Erasable Programmable Read Only Memory) est une mmoire interne au Pic. Il sagit dune mmoire non volatile dans laquelle le PIC peut stocker des donnes, comme par exemple les rsultats dune acquisition. 1.3.5- La mmoire flash : La mmoire flash est le nouveau type de mmoire EPROM. Bien plus souple que les premires gnrations de ces dernires, la mmoire flash permet une criture/effacement de toute la mmoire ou que dune partie au choix. Ce type de mmoire possde beaucoup de caractristiques intressantes.

Ce document est la proprit intellectuelle de son auteur - 13 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

1.3.6- Les Interruptions : Une interruption ou IT est un sous programme prioritaire, occupant ladresse 04. Quand une interruption intervient, le programme principale finit sa tche en cours, puis va effectuer le sous-programme dinterruption. Il existe quatre modes dinterruptions : Une modification de RB0 (en entre) La fin de lcriture en E_PROM Le dbordement du timer interne Une modification de ltat des pattes RB4 RB7 (configures en entres) Cest le registre INTCON (interruption control) qui sert grer les interruptions. 1.3.7- Le TMR0 : Il sagit dun temporisateur interne de 8 bits, qui peut tre initialis une valeur donne. A chaque passage de FF 00 (en hexa), le bit de dbordement est activ. Il faut alors le remettre zro, pour pouvoir dtecter un autre dbordement (non automatique). Il possde deux modes de fonctionnement possible, dont le choix seffectue par la mise 1 ou 0 du bit TOSC (voir chap. ncessaire la programmation), lentre horloge devenant alors la patte RA4, en mode dit TOCKI .
Ce document est la proprit intellectuelle de son auteur - 14 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Ces deux modes sont : temporisateur interne (peut alors servir pour des fonctions de temps) Compteur dvnements (peut servir pour compter des vnements extrieurs par lintermdiaire de RA4) Remarque : la patte RA4 doit tre dfinie en entre dans le cas du compteur dvnements. 1.3.8- Le Watchdog : Littralement le chien de garde , le Watchdog est un systme de surveillance du bon droulement du programme. Il sagit dun compteur, qui est rinitialis rgulirement dans le cas dun fonctionnement normal. Mais dans le cas dun dysfonctionnement, le compteur va jusquau bout et dclenche alors un reset interne, par dbordement, rinitialisant le Pic. Le compteur peut fonctionner la frquence de loscillateur, ou bien une frquence spcifique, dsigne par la frquence de loscillateur modifie par un diviseur. Remarque : il nest pas obligatoire de lutiliser. Son utilisation est activer ou non, lors de la programmation du PIC 1.3.9- Le RTCC: Il sagit dune horloge interne destine au fonctionnement du timer 0 (TMR0) dans le cas dun fonctionnement de ce dernier sur horloge interne.

Ce document est la proprit intellectuelle de son auteur - 15 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 2 : PROGRAMMATION DU PIC 16F84


2.1 Ncessaire la programmation 2.2 Choix dun langage 2.3 Le langage assembleur (bases) 2.4 Le langage C 2.4.1 Les bases du langage C 2.4.2 Le C pour PIC 2.5 Exemple de programme 2.5.1 Fonction Delay

Ce document est la proprit intellectuelle de son auteur - 16 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

2.1- Ncessaire la programmation du PIC :


Quand on veut programmer un PIC, il est ncessaire davoir un minimum de documents avec soi. Cependant, si ces derniers sont importants pour programmer en langage assembleur, nous verrons plus tard quen langage C, certains deviennent quasi inutiles. Ces documents, peu nombreux, traitent des tableaux de pages de programmation, de la rpartition des ports en entres/sorties et du type doscillateur utilis (en effet, dans le cas par exemple dun oscillateur RC, linstruction SLEEP est alors utilisable) Dans un premier temps, nous verrons donc les tableaux de programmation, et nous spcifierons les parties inutiles et utiles, en dtaillant ces dernires. Voici le tableau de programmation 0 :

Dans ce tableau, nous ne nous rfrerons quau ligne :

STATUS TRISA TRISB

Ce document est la proprit intellectuelle de son auteur - 17 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Les autres lignes entrant dans des modes spcifiques du PIC, ou servant juste indiquer dans quel tat se trouve le PIC, nous ne les dtaillerons pas. Remarque : Il est noter que le port A se trouve ladresse 05 et le port B ladresse 06 STATUS : Ce registre contient tous les bits qui servent pour nous renseigner sur ltat du PIC, et pour une partie de la programmation. Seul trois bits nous intressent : le C, le RP1 et le RP0. Le bit C (pour carry, retenue en franais), est un ou zro selon que lopration effectue ncessitait une retenue ou non. Le RP0 et le RP1 sont les bits permettant davoir accs au tableau de programmation, vu prcdemment (et donc au bit systme des registres) et aux diffrents espaces mmoires. Ils respectent le tableau suivant :

Remarque : Les adresses 0C 2F sont rserves pour les registres banaliss. Stocks en RAM, ils nont pas de but prcis et peuvent tre utiliss pour diverses applications.

Ce document est la proprit intellectuelle de son auteur - 18 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

TRISA : Le TRISA est le registre permettant de dfinir les entres/sorties du Port A. En remplaant les RAx par leur valeur correspondante (1 pour une entre, 0 pour une sortie), on obtient alors le mot binaire rentrer dans TRISA. Quand au bit 7, 6 et 5, on peut leur donner la valeur que lon veut, selon que a nous arrange ou non. TRISB : Le TRISB fonctionne de la mme manire que le TRISA, mais avec 2 bits supplmentaires Remarque : Bien que dans notre tableau page 0, il est spcifi PORTA et PORTB et que comme nous allons le voir juste aprs, dans le tableau page 1, il est indiqu TRISA et TRISB, ceux-ci, sont respectivement identiques. De ce fait, nous pouvons rentrer le code binaire de programmation des E/S dans la page 0 ou 1. Il est cependant conseill de passer la page 1 pour les programmer pour viter certains problmes. Nous allons prsent voir le tableau de programmation 1 :

Ce document est la proprit intellectuelle de son auteur - 19 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Les registres qui vont nous intresser ici sont :

EECON OPTION INTCON

Nous ne nous attarderons pas, mais ces registres EECON servent contrler lcriture et la lecture dans lEPROM. Ils doivent tre utiliss avec les registres EEDATA et EEADR du tableau de programmation 0. A noter la prsence de TRISA et TRISB, qui ont fait lobjet dune remarque prcdemment. OPTION : Ce registre permet de dfinir le choix dun diviseur et son affectation au Watchdog ou au RTCC Le choix de ce diviseur, se fait par lintermdiaire de PS2, PS1, et PS0, selon le tableau suivant :

Laffectation au Watchdog (WDT) ou lhorloge temps rel (RTCC) se fait par lintermdiaire du bit PSA. Dans le cas de laffectation du diviseur au RTCC, le bit TOSE permet de choisir entre un dclenchement sur front montant ou sur front descendant.

Ce document est la proprit intellectuelle de son auteur - 20 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Le bit INTEDG permet lui, de choisir le dclenchement de linterruption (sur front montant ou sur front descendant). Enfin, le bit /RBPU, permet de choisir de la mise en place ou non dune rsistance de rappel entre RB4 et RB7. Remarque : Dans le cas dun ventuel reset, ou la mise sous tension, tous les bits sont par dfaut 1. Tout ceci est rsum dans le tableau suivant :

INTCON :

Ce tableau rsume la faon dont on peut activer et vrifier les interruptions actives.

Ce document est la proprit intellectuelle de son auteur - 21 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

2.2- Choix dun langage de programmation :


Quand on choisit de programmer un microcontrleur, il faut savoir que sauf exceptions, cas rare, nous avons le choix entre plusieurs langages de programmation. En ce qui concerne le PIC, les programmes se dveloppent avec le logiciel MPLAB (dont nous verrons le fonctionnement plus loin dans ce livre), qui nous permet de programmer le PIC dans divers langages. Parmi ceux-ci, les principaux sont le C et le BASIC pour les langages hauts niveaux, et lassembleur pour les langages bas niveaux. Les langages bas niveaux sont les plus proches de la machine, gnralement lquivalent de la langue natale du systme. Lassembleur en fait partie. Proche de la machine, ce langage permet doptimiser le programme. Il reste cependant difficile mettre en uvre pour des programmes complexes, mais abordable pour des programmes de base. Adopt par nombre dindustriels comme langage de rfrence, il reste cependant difficilement rparable pour une tierce personne. Les langages hauts niveaux sont des langages faciles comprendre et mettre en uvre, avec un minimum de connaissance. Ce type de langage facilite la maintenance lors de problmes, car il est ais pour quelquun, pris au hasard, de comprendre un programme haut niveau. Ce type de langage est, en effet, plus proche de lutilisateur que de la machine. Ces langages utilisent ce quon appelle des compilateurs , sorte de convertisseurs, dictionnaires automatiques. Ces compilateurs font la conversion directe entre le langage haut niveau et le langage assembleur, nous pargnant ainsi une difficult supplmentaire. En comparant ces deux types de langage, et dans la mesure o les compilateurs sont, de nos jours, performant, il apparat comme plus pratique de choisir le langage C, plutt que le langage assembleur, tant pour la simplicit de programmation, que pour la facilit dutilisation. Ainsi, nous verrons dans ce livre, les bases de lassembleur pour PIC (Instructions de commande) fin dinformations, et ventuellement de comprendre certains programmes. Puis nous nous attarderons sur le langage C, langage de programmation choisi. Nous commencerons par voir les bases

Ce document est la proprit intellectuelle de son auteur - 22 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

classiques du C gnral, puis nous verrons ensuite le C PIC, spcifique au PIC.

Ce document est la proprit intellectuelle de son auteur - 23 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

2.3- Le langage assembleur (bases) :


Le langage assembleur est ce quon appelle un langage bas niveau , c'est--dire que cest un langage extrmement proche du fonctionnement du systme. Trs difficile apprhender, il est cependant ncessaire davoir des bases en assembleur, car, cela permet doptimiser les programmes et de gagner de la place, chose importante dans certains cas, car celle-ci est prcieuse sur le PIC. Il faut savoir que quand, sur les documentations techniques, on lit le mot instruction , celles-ci font rfrence une instruction assembleur. Cest le langage par dfaut du PIC, sa langue natale . Cependant, nous nous attarderons bien plus sur le langage C, successeur lassembleur, et bien plus comprhensible. Nous ne verrons donc en assembleur, que les 35 instructions du PIC avec quelques explications sur chacune dentre elles. Voici donc pour commencer les instructions du PIC. Il ny en a que 35, et le PIC ne se programme quavec elles. Les registres (W et f) contiennent des littrals (k), un peu comme un dossier (registres) contient des fichiers (littrals), mais o ces derniers seraient du texte.
Mnmonique addlw addwf Oprande 1 (source) k f d Oprande 2 (cible) Opration ralise Ajoute k w Ajoute f w. Si d=0, le rsultat est mis dans w; si d=1, le rsultat est mis dans f Ralise un ET logique entre w et k d f&w, si d=0, le rsultat est mis dans w, dans f sinon Mise O du bit b de f Nombre de cycle 1 1

andlw

andwf

bcf

Ce document est la proprit intellectuelle de son auteur - 24 -

Document crit par Alexandre GALOD bsf btfsc f f b b

Le PIC 16F84 :lessentiel Mise 1 du bit b de f Si le bit b de f est nul, linstruction suivante est ignore Si le bit b de f est 1, linstruction suivante est ignore Appel le sous programme dtiquette k. A utiliser avec le mnmonique return f Charge la valeur 00 dans f Charge la valeur 00 dans w Efface la valeur du chien de garde 1 1-2

btfss

1-2

call

clrf clrw clrwdt

1 1 1

comf

Complment 1 de f. Si d=0, le rsultat est mis dans w; dans f sinon Dcrmente f dune unit. Si d=0, le rsultat est mis dans w; si d=1, le rsultat est mis dans f Dcrmente f dune unit. Si le rsultat est 0, linstruction suivante est ignore. Si d=0,

decf

decsfz

1-2

Ce document est la proprit intellectuelle de son auteur - 25 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel le rsultat est plac dans w, dans f si d=1

goto

Branchement inconditionnelle ltiquette k d Incrmente f dune unit. Si d=0, le rsultat est mis dans w; si d=1, le rsultat est mis dans f Incrmente f dune unit. Si le rsultat est 0, linstruction suivante est ignore. Si d=0, le rsultat est mis dans w; dans f sinon OU logique entre k et w d f +w, si d=0, le rsultat est mis dans w, dans f sinon Dplace f vers w si d=0, vers f si d=1 Dplace k dans w f Dplace w dans f Instruction vide Retour de sous programme dinterruption

incf

incsfz

1-2

iorlw iorwf

k f

1 1

movf

movlw movwf nop retfie

1 1 1 2

Ce document est la proprit intellectuelle de son auteur - 26 -

Document crit par Alexandre GALOD retlw k

Le PIC 16F84 :lessentiel Retour de Sous programme, avec chargement de k dans w Retour de sous programe 2

return rlf f d

2 1

Rotation dun bit vers la gauche de f. Si d=0, le rsultat est mis dans w, dans f sinon Rotation dun bit vers la droite de f. si d=0, le rsultat est mis dans w, dans f sinon Mise en sommeil du pic (basse consommation)

rrf

sleep

sublw subwf

k f d

Soubstrait w k (k-w) f-w, si d=0, le rsultat est mis dans w; dans f sinon Inversion des 4 bits de poids forts, avec les 4 bits de poids faibles f+w exclusif, si d=0, le rsultat est mis dans w, dans f sinon OU exclusif entre k et w

1 1

swapf

xorlw

xorlw

Remarque : la fonction sleep ne fonctionne que si loscillateur est de type RC


Ce document est la proprit intellectuelle de son auteur - 27 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

2.4- Le langage C : Les bases du langage C :


Dans cette partie, nous verrons les bases du langage C pour ordinateur, en nous limitant toutefois aux points communs avec le langage C PIC, c'est--dire aux commandes communes. Il est cependant spcifier, que pour des raisons de commodit, nous verrons quelques points en plus, afin dexpliquer clairement le langage C ; points existant en C PIC, mais sous formes diffrentes. Gardons donc lesprit que les bases du C sont ici donnes, afin dapprendre matriser ce langage haut niveau afin de savoir, plus tard, programmer les PICs avec le plus de facilit possible. A noter tout de mme, que la meilleure cole pour matriser un langage reste la pratique de celui-ci et ltude de programme. Un programme en langage C se compose de plusieurs parties : -Un appel de librairies -Une fonction main , correspondant au programme principal -Eventuellement de sous-programmes (auxquels cas, dclarer) Les librairies : Elles constituent une sorte dencyclopdie pour le programme principal. En effet, elles contiennent toutes les infos et directives dont a besoin le programme principal : le main. Le main a accs ces directives par lintermdiaire dinstructions spcifiques aux librairies en question. Pour rsumer, et faire simple, le main appelle les fonctions dans les librairies par leur nom. On les appelles avec la commande #include<nom.h>. La fonction main : Il sagit du programme principal. Cest dans ce programme quon crira notre code informatique. Cette fonction peut faire appel des sous fonctions, lesquelles peuvent tre situes dans des librairies ou derrire le main.
Ce document est la proprit intellectuelle de son auteur - 28 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Remarque : Une fonction est compose de len-tte comprenant son nom et ventuellement ses paramtres, et dun bloc, commenant par {et finissant par }, indiquant le code correspondant len-tte Les sous-programmes, ou sous-fonctions : Il sagit de programmes secondaires, senss aider le main dans son travail. Lutilit de crer des sous fonction apparat surtout lorsquune tache se rpte plusieurs fois dans le mme programme : plutt que dcrire par exemple 3 fois le mme code, on dfinit une seule fois le code, dans un sous programme, et on lappelle trois fois. On conomise ainsi de la place (optimisation du code), chose trs importante pour un microcontrleur. La cration possible de sous programme doit tre une des choses avoir lesprit lorsquon cherche optimiser le code. Lorsque la possibilit se prsente, il faut alors juger sil est plus judicieux de crer un sous programme, ou alors de laisser le code tel quel, en se rfrenant la longueur du programme. Les bases du langage C : Quelques rgles : -Une ligne se finit toujours (sauf cas particulier que nous verrons) par un point virgule ; -Il est jug apprciable dcrire avec laide des tabulations, pour avoir un code lisible. Les commentaires : Lorsque lon dsire faire des commentaires en langage C, il y a deux solutions : -Pour une ligne seule, on utilise un double slash : // Il nest pas ncessaire de mettre un point virgule la fin du Commentaire. - Pour un paragraphe, ou plusieurs lignes conscutives, on utilise Un /* pour indiquer le dbut du commentaire, et un */ pour en indiquer la fin. Exemple : a=b ; //voici un commentaire sur une ligne /*Voici un commentaire sur plusieurs lignes*/

Ce document est la proprit intellectuelle de son auteur - 29 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Remarque : Le commentaire de paragraphe peut galement servir pour mettre de cot une partie de code sans leffacer Les variables : Dans un programme, on utilise souvent des variables pour effectuer des oprations (ex : a=b). Il faut savoir que le langage C fait la diffrence entre majuscule et minuscule ; et que les variables sont la premire chose dfinir dans un programme. Elles peuvent principalement tre de trois types : int (pour les entiers), float (pour les chiffres virgule), char (pour les caractres). Les variables doivent tre obligatoirement dfinies au dbut du bloc. Exemple : int a, b ; float c ; Remarque : Il est possible daffecter une valeur une variable lors de sa dfinition (ex : int a=2 ;//cr a comme entier, et lui donne la valeur 2) Remarque : quand on veut rentrer un caractre dans un char, il faut utiliser des guillemets (ex : char c ; c=A ;) Les formes dcriture : Les deux utiles sont : -dcimal (format par dfaut) -hexadcimal (il faut marquer 0x devant la valeur pour spcifier le type) Remarque : On peut utiliser pour les float lexponentiel. Il scrit e (ex : 1.6e+3) Les oprateurs : Les oprateurs sont : + : addition - : soustraction * : multiplication / : division % : modulo (ex : 11%3=2)
Ce document est la proprit intellectuelle de son auteur - 30 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

= : gale != : diffrent >,< : suprieur et infrieur Remarque : Si on fait une opration sur des floats dont le rsultat est un float, lequel est plac directement dans un int, le rsultat sera de type entier (on ne verra rien aprs la virgule) Il existe certaines subtilits sur les oprateurs. Ainsi mettre ++ ou quivaut , respectivement, ajouter ou soustraire 1 la valeur ou variable. De mme, marquer a=b, quivaut dire que a est gal b ; mais marquer a==b, consiste comparer a b, pour savoir sils sont gaux. Les oprateurs logiques : Ils servent effectuer tous types doprations logiques. Il y a le ET (&&), le OU inclusif (||) et le NON ( !). Les oprateurs conditionnels : Ex : si X=Y alors A=B, sinon A=C Se traduit par : IF(X=Y) { A=B ; } ELSE { A=C ; } Remarque : les incollades sont obligatoires. Elles indiquent que ce quil y a lintrieur fait partie de linstruction rentre avant. Dans le cas ou il ny aurait quun seule ligne (comme ici), on peut toutefois les enlever.

Ce document est la proprit intellectuelle de son auteur - 31 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Ex : Surveille A ; si A=1, alors B=1 ; Si A=2, alors B=2 Se traduit par: SWITCH (A) { CASE 1: B=1; BREAK; CASE 2: B=2; BREAK; } Ex : fait A=B*C, tant que A suprieur 3 Se traduit par : DO { A=B*C ; } WHILE(A>3) ; Ex : La boucle FOR, tant difficile traduire, nous allons la prsenter, et expliquer son fonctionnement. FOR(i=0 ;i<4 ;i++) { A=B*C ; } La boucle FOR prsente trois paramtres p1, p2, et p3 : FOR(p1 ;p2 ;p3) p1 ne sert que lorsque lon rentre dans la boucle. Il sert initialiser des valeurs. P& peut tre vide sil ne sert rien. p2 est la condition qui permettra de mettre fin la boucle. p3 est un paramtre o lon effectue des oprations sur la variable de condition. Ces oprations peuvent tre de diffrents types. La fonction FOR fonctionne ainsi. On rentre dans la boucle, le paramtre p1 est effectu. Puis, on vrifie p2. Si elle est fausse, on
Ce document est la proprit intellectuelle de son auteur - 32 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

effectue les action entre incollades ; puis on effectue p3, et on retourne vrifier p2. Si p2 est vrifie, alors, on sort de la boucle FOR, sinon, on recommence les actions, et p3, puis p2, jusqu ce que p2 soit vrifie. Exemple de programme pour rsumer tout ce quon a vu : /* Cration dun programme qui attribue une lettre une variable selon le rsultat dune opration*/ //dclaration des librairies #include<stdio.h> //programme principal Void main(void) { //dclaration de variable Int A, b, c=3 ; Char car ; //boucle FOR For(b=0 ;b<3 ;b++) { A=b*c ; Switch(A) { Case 0 : car=A ; Break ; Case 3 : car=B ; Break ; Case 6 : car=C ; Break ; } } }

Ce document est la proprit intellectuelle de son auteur - 33 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Le C pour PIC:
Le C pour PIC est quelque peu diffrent de celui pour ordinateur. Ces diffrences viennent du compilateur C. En effet, puisque ce dernier fait la conversion C-assembleur et que les instructions dans ce dernier sont limites (processeur RISC), le langage C est grandement simplifi, mais les concepteurs du compilateur ont lgrement modifi les instructions, qui sont heureusement assez intuitives, et rapidement assimiles. Les nouveauts : La diffrence entre un ordinateur et un PIC est dans les E/S. De ce fait, en langage C PIC, on donnera, si on le souhaite et cest prfrable, des noms aux pattes, ou aux ports complets, entre lappel des librairies et la dclaration de sous-fonctions et/ou main. Les rgles : Il est ncessaire dcrire les instructions de C en minuscule, et celles propres au PIC (comme les TRISA et TRISB) en majuscule. Lappel des librairies : En C PIC, les librairies sappellent ainsi : #include nom.H La dclaration des pattes et ports : En C PIC, une patte se dsigne par son port, et son numro (lesquels commence 0 jusqu 7). Par exemple, la patte 3 (en fait la quatrime) du port B sera : PORTB.3 Une patte seule se dfinit par la commande bit : bit fname@PORTB.3, affecte le nom fnam la patte 3 du port B. Un port complet se dfinit par la commande char : char sname@PORTA, affecte le nom snam au port A. Ainsi, dans le main et les sous-programmes, on utilisera snam la place de port A, et fnam, la place de PORTB.3

Ce document est la proprit intellectuelle de son auteur - 34 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Les affectations : La premire chose faire dans le main, en C PIC, est de dfinir les valeurs dans TRISA et TRISB. Si leurs dclarations taient compliques en assembleur, elles sont grandement simples en C PIC. Ainsi il suffit de marquer : TRISA=0x00 (par exemple, en hexadcimal, la valeur tant dterminer). On peut galement rentrer la valeur en dcimal (ex : TRISA=27), ou en binaire (ex :TRISA=0b00100110). En ce qui concerne, la faon dont on utilise les pattes, elle est trs simple. Comme vu prcdemment, elles se dsigne par le port auxquelles elles appartiennent, et leur numro de patte. De plus elles peuvent tre affectes une valeur logiques (en sortie, ex : PORTA.2=1 ;), ou tre lues (en entres, ex : c=PORTB.7)

Remarque : Ces paragraphes sur le cours C a t crit daprs ce que jai compris et retenu, comme principal, daprs mes cours de langage C et ceux de Herv Hollard, dont vous trouverez ladresse dans la section 9. Si les explications de ce cours, constituant les bases de la programmation C PIC sont suffisantes pour programmer pour ceux connaissant dj le C, je conseille tout de mme ne serait-ce que de lire, sinon dimprimer les cours de Herv Hollard, car ils constituent une base claire et solide du langage C (gnral et PIC), surtout pour les dbutants et les novices.

Ce document est la proprit intellectuelle de son auteur - 35 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

2.5- Exemple de programme : La Fonction Delay :


Cette fonction, trs utile dans un programme, a pour but de crer, comme son nom lindique, une fonction Delay, cest--dire, une temporisation. Il sagit en ralit dune sous-fonction, donc rentrer en dehors du main. Quand on en a besoin dans la fonction main, il suffit alors de taper le nom de la sous fonction, en indiquant entre parenthses le paramtre en milliseconde. Instruction dappel : Code de la fonction : Void Delay(int mill) { OPTION=2 ; Do { TMR0=0 ; While(TMR0<125) ; }While(--mill>0) ; } Et bien sur, il ne faut pas oublier de dfinir la sous-fonction avant le main : Void Delay(int mill) ; Delay ( 500) ; //pour une tempo de .5 s

Ce document est la proprit intellectuelle de son auteur - 36 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 3 : LE PIC 16F628


3.1 Le futur PIC 16F84

Ce document est la proprit intellectuelle de son auteur - 37 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

3- LE PIC 16F628

Le PIC 16F628

A titre dinformations, une faible partie de ce livre est ddie au remplaant du PIC 16F84 : le 16F628 Compatible et avec plein de nouvelles fonctions, parions quil saura se faire une place dans le monde des microcontrleurs

3.1- Le futur PIC 16F84 :


Le PIC 16F84 commenant tre un peu g (car existant depuis de nombreuses annes, il a dj t modifi plusieurs reprises, do les lettres A et P lisibles sur certains botiers), Microchip a dores et dj conu et commercialis son remplaant : le PIC 16F628. Avec un botier identique au 16F84, le 16F628 reprend les mmes fonctions que son prdcesseur, en lui rajoutant des fonctions et des avantages au passage. De ce fait, les deux sont parfaitement identiques, et on pourra remplacer, dans un circuit donn, un 16F84 par un 16F628. Quand sa programmation, elle est identique celle dun 16F84 et par consquent, pas besoin de rinvestir dans un programmateur.

Ce document est la proprit intellectuelle de son auteur - 38 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Les amliorations notables sont : mmoire flash multiplie par deux mmoire EPROM multiplie par deux jusqu 16 E/S disponible selon les utilisations (avec un min de 13) Deux timers 8 bit au lieu dun Un timer 16 bits Deux comparateurs analogiques Une interface srie Une rfrence de tension interne Un module de comparaison Dix sources dinterruptions au lieu de 4 Une horloge interne Il est bien sr vident que si lon garde le mme nombre de pattes, toutes ces fonctions sont rparties. Ainsi chaque patte possde plusieurs fonctions possibles, mais dont une seule est utilisable la fois. Sans pour autant nous attarder sur ce merveilleux microcontrleur, nous pouvons prciser que bien qutant donn toutes ces nouvelles fonctions, sa programmation et sa configuration seront quelque peu plus difficile, nous devons admettre que dans lensemble, nous sommes gagnants. En effet, le simple fait davoir une mmoire double, permet dj douvrir de nouvelles possibilits dapplications, tout comme la prsence des deux comparateurs analogiques. Et bien quil soit totalement compatible avec le PIC 16F84, il est regretter que si lon veut disposer des 3 entres supplmentaires, cela entrane une complication de programmation comme le constateront ceux qui le mettront en uvre.

Ce document est la proprit intellectuelle de son auteur - 39 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 4 : PROGRAMMER LE PIC


4.1 Un programmateur de PIC 4.2 Les logiciels de programmation

Ce document est la proprit intellectuelle de son auteur - 40 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

4- Programmer le PIC
4.1- un programmateur de PIC :
Nous allons voir ici, un programmateur de PIC fort simple. Bien que certains disent quil commence vieillir pour la simple raison quil se branche sur un port srie, je pense quil reste le meilleur programmateur. En effet, pas besoin de lui fournir une alimentation externe comme certains programmateurs. De plus, tant relativement simple, et ancien, on peut trouver de nombreuses docs sur le net, notamment, pour ceux que a intresse, sur son fonctionnement. Il sagit dun programmateur de PIC 16F84, de type JDM Nous ne verrons ici, que la faon de le fabriquer, sans nous attarder sur son fonctionnement. Nous verrons donc son schma structurel, le PCB et le schma dimplantation. Le structurel :

Ce document est la proprit intellectuelle de son auteur - 41 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Il vous faudra quelques composants pour le fabriquer :


R1 10K R2 1.5K D2 5.1V/0.5W D3 1N4148 or 1N4448 D4 1N4148 or 1N4448 D5 1N4148 or 1N4448 D6 8.2V/0.5W D7 1N4148 or 1N4448 C2 100F/25V Q1 BC547B Q2 BC547B P1 DS25 (female) P2 Resistor Resistor Zener Diode Diode Diode Zener Diode Capacitor electrolytic Transistor NPN Transistor NPN 25 pol DSUB connector Connector for In Circuit Programming

C3 22F/16V or 47F/6.3V Capacitor tantal

Le PCB vient dun site internet (http://www.jdm.homepage.dk/pcb2.htm), mais pour ceux qui ne dispose pas daccs, voici les PCB, tels quils sont mis sur le net. A noter que le schmatique du site est avec un connecteur parallle, alors, que le schmatique de ce livre est pour un connecteur srie. Implantations des composants :

Ce document est la proprit intellectuelle de son auteur - 42 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Vue de dessus (par transparence) :

Vue ct cuivre :

Pour informations, le cadre fait 3,8 cm de large et 3,6 cm de haut. Attention donc, quand vous imprimez le typon.

Ce document est la proprit intellectuelle de son auteur - 43 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

4.2- Les logiciels de programmation :


Afin de programmer le PIC, nous aurons besoin de deux logiciels (MPlab et IC-Prog), ainsi que dun compilateur (CC5Xfree). Nous verrons donc le logiciel de programmation avec son compilateur (MPlab et CC5Xfree), et le logiciel pour tlcharger le programme dans le PIC (IC-Prog) MPlab est un logiciel gratuit de programmation, dvelopp et propos par Microchip, le fabricant du microcontrleur PIC.

Les tapes que nous verrons dans limmdiat consistent dclarer le compilateur dans MPlab. De fait, cette opration nest effectuer quune seule fois. Ces tapes seront illustres en images. La premire chose faire est douvrir le logiciel MPlab. Bien, maintenant, nous allons pouvoir commencer. Etape 1 : ouvrez le menu Project et cliquez sur Set Language Tool Locations

Ce document est la proprit intellectuelle de son auteur - 44 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Etape 2 : il faut prciser MPlab o se trouve le compilateur CC5X, qui nous permettra dcrire en C.

Ce document est la proprit intellectuelle de son auteur - 45 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Vous devez cliquer, comme vous pouvez le voir sur B Knudsen Data CC5X, puis sur Executables, et enfin slectionner CC5X C Compiler. Ensuite vous devez cliquer sur Browse pour lui dire o trouver le compilateur, en lui indiquant le chemin.

Etape 3 : la troisime tape consiste dclarer un nouveau projet, en cliquant sur Project, puis sur new

Etape 4 : aprs avoir dit MPlab o tait le compilateur CC5X, il faut lui prciser, que cest le compilateur que lon veut utiliser. Pour cela cliquez sur le menu Project, puis sur Select Language Toolsuite.

Ce document est la proprit intellectuelle de son auteur - 46 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Vous obtenez alors la fentre suivante, dans laquelle vous devez slectionner dans le menu droulant active toolsuite la ligne B Knudsen Data CC5X. Cliquez alors sur CC5X C Compiler et vrifiez que la ligne Location indique le bon chemin MPlab.

Ce document est la proprit intellectuelle de son auteur - 47 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Ce document est la proprit intellectuelle de son auteur - 48 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Voil, nous avons configur le compilateur ; maintenant, nous allons voir comment crer la fentre pour le code source. Cela est trs simple : cliquez sur File, puis sur New. Une fentre apparat alors. Cliquez alors sur File, puis sur Save As. Rentrez alors le nom que vous voulez, suivit de .C, afin de prciser le type de document que vous allez crire.

Il ne vous reste alors plus qu lier le code source votre projet :

Ce document est la proprit intellectuelle de son auteur - 49 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Les derniers paramtres :il sagit de prciser MPlab le composant auquel est destin le programme. Pour ce faire, cliquez sur Configure, puis sur select device

Apparat alors lcran suivant :

Ce document est la proprit intellectuelle de son auteur - 50 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Maintenant, vous devez dfinir les paramtres de configuration : le Watchdog, le type doscillateur , le power up timer (mises sous-tension retarde) et le code P (code protect). Cliquez sur Configure, ensuite sur Configuration Bits :

Veuillez alors rentrer les mmes valeurs que dans cette capture dcran. A noter, que cette fentre correspond avec un quartz.

Comme nous lavons vu prcdemment dans la partie sur le langage C, nous aurons besoin de librairies. Celles-ci sont propres au compilateur. Il est donc ncessaire de dfinir lendroit o elles se trouvent.

Ce document est la proprit intellectuelle de son auteur - 51 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Pour cela, cliquez sur le menu Project, puis sur Build Options et enfin sur Project.

Et vous obtenez limage suivante :

Ce document est la proprit intellectuelle de son auteur - 52 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Il faut alors que vous indiquiez dans le champ Include Path le chemin du dossier du compilateur CC5X. Voil, votre logiciel est enfin configur pour programmer. Une indication utile toutefois. Quand votre programme sera termin, pour le compiler et vrifier que tout va bien (si ce nest pas le cas, il vous affichera un message derreur), il faut utiliser le bouton build, correspondant licne :

Ce document est la proprit intellectuelle de son auteur - 53 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Nous allons maintenant voir le logiciel, qui permet, par lintermdiaire du programmateur vu prcdemment, de tlcharger notre programme dans le PIC. Remarque : Cest le .hex que lon doit ouvrir. Si celui-ci nest pas prsent dans votre dossier, ou si MPlab vous indique lors de la compilation quil na pas pu tre gnr, alors ouvrez le menu Windows, et cliquez sur Excuter. Dans le champ qui souvre tapez alors la ligne : regsvr32 C:\Program Files\MPLAB IDE\dlls\MPProgram.dll Cette ligne devrait rsoudre le problme. Nous allons commencer par ouvrir le logiciel ICPROG :

Faite attention bien choisir un oscillateur de type XT, et de ne cocher que le PWRT. Enfin chose importante, slectionner le PIC 16F84 comme composant.
Ce document est la proprit intellectuelle de son auteur - 54 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

A ce stade, vous tes prts programmer, ne vous reste alors plus qu tlcharger votre programme. Mais avant de voir comment faire nous allons faire une remarque importante. Remarque : Toutes les tapes pour ICPROG vues jusquici sont bonnes pour toutes les versions de Windows. Cependant, pour windows 2000, NT, et XP, il est ncessaire de rajouter des drivers spciaux ICPROG. Voici comment faire : Lors de la premire mise sous tension, vous obtiendrez des messages derreurs de violations. Refermez alors le logiciel et allez dans le rpertoire o se trouve lexcutable. Faites un clique droit sur lexcutable, et ouvrez les proprits. Allez alors dans compatibilit, cochez la premire case, et demandez excuter le programme en mode de compatibilit pour windows 2000, puis validez.

Ce document est la proprit intellectuelle de son auteur - 55 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Rouvrez alors ICPROG,. Vous obtiendrez un nouveau message derreur. Cliquez sur OK, puis cliquez sur le menu Settings, puis sur Options. Dans le menu qui apparat, allez dans longlet MISC, et cochez loption Enable NT/2000/XP Drivers

Vous devez alors redmarrer ICPROG pour que les changements prennent effet. Au redmarrage, il vous affiche cette fentre :

Aprs vous tre assur que le driver (icprog.sys) est dans le mme dossier que lexcutable, cliquez sur YES.

prsent

Maintenant, prciser ICPROG, le programmateur que vous utilisez. Pour ce faire, appuyez sur F3, et rglez les paramtres comme suit :

Ce document est la proprit intellectuelle de son auteur - 56 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Voil, ICPROG est configur pour Windows NT, 2000 et XP. Remarque : avec un ordinateur portable, il se peut que la programmation choue (erreur de type :Echec de la vrification ladresse 0000h). Ceci peut venir de votre ordinateur ne fournissant pas les bonnes tensions pour la programmation, ou alors, dans certains un cble srie trop long (la rsistance du fil entranant une chute de tension entre le port srie et le programmateur). Bien. Maintenant, nous allons voir comment tlcharger un programme dans le PIC. Voici quoi ressemble la barre des tches de ICPROG :

10

11

Nous dtaillerons ces icnes une une : 1-Ouvrir un fichier (nouvrez que des fichiers .hex, les seuls aptes tre tlchargs) 2-Enregistrez (ne sert que rarement) 3-Hardware configurations (configuration dj effectue)
Ce document est la proprit intellectuelle de son auteur - 57 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

4-Options configurations (configuration dj effectue) 5-Sert lire le code prsent dans le composant. Le rsultat saffiche dans la fentre sous forme de code hexa (si pas derreurs). 6-Sert tlcharger le programme dans le composant 7-Sert effacer le contenu du composant 8-Sert vrifier que le composant bien t programm 9-Assistant SmartCard (ne sert pas) 10-Sert voir le code en assembleur 11-Sert voir le code en hexadcimal Tlcharger le programme : Pour tlcharger un programme, il faut commencer par ouvrir un fichier .hex. Pour cela, cliquez sur licne 1 et allez chercher votre fichier . hex. Puis, rglez votre oscillateur, et vos paramtres comme indiqus plus haut. Effacer le composant en cliquant sur licne 7, puis programmez le avec licne 6. Remarque : Dans certains cas, avant dimporter votre .hex, il est prfrable de vrifier sil ny rien sur votre composant, laide de licne 5.

Ce document est la proprit intellectuelle de son auteur - 58 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 5 : UN TESTEUR DE PIC

Ce document est la proprit intellectuelle de son auteur - 59 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Dans cette partie, nous verrons un testeur de PIC, le principe, et le but de celui-ci. Ce testeur, compos avec uniquement quelques composants, nous permet de tester nos programmes, et de vrifier le bon fonctionnement de ces derniers. Son principe est simple. Le testeur possde sur sa plaque un quartz, un rgulateur, un systme de reset mixte et deux sries de borniers. Aliment par un transformateur 220V-6V, le testeur dlivre, grce au rgulateur (un 7805) une tension de 5 volts au PIC. Le systme Reset assure le rle qui lui est allou, la mise sous tension, et lorsque lutilisateur le veut. Le quartz, cadenc 4 Mhz, sert dlivrer le signal dhorloge au PIC. Les sries de borniers, aux nombre de deux, assurent une connectivit des ports avec lextrieur (une srie de borniers par ports). En voici le typon (vu de dessus, attention limpression sur calque) :

Vous pouvez scanner et imprimer, sur calque, ce typon, afin de pouvoir tirer une plaque. Passer par un ordinateur, pour vous assurer de la bonne chelle. Le cadre fait 7,8 cm de large et 5, 35 cm de haut. Attention au sens, une fois tir, vous devez pouvoir lire bon sens cot cuivre. Voici la liste des composants dont vous aurez besoin, en dehors, bien sr, dune plaque et du PIC : -un quartz de 4 MHz -un rgulateur 7805 -5 borniers double souder sur CI -une rsistance de 1K -1 bornier triple souder sur CI -un condensateur polaris 1F -un support DIL 18 pattes -2 condensateurs 33pF -un transformateur externe 220V- 6V -un interrupteur poussoir
Ce document est la proprit intellectuelle de son auteur - 60 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Voici limplantation des composants (vu de dessus) :

Le but de ce testeur est donc de permettre de tester notre programme complet ou partiel en nous permettant de connecter facilement les priphriques, au choix ; le principal inconvnient de ce testeur tant sa frquence de fonctionnement fixe, 4 MHz. Petite astuce : Vous pouvez ter le rgulateur et brancher le circuit sur une prise USB dun ordinateur. En effet, la prise dlivre une tension de 5V rgule. Cependant, cette manip reste rserve aux personnes possdant un minimum de connaissances. En effet, un mauvais branchement peut dtruire votre PIC.

Ce document est la proprit intellectuelle de son auteur - 61 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 6 : EN BREF, TOUT CE QUI EST UTILE

Ce document est la proprit intellectuelle de son auteur - 62 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Le but de cette partie est simple : y rassembler tous les lments vus, et qui sont ncessaires la programmation du PIC. Bonne programmation. Tableaux de programmation

Ce document est la proprit intellectuelle de son auteur - 63 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Configuration du registre OPTION :

Ce document est la proprit intellectuelle de son auteur - 64 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Rpartitions des pattes du PIC

Programmer le Port A et le Port B :

Ce document est la proprit intellectuelle de son auteur - 65 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 7 : CONCLUSION
Ainsi, comme nous avons pu le voir tout au long de ce livre, le PIC16F84, bien que vieillissant un peu, dispose encore de nombreuses ressources et risque de faire parler de lui encore un certain temps. Difficile apprhender en premier lieu, celui-ci simpose comme llment indispensable pour de nombreux montages, tant par son rapport qualit/prix, que par ses capacits ; son principal handicap tant le nombre limit de ses entres/sorties. Il est programmable avec un minimum de difficults, ce qui fait de lui le microcontrleur parfait pour les amateurs dbutants. Quand aux utilisateurs confirms, ils apprcient lensemble de ses fonctions leurs justes valeurs, et savent repousser les limites du PIC par de petites astuces, toutes plus ingnieuses les unes que les autres. De mme, le matriel de programmation et de test, requiert le minimum de connaissances que lon peut demander un amateur. De fait, lamateur apprciera utiliser le PIC 16F84 tant il saura lui simplifier la vie pour tous ses montages, quels quils soient. Pour conclure, nous pouvons dire que dans bien des cas, le PIC 16F84 nous permettra darriver nos fins avec un minimum de difficults, et un maximum de simplicit.

Ce document est la proprit intellectuelle de son auteur - 66 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 8 : LEXIQUE
Adresse : correspond lendroit o lon peut trouver les informations recherches Architecture : terme servant dfinir la faon dont est organise la structure dun Circuit Intgr, tel un microcontrleur Bit : unit de base en informatique BUS : sorte dautoroutes pour les signaux, les BUS servent transporter les informations entre deux parties du Circuit Intgr Code : nom donn au texte constituant un programme informatique DIL : norme de Circuit Intgr, dfinissant notamment les carts entre les pattes EPROM : Electrically Erasable Programmable Read Only Memory ; se dit dune mmoire qui peut scrire et surtout seffacer lectriquement Flash : nouveau type de mmoire, avec de nouvelles possibilits Microcontrleur : Circuit Intgr (CI), contenant la fois un processeur, des mmoires, et des entres/sorties externes Octet : ensemble de 8 bits Oscillateur : se dit dun composant, ou ensemble de composants capables de gnrer un signal rgulier PCB : nom donn aux typon, servant tirer les plaques de circuit imprim Port : se dit dun ensemble, dun groupement dentres/sorties RAM : Random Access Memory, aussi appele mmoire vive, ce type de mmoire perd toutes ses informations stockes, lorsquelle cesse dtre alimente RISC : Reduced Instruction Set Computer ; se dit dun processeur, ou microcontrleur, possdant un nombre dinstructions de programmation rduits, limits Schma dimplantation : schma montrant la faon, et le sens si ncessaire, dont doivent tre monts les composants sur le circuit imprim Schma Structurel : schma montrant les reprsentations schmatiques des composants, avec leurs liaisons lectriques, correspondant aux pistes du PCB Tlcharger un programme : action de copier le code du PC dans le microcontrleur

Ce document est la proprit intellectuelle de son auteur - 67 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 9 : LIENS INTERNET UTILES


Herv Hollard, cours de langage C : - http://perso.club-internet.fr/hhollard/ -http://perso.club-internet.fr/hhollard/prog_pic_c.htm Adresse pour le programmateur de PIC : -http://www.jdm.homepage.dk/newpic.htm -http://www.jdm.homepage.dk/pcb2.htm Adresse de Microchip : http://www.microchip.com/ Adresse du compilateur CC5X : http://www.bknd.com/cc5x/index.shtml Adresse de lauteur: http://diablotronic.bzh.bz

Ce document est la proprit intellectuelle de son auteur - 68 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

CHAPITRE 10 : ANNEXES
Gnration de musique : /*************************************************************/ /****************Gnration de son avec PIC*************/ /*************************************************************/
/*Ce programme permet de gnrer du son avec un PIC, par modulation de frquence, de signal carr, sur un HP. Le HP est branch sur la patte 0 du PORTA. Au niveau de la ss-fct HP, nous pouvons voir une boucle de test sur dur. Des problmes apparaissent pour un dur>100; d'o cette boucle de test, permettant d'aller jusqu' 200. Donc, si vous voulez augmentez cette capacit, n'oubliez pas de recrer une boucle de test sur 200. A noter que ce programme ne possde pas d'algorithme afin de corriger les dures des notes en fonction de leur frquence. Par consquent, pour une dure donne, plus la note sera aigu (frquence plus rapide), moins elle sera audible longtemps. N'oubliez pas de tenir compte de ce petit problme. Peut-tre ce problme sera-t-il modifi plus tard. La dure dpend galement de votre frquence d'horloge. Seul des tests vous permettront de dterminer les bon temps. Les notes dfinies, sont dans l'ordre, celles de la cl de sol. Pour dautres notes, i faudra se rfrer au tableau de frquence et faire vous mme le calcul. Calculez la priode (T=1/F en ms), puis divisez par 0,02. Vous aurez alors la valeur quivalente du soft. La tempo inter() est mettre entre chaque note joue, afin de pouvoir faire une distinction correcte de chaque note. Exemple d'appel: HP(SOL, 75);*/ bit son @ PORTA.0; const int do=180; const int r=170; const int mi=150; const int fa=145; const int sol=128; const int la=107; const int si=101; const int do=93; const int r=86;

void delay (int mill); void inter (void); void HP (int note, int dur); void main (void) { TRISA=0x00; TRISB=0xFF; }

Ce document est la proprit intellectuelle de son auteur - 69 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

void delay (int mill) { OPTION=0 ; do { TMR0=0 ; while(TMR0<1) ; }while(--mill>0) ; } void inter (void) { int i, j=500; for(i=0;i<50;i++) delay(j); }

void HP (int note, int dur) { int i; if(dur>100) { for (i=0;i<dur-100;i++) { son=1; delay(note); son=0; delay(note); } for(i=0;i<100;i++) { son=1; delay(note); son=0; delay(note); } } else for (i=0;i<dur;i++) { son=1; delay(note); son=0; delay(note); } }

Ce document est la proprit intellectuelle de son auteur - 70 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Gestion dun LCD avec HD44780 : /***************************************/ /****gestion d'un afficheur LCD****/ /**************************************/
/*Cette fonction permet d'utiliser un afficheur LCD parallle en 8 bits. Attention tout de mme car des diffrences peuvent apparatre d'un cran l'autre, notamment au niveau des adresses mmoires, selon le nombres de lignes de l'cran, vous aurez donc changer quelques valeurs dans 'initialisation. remarque sur le LCD: quand RSOFF est actif, les donnes( DATA) sont pr la gestion du LCD. quand RSON est actif, les donnes, sont pour l'affichage (code hexa) Pour qu'une donne soit prise en compte, il faut la placer sur DATA, puis appeler valid_DATA (cration d'un front descendant)*/

//Declaration des librairies ncessaires #include "MATH16.H" #include "MATH24F.H"

//Renommage des E/S char data@PORTB; #define ENABLE PORTA.1=1 #define DISABLE PORTA.1=0 #define RSON PORTA.0=1 #define RSOFF PORTA.0=0

//Declaration des fonctions utiles void delay(int mill); void valid_DATA(void); void init_LCD(void);

void delay(int mill) { OPTION=2; do { TMR0=0; while(TMR0<125) ; }while(--mill>0); }

void valid_DATA(void) { delay(1000);

Ce document est la proprit intellectuelle de son auteur - 71 -

Document crit par Alexandre GALOD


ENABLE; delay(1000); DISABLE; delay(1000); }

Le PIC 16F84 :lessentiel

void init_LCD(void) { RSOFF; delay(1000); data=0x30; valid(); valid(); valid(); data=0x38; valid(); data=0x0C; valid(); data=0x01; valid(); data=0x06; valid(); delay(1000); }

Ce document est la proprit intellectuelle de son auteur - 72 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Conversion numrique hexadcimal :


/*Ce petit sous programme permet de convertir un nombre dcimal en son code hexa, ce qui est fort pratique, lorsqu'on doit afficher le rsultat d'une opration (effectu en dcimal) sur un afficheur LCD (code a envoy en hexa)*/ void conv_nbr(int val) { switch(val) { case 0: aff=0xFE; break; case 1: aff=0x98; break; case 2: aff=0xB7; break; case 3: aff=0xBD; break; case 4: aff=0xD9; break; case 5: aff=0xED; break; case 6: aff=0xEF; break; case 7: aff=0xB8; break; case 8: aff=0xFF; break; case 9: aff=0xF9; break; case 10: aff=0xFB; break; case 11: aff=0x8F; break; case 12: aff=0x87; break; case 13: aff=0x9F; break; case 14: aff=0xF7; break; case 15: aff=0xE3; break; } }

Ce document est la proprit intellectuelle de son auteur - 73 -

Document crit par Alexandre GALOD

Le PIC 16F84 :lessentiel

Gestion dun clavier 12 touches :


/*************************************************/ /******Gestion d'un clavier 12 touches*******/ /*************************************************/ /* Ce petit sous programme vous permettra de connaitre quel touche est enfonce. */ char data@PORTB; int clavier (void) { TRISB=0x0F; int i, nb, touche, rd, c; for (i=0;i<4;i++) { data=(0x10)*2^i; rd=data&0x0F; switch(rd) { case 0x00:break; case 0x01:c=1; break; case 0x02:c=2; break; case 0x04:c=3; break; } nb=3*i+c; if(nb<=9) touche=nb if(nb==10) touche='*'; if(nb==11) touche=0; if(nb==12) touche='#'; } return (touche); }

Ce document est la proprit intellectuelle de son auteur - 74 -