Le materiel necessaire pour programmer les PIC
Les mots ecrits en vert sont explicités à la fin de la page.
Notre premier exemple: clignotement d'une LED à l'aide du chien de garde.
Voici
le schema de cablage, vous pouvez réaliser ce petit montage
sur plaquette d'essais:
Explications
et conseils: R1 et C1 servent pour l'horloge du PIC. On doit avoir
5k < R1 < 100k et C1 > 20pF.
C2 sert à découpler
l'alimentation (alim plus stable).
N'oubliez pas de relier la
patte RESET au +5V.
Attention l'alimentation doit etre de bonne
qualité et valoir de 4.5V à 5.5V
La norme voudrait
qu'on relie toutes les entrées inutilisées à
un potentiel (masse ou +5V). C'est à faire si vous voulez
que le PIC consomme moins ...
Le
cablage sur plaque d'essais:
C'est l'exemple classique pour débuter. Je vais cependant tenter de l'expliquer clairement.
Vous pouvez cliquer ici pour telecharger le programme (au format .asm. Il faudra le compiler avec MPASM. Regardez les pages precedentes pour plus d'informations)
list p=16f84,f=inhx8m __config B'11111111110111' #include "p16f84.inc" bsf STATUS,RP0 movlw B'00001101' movwf OPTION_REG movlw B'11111110' movwf TRISB bcf STATUS,RP0 Boucle sleep comf PORTB,1 goto Boucle end |
Détaillons la fonction de chaque ligne de ce programme:
list p=16f84,f=inhx8m: permet de dire au compilateur le type de PIC utilisé (16F84), et indique le format de fichier.
__config B'11111111110111': configure le PIC pour que le code ne soit pas protégé, on utilise la temporisation de démarage, on utilise le chien de garde, et l'oscillateur est de type RC.
#include "p16f84.inc": Ce fichier qui est fournit avec le compilateur de Microchip contient la définition des instructions que vous écrivez. Grace à ce fichier, le compilateur va pouvoir traduire les insctruction que vous écrivez en chiffres comprehensibles par le PIC.
bsf STATUS,RP0: Sert à choisir la zone memoire n°1 (page 1). Cette zone memoire contient un certain nombre de registres de configuration (= variables pour configurer le PIC). En clair, pour pouvoir configurer le PIC, il faut generalement passer dans la zone memoire n°1 (bank 1), car c'est la que se trouvent la majorité des registres de configuration.
movlw
B'00001101': On transfert la valeur
binaire 00001101 dans le registre de travail W.
Je rapelle que
W est une variable "à tout faire". C'est par
exemple elle qui sert à transferer une valeur dans une
variable.
movwf
OPTION_REG: On transfert le contenu
de W (c'est à dire B'00001101') dans le registre (=
variable) "OPTION_REG".
Ceci a pour effet de
configurer le PIC.
En partant de la gauche, les quatre premier
"0" signifient qu'on n'utilise pas les interruptions,
....
Le "1" qui suit signifie que le prédiviseur
est utilisé par le chien de
garde
Quant au "101", il sert à définir
la valeur du prédiviseur. 101
=> prédivision par 32, mais d'autres valeurs sont
possibles: 000 => pas de predivision, 111 => prédivision
par 128, ...
movlw B'11111110': On transfert la valeur binaire 11111110 dans le registre de travail W.
movwf
TRISB: On transfert le contenu de W
(c'est à dire B'11111110') dans le registre (= variable)
"TRISB".
Cette variable permet de définir
quelles pattes sont en entrée, et quelles pattes sont en
sortie. Le port B comporte 8 pattes
(n°6 à n°13), Chaque bit de TRISB à 1
configure une patte en entrée, et chaque bit à 0
configure une patte en sortie. Ici, seul la patte 6 (bit 0 de port
B) est en sortie. C'est sur cette patte qu'on branche la
LED.
Notez que par defaut toutes les pattes du port A et B sont
configurées en entrée.
bcf STATUS,RP0: Maintenant que toutes les configurations sont finies, on repasse dans le zone memoire n°0, et on va commencer le programme en lui meme.
Boucle:
C'est un label. On pourrait le comparer à une borne
kilometrique qui sert à savoir à quel endroit on est
sur une route.
Dans le cas du PIC, le label sert à
reperer un endroit du programme.
On s'en servira par la suite
pour revenir plusieurs fois à cet endroit du programme.
Le
nom "Boucle" est donné par le programmeur, on
aurait pu mettre "fleur", ou ce que vous voulez!
sleep:
ca "endort" le PIC (le met en veille).
Pour le
reveiller, il faut que le chien de garde
entre en action, ce qu'il va faire au bout de 0.576 Secondes
environ.
En effet, lorsqu'on active le chien de garde (voir
plus haut), ce dernier entre en action au bout de 18mS
d'inactivité du PIC. Si en plus on utilise le prédiviseur,
ce temps est multiplié par la valeur du prédiviseur
(32 dans notre cas): 0.018 * 32 = 0.576 secondes.
comf
PORTB,1: permet d'inverser l'etat des
sortie du port B. Toutes les sortie
qui etaient à 0 passent à 1, et toutes les sorties
qui etaient à 1 passent à 0.
Dans notre cas,
seule la patte 6 du PIC changera d'etat.
goto Boucle: retourne au label "Boucle" (voir plus haut). On execute donc la partie de programme contenue entre "boucle" et "goto boucle" tant que le PIC est allumé.
end: Il est indispensable pour le compilateur.
Pour bien assimiler le
fonctionnement du programme, voici un petit résumé du
fonctionnement:
~ Supposons que la LED est eteinte.
~ Le
PIC lance alors une temporisation de 0.576 secondes. La LED va
rester eteinte pendant ce temps.
~ La tempo etant finie, le PIC
allume alors la LED. et revient au label "Boucle"
~ Le
PIC lance alors une temporisation de 0.576 secondes. La LED va
rester allumée pendant ce temps.
~ La tempo etant finie,
le PIC eteint alors la LED. et revient au label "Boucle"
~
Et ainsi de suite.
Quelques définitions:
Chien de garde (WDT): C'est une fonction du PIC qui permet de savoir si une instruction dure "trop" longtemps (peut etre désactivé). Cette fonction peut par exemple servir à faire des temporisations: On "endort" le PIC, le chien de garde detecte que ca dure trop longtemps, et il "reveille" le PIC.
temporisation de démarage: le PIC attend 72 mS avant d'executer le programme lorsqu'on l'allume. Ceci permet d'attendre la stabilisation de l'oscillateur.
Oscillateur
RC: voir le schema. Pour fonctionner, le PIC a besoin d'une
horloge, et là l'horloge est réalisée avec un
condensateur et une resistance, d'où le nom "RC".
Par
la suite nous utiliserons plutot des oscillateurs à quartz.
Configurer le PIC: Lorsqu'on configure le PIC, on dit quelles pattes sont en entrée, quelles autres sont en sortie, ....
Prédiviseur du chien de garde: ca sert à fixer le temps que met le chien de garde pour entrer en action. Si le prediviseur est à zero, le chien de garde entrera en action apres environ 18mS d'inactivité du PIC. Si le prédiviseur est à 128 (c'est à dire que les 3 derniers bits de OPTION_REG sont à 1), le chien de garde entrera en action apres environ 18m * 128 = 2.3 secondes.
PORTB: c'est un registre (variable) de 8 bits qui contient les etats des sorties du pic. Par exemple si PORTB = B'00010011', les sorties 1, 2, et 5 (pattes 6, 7 et 10) sont au niveau logique "1", les autres sont à zero.
Ecrivez nous: xizard@enib.fr et rbourdon@enib.fr