Dernière mise à jour : 05/02/2012
Présentation
L'envie de réaliser un montage électronique qui
comporte un composant programmable est parfois de nature à rebuter le
débutant. Certains de mes montages comportent un PIC, qui est un
microcontrôleur et qui fait partie des composants programmables qui ne
peut rien faire tant qu'il n'est pas préparé à accomplir
les tâches qu'on attend de lui, à savoir tant qu'il n'est pas
programmé. En ce qui concerne mes montages, je propose un service
gratuit de programmation de PIC, dont les détails sont donnés à la page
Programmation PIC - Sources.
Pour ceux qui veulent programmer eux-même un PIC avec le fichier
binaire compilé *.hex que je mets à disposition, il convient de suivre
les recommandations et conseils que je donne ci-après.
J'utilise vos fichiers hex et ça ne marche pas !
Il existe
dans la nature une multitude de programmateurs de PIC, commercialisés
ou faits maison. Certains fonctionnent bien avec certains PIC et
pas ou mal avec d'autres. La première chose est donc de connaître la
liste des composants que votre programmmateur est supposé supporter,
pour savoir si vous pouvez programmer tel ou tel modèle de composant.
Si votre programmateur dispose de plusieurs supports de tailles
diverses, il y a de fortes chances qu'il puisse programmer un grand
nombre de références. S'il ne possède qu'un seul support (par exemple
un support à 18 broches) le nombre de boîtiers supportés sera forcement
plus faible. Je ne peux pas garantir à 100%
que les fichiers *.hex compilés que je mets à disposition sur mon site
conduiront à un
fonctionnement sûr avec votre programmateur, même si un fichier
*.hex
est censé répondre à un standard qui doit être reconnu et accepté par
le plus grand nombre de programmateurs. J'ai plusieurs types de retours
de la part de ceux qui ont programmé eux-mêmes un PIC avec mes fichiers
compilés :
1 - Ca
fonctionne, merci !
2 -
Impossible de programmer le PIC, merci de m'aider.
3 - La
programmation s'est bien déroulée mais le PIC ne tourne pas ou tourne à
une mauvaise vitesse d'horloge.
Voici ce que je peux dire en réponse à ces messages :
1 - Ca
fonctionne ? J'en suis ravi et je vous remercie pour votre retour
positif !
2 -
Impossible de programmer le PIC ? Là je ne peux pas grand chose, il
faut lire le mode d'emploi de votre programmateur et vérifier toutes
les étapes une par une.
3 -
Programmation OK mais déroulement programme inattendu ? Il y a 95% de
chances que le problème vienne de la configuration des fusibles,
notamment celui du reset général (MCLR) ou ceux liés aux modes
d'horloge (CLOCK / CLK).
Les
lignes qui suivent énumèrent les points à vérifier en premier, car il
sont les causes les plus fréquentes de mauvais fonctionnement.
Remarque
- Les
fichiers .*hex que je mets à disposition comportent des informations de
configuration (MCLR, OSC, etc). Certains programmateurs en tiennent
compte et au final ça doit fonctionner sans que vous ayez besoin de les
spécifier manuellement (par précaution, il faut tout de même les
vérifier). Si votre programmateur ne tiens pas compte de ces
informations, vous devrez les spécifier manuellement, c'est pourquoi
vous devez savoir à quoi ils se rapportent, les lignes qui suivent en
parlent pour ça.
- Je ne connais pas d'autres programmateurs que
le
mien, aussi merci de ne pas me demander comment configurer le votre.
Faites l'effort de chercher un peu dans le manuel utilisateur qui
existe forcement.
Configuration MCLR (Master Clear, remise à zéro)
La
broche MCLR peut avoir deux fonctions qui sont définies par un
"fusible" (FUSE en anglais) appelé à juste titre MCLR et qui peut
prendre deux valeurs, ON ou OFF.
- Si
MCLR = ON, cela signifie que la broche est utilisée en tant que broche
de remise à zéro. Cette broche fonctionne selon une logique "négative",
le reset est actif à l'état logique bas et le microcontrôleur tourne
normalement avec un état logique haut. Tant que cette broche est placée
à l'état logique bas le programme du PIC ne tourne pas, et dès qu'elle
passe à l'état logique haut le programme démarre.
- Si
MCLR = OFF, cela signifie que la broche est utilisée en tant que broche
d'entrée sortie logique standard (le plus souvent en entrée seulement).
Le programme du PIC commence donc à tourner dès la mise sous tension du
composant, sans tenir compte de l'état logique de cette broche.
On peut se trouver en présence de trois cas de figure possibles, selon l'usage du PIC et de ce qui l'entoure :
- soit
cette broche MCLR sert de broche de remise à zéro, pour permettre à
tout instant une réinitialisation complète du microcontrôleur - en
général avec un bouton poussoir. Dans ce cas vous devez spécifier
qu'elle doit être utilisée en broche
de reset (MCLR=ON).
- soit cette broche sert d'entrée logique standard. Dans ce cas
vous devez spécifier que la broche MCLR est utilisée comme "entrée /
sortie" (MCLR=OFF).
- soit cette broche n'est pas du tout utilisée. Dans ce
cas deux solutions possibles :
- spécifier la broche MCLR comme "entrée / sortie" (MCLR=OFF) et ne la relier à rien.
- spécifier la broche MCLR comme broche
de reset (MCLR=ON) et la relier en permanence au
+alim (+5 V la plupart du temps).
Configuration CLK/CLOCK INT/EXT (oscillateur interne / externe)
Pour tout ce qui est choix du mode oscillateur, je vous invite dans un premier temps
à consulter la page PIC
- Configuration oscillateur.
Une fois cette page lue, vous devriez être plus à même de savoir lire le
schéma et de déterminer si pour tel ou tel montage l'oscillateur est de
type interne ou externe. Voici en résumé ce que je peux dire en ce qui
concerne mes propres montages (globalement vrai aussi pour les autres montages qui ne sont pas de moi).
- Si
les broches d'horloge OSC1/CLKIN/CLKI et OSC2/CLKOUT/CLKO ne sont
raccordées à rien du tout, c'est que le PIC fonctionne obligatoirement
avec une horloge interne et qu'il n'a besoin d'aucun composant
additionnel pour faire tourner son programme. Mode OSCINT.
- Si les broches d'horloge OSC1/CLKIN/CLKI et
OSC2/CLKOUT/CLKO sont
raccordées à un quartz et à deux condensateurs, c'est que le PIC
fonctionne avec une horloge interne mais qu'il fait usage d'un
quartz pour une meilleure précision. Mode XT (Crystal) ou HS (High
Speed) par exemple.
- Si
la broche d'horloge OSC1/CLKIN/CLKI est raccordée au point
médian d'une cellule RC (résistance et condensateur), cela
signifie que le PIC fonctionne avec une
horloge interne avec réseau RC externe. Mode RC.
- Si la broche
d'horloge OSC1/CLKIN/CLKI est raccordée à la sortie d'un
oscillateur externe, cela signifie que le PIC
fonctionne avec une horloge externe.
Remarques
- Pour
certains montages, il m'arrive de définir une configuration
d'horloge qui peut au choix être interne sans quartz ou interne avec
quartz externe. Quand c'est le
cas, je dessine les composants requis pour la partie externe de
l'horloge, je précise dans le
texte que ces composants sont optionnels, et je fourni deux fichiers
compilés *.hex, pour les deux versions avec et sans quartz
externe.
- En
mode horloge interne sans quartz externe, il est en général possible de
spécifier si la broche OSC2/CLKOUT/CLKO doit être utilisée en tant que
broche d'entrée / sortie ou si elle doit faire ressortir le signal
d'horloge qui est généré en interne. Quand ladite broche n'est pas
utilisée, ce choix n'a aucune importance, mais autant la configurer en
tant que broche de sortie d'horloge car cela permet de vérifier
rapidement si la fréquence de fonctionnement est bien celle attendue
(mesure à l'osciloscope ou au fréquencemètre).
Configuration CLOCK (fréquence d'horloge)
Une
mauvaise configuration d'horloge peut conduire à des résultats curieux,
surtout quand le programme du PIC utilise des routines qui ont une
notion avec le temps. Il ne suffit pas de spécifier le mode d'horloge -
qui ne fait que dire au PIC comment il doit travailler pour son
cadencement, il faut aussi lui dire à quelle vitesse il doit
travailler. Supposons par exemple que pour un programme donné on
indique au PIC qu'il doit travailler à une fréquence d'horloge de 1 MHz
avec un quartz externe de 1 MHz. Les opérations qu'il va dérouler au fil
de l'exécution de son programme vont s'effectuer à la bonne
vitesse seulement si le quartz mis en place est effectivement un modèle
1 MHz, et si la valeur spécifiée lors de la programmation du PIC est
elle aussi de 1 MHz. Si la valeur d'horloge du PIC qui est spécifiée
est de 32 kHz (par erreur ou par oubli) et que le quartz est un modèle
1 MHz, le programme va s'exécuter beaucoup plus vite que la normale et
vous verrez parfois qu'il se passe quelques chose mais que ça ne
fonctionne pas bien. A l'inverse, si le PIC est configuré sur 8 MHz
alors que le quartz est un modèle 1 MHz, le programme va s'exécuter
beaucoup plus lentement, et vous aurez l'impression (à juste titre) que
quelque chose cloche. Le plus amusant est quand on est patient, et
qu'on constate que le PIC commence à se manifester au bout de plusieurs
secondes seulement. Le paramètre "Fréquence d'horloge" est, vous l'avez
compris, très important et vous devez toujours vous assurer que la
valeur spécifiée au moment de la programmation du PIC est celle que
l'auteur du montage a désignée.