Logiciels > Programmation PIC > Conseils

Dernière mise à jour : 02/12/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, microcontrôleur qui fait partie des composants programmables et qui ne peut rien faire tant qu'il n'est pas programmé (préparé à accomplir les tâches qu'on attend de lui). 

Pour mes montages, je propose un service gratuit de programmation de PIC, dont les détails sont donnés à la page Service - Programmation microcontrôleurs

Pour ceux qui veulent programmer eux-même un PIC avec le fichier binaire compilé *.hex que je mets à disposition sur mon site, il convient de suivre les recommandations et conseils que je donne ci-après. En cas de soucis, il faudra approfondir ses recherches côté matériel, car le problème n'est pas forcément logiciel.


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 à faire est de s'assurer que le PIC que vous voulez programmé est bien dans la liste de ceux qui sont supporté par votre programmmateur. Si ce dernier 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 composants supportés sera forcement plus faible. Je ne peux en aucune manière 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é coller à un standard 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 il ne tourne pas à la bonne vitesse).
4 - L'oscillateur est capricieux : soit il ne démarre pas du tout, soit il démarre occasionnellement, soit il démarre et s'arrête sans raison.

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.
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).
4 - Probablement un problème lié aux composants utilisés ou aux connexions (pistes CI inadéquates ou fils de câblage trop longs).
Les lignes qui suivent énumèrent les points à vérifier en premier, causes les plus fréquentes de mauvais fonctionnement.

Remarque

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.

On peut se trouver en présence de trois cas de figure possibles, selon l'usage du PIC et de ce qui l'entoure :


Configuration CLK/CLOCK INT/EXT (oscillateur interne / externe)

Pour tout ce qui concerne le 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).


Remarques

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 rapidement que prévu 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.


Oscillateur capricieux, démarrage impossible ou aléatoire

Là, le problème ne se situe plus au niveau logiciel (la configuration a été vérifiée et est correcte) mais au niveau matériel. Il existe plusieurs types de quartz et de résonateurs céramique (pour une même fréquence) et selon le type employé, le démarrage de l'oscillation peut être plus ou moins aléatoire. Pourquoi ? A cause de la topologie employée pour la section oscillateur du microcontrôleur, qui réclame un circuit passif oscillant doté de caractéristiques techniques particulières. 

Dans la mise en oeuvre la plus simple, avec un quartz ou résonnateur céramique associé à deux condensateurs reliés à la masse (ou au +alim), le démarrage de l'oscillation est généralement assuré tant qu'on travaille à une fréquence inférieure ou égale à 4 MHz. Au delà, ça devient parfois rigolo.


Valeur des condensateurs pour quartz ou résonateur céramique

En théorie, on devrait donner aux condensateurs de la partie oscillateur les valeurs préconisées par le fabricant du microcontrôleur : pour cela Microchip préconise dans ses documents techniques (datasheet) des valeurs précises en fonction de la fréquence de travail désirée. Par exemple pour le PIC 18F2520 cadencé avec l'aide d'un résonateur céramique, un tableau recommande les valeurs suivantes :


logiciels_uc_osc_caps_001a

Dans le même document, Microchip fait deux recommandations quand la fréquence du résonateur céramique est supérieure à 3,5 MHz.

- utiliser le mode oscillateur HS plutôt que le mode XT;
- ajouter une résistance entre résonateur et borne OSC2 du PIC (valeur proposée comme point de départ : 330 ohms).

Pour la valeur des condensateurs, le même type de recommandation s'applique si on utilise un quartz (crystal dans le texte anglais), voir tableau suivant.


logiciels_uc_osc_caps_001b

Ces valeurs sont proposées comme point de départ, quand on ne connait pas les caractéristiques internes du quartz utilisé. Elles ne constituent en aucun cas une garantie de bon fonctionnement. Avec la même installation et les mêmes valeurs de composants, on peut très bien avoir une oscillation qui démarre à chaque coup avec un quartz donné, et qui ne démarre pas ou qui réagit sporadiquement avec un autre type de quartz de même valeur.

Remarques

Alimentation "variable" et température

Il est des cas où, tout content, vous constatez que le montage est opérationnel (l'oscillateur démarre bien) au moment des premiers tests sur votre table de travail. Et puis sur le terrain, rien ne va plus... Que peut-il donc se passer ? Eh bien, entre le labo et le terrain, on peut déjà observer une différence de température ambiante. Et puis l'alimentation n'est peut-être plus exactement la même. Un oscillateur à quartz ou avec résonateur céramique peut être chatouilleux de ce côté là. S'il fonctionne bien à +20 °C et avec une alim de +5,1 V, rien ne dit qu'il fonctionnera à coup sûr sous une tension de +4,9 V et dans une ambiance de +10 °C ou +30 °C. Les différences peuvent paraître subtiles à première vue, mais quand un oscillateur est à la limite de l'oscillation (qu'il démarre mais avec un peu de peine), il lui en faut peu pour le bloquer. 

Il est donc important, pour un montage qui joue un rôle "important", de s'assurer qu'il fonctionne toujours dans des conditions d'utilisations "variables" ou extrêmes. Pour cela, rien de bien compliqué : lors des tests en labo (je veux dire sur votre table de cuisine), prévoyez d'alimenter le circuit avec une alimentation ajustable et réglez-là sur des limites que vous jugez acceptables. Si par exemple votre circuit est prévu pour fonctionner avec un régulateur de +5 V (LM7805 par exemple) et que ce dernier délivre en réalité une tension de +5,1 V, essayez votre montage avec l'alimentation variable réglée aux valeurs +4,8 V, +5,1 V et +5,3 V. Pour la question de la température ambiante, utilisez un sèche-cheveux (ou décapeur thermique mais alors allez-y mollo) pour arroser d'air chaud la zone concernée (uC, quartz ou résonateur et condensateurs). Vous constaterez peut-être alors une chose rigolote : un oscillateur qui fonctionnait bien et qui s'est bloqué suite à "variation ambiance" (surchauffe ou surtension par exemple) ne redémarre parfois qu'après un arrêt / marche de l'ensemble. D'où l'intérêt évident d'un chien de garde...


Autres paramètres coquins

Les paramètres décrits ci-avant ne sont pas les seuls à regarder de près si ça ne fonctionne toujours pas. En voici quelques autres qui peuvent vous donner du fil à retordre dans ces situations que vous savez rarissimes mais qui tombent forcément sur vous. 

Attention, ce que j'indique ci-après est valable pour les programmes que je propose sur mon site, ça ne l'est pas forcément pour les programmes d'autres auteurs !


WDT (WatchDog Timer)

Sauf indication contraire dans le texte descriptif du montage, ce paramètre doit être désactivé (DISABLED).
S'il est activé et si rien n'est fait dans le logiciel pour en tenir compte, le PIC se réinitialise en permanence et le programme ne fonctionne pas.


LVP (Low Voltage Programming)

Sauf indication contraire dans le texte descriptif du montage, ce paramètre doit être désactivé (DISABLED).


BOR/DOD (Brown-Out Reset ou Brown-Out Detect)

Sauf indication contraire, ce paramètre peut rester activé (ENABLED).
Si vous le désactivez, ce n'est pas grave ;-)


Problèmes fréquents

Si vous constatez un problème lors de la programmation ou lors de la vérification après programmation (de type "verification of xxxx failed at address 0xyyyy"), cela peut avoir plusieurs causes :


Malgré tout ce qui précède...

Un PIC peut très bien donner satisfaction à un endroit (chez moi ou sur une de vos maquettes) et ne plus fonctionner correctement ailleurs (autre prototype ou circuit final). Il existe en effet des applications où on en demande beaucoup au composant et où le routage des pistes du circuit imprimé revêt une grande importance. Le tracé des pistes doit répondre à des règles strictes quand on travaille avec des fréquences élevées, des niveaux de tension très faibles ou des courants d'intensité élevée (vous comprendrez qu'il m'est impossible d'énumérer ces règles ici). Si du côté logiciel tout vous semble correctement établi, pensez à vérifier tout ce qui se rapporte aux paramètres physiques :

- fil de câblage les plus courts possible (prévoyez des marges de mouvement raisonnables)
- capacité parasite entre bandes de contacts sur votre plaque sans soudure (critique en haute fréquence) ?
- mauvaise soudure ou simplement court-circuits entre pistes ou entre pistes et pastilles;
- etc.

Historique

02/12/2012
- Ajout infos sur paramètres coquins.

23/09/2012
- Ajouts informations concernant les démarrages parfois capricieux des oscillateurs à quartz ou résonateur céramique.

05/02/2012
- Première mise à disposition.