Le coin du PIC
par Daniel Ranc (Pilatus PC6)
Introduction
pourquoi une rubrique sur les micro-contrôleurs ?
L’aéromodélisme n’échappe pas à la tendance générale de l’informatique envahissant peu ou prou l’ensemble des activités humaines. Ainsi, un avion RC classique en vol
met en jeu au moins : le ou les processeur(s) de la télécommande, celui du récepteur et celui du contrôleur s’il est électrique. La maîtrise des micro-contrôleurs peut rendre de grands services à l’amateur RC (mais aussi pour de nombreux autres domaines qui vont de la sécurité d’accès à la commande d’une rôtissoire). Toute une série de problèmes se résolvent ainsi soit uniquement, soit plus élégamment grâce à cette technique.
qu’est-ce qu’un micro-contrôleur ?
Il s’agit d’un processeur ou calculateur informatique (similaire à un processeur de PC, en moins puissant) muni in situ de nombreuses extensions (mémoire vive, mémoire
programme, interfaces, bases de temps, convertisseurs analogique/numérique etc.) permettant la conception de montages mettant en oeuvre un minimum de composants externes, voire aucun dans de nombreux cas.
pourquoi le PIC ?
La famille des micro-contrôleurs est très diverse. Quelques fabricants émergent, notamment Atmel (avec les AVR), Microchip (PIC) ou Motorola (68HCxxx). Il n’y a pas
d’arguments à proprement parler rationnels pour choisir plutôt l’un que l’autre. Néanmoins la gamme PICmicro de Microchip est sans doute la plus répandue chez les
modélistes et autres : le résultat est un nombre impressionnant de ressources consacrées au PIC et librement disponibles sur le web. Cet aspect facilite grandement la conception des montages, et c’est donc pourquoi ce contrôleur est proposé ici.
Le trajet de la maîtrise du PIC
la formation
La décision une fois prise, le débutant abordera sa formation. Le néophyte en électronique/informatique aura avantage à lire quelques ouvrages généraux d’initiation.
Le PIC lui-même fait l’objet d’une somme, sorte de chef-d’oeuvre de la transmission de connaissance désintéressée : le
cours
PIC de bigonoff. Sa lecture est très vivement
recommandée ! On se munira d’autre part des datasheet des composants et du Midrange Reference Manual, disponibles chez
Microchip. Enfin, Microchip propose un large éventail de notes d’application : il est bien rare de ne pas y trouver quelque renseignement utile.
organisation de votre "bureau d’études PIC"
La mise en oeuvre du PIC nécessite de procéder aux étapes classiques de développement de l’informatique embarquée :
-
conception du montage électronique
-
conception et programmation du logiciel, et transfert de ce dernier dans le PIC
Ces tâches ne sont pas indépendantes, mais au contraire liées. Le montage est le résultat de la combinaison matériel et logiciel.
Côté électronique on se munira des outils traditionnels : fer à souder fin, fil de câblage multicolore, plaques d’essai pastillées, ohmmètre, oscilloscope si possible, mais un émulateur d’oscilloscope sur PC dépanne. Il faudra enfin construire ou trouver une petite alimentation 5V (mais vous pouvez aussi détourner à cet effet votre pack d’accus 4,8V).
Le logiciel sera écrit soit en assembleur, soit en C. Pour déboguer on se servira du simulateur de MPASM ou de gputils, mais il est indispensable de faire appel à une
interface série capable de témoigner de visu du déroulement de vos algorithmes (cf. montage plaque prototype) en l’absence d’ICE (In Circuit Emulator), hors de portée
de l’amateur.
-
assembleur :
-
Microchip
propose un atelier logiciel complet, y compris
un simulateur, gratuit : MPASM sous windows ;
-
Sous Linux on dispose des excellents
gputils et de
pikdev qui est un environnement
intégré graphique se servant des précédents ;
-
C :
-
le CC5X de BKND existe en version limitée (1 kO de code max : largement suffisant ici) gratuite, sous windows ;
-
le PCWH de CCS, sous windows, est un atelier logiciel complet excellent, mais payant (100 € environ) ;
-
le projet open source SDCC a réalisé un portage pour PIC16 et PIC18. Il s’agit d’un excellent choix
mais une certaine habileté à manier Linux est requise pour l’installer (une version sous windows/CygWin existe néanmoins). On trouvera à ce sujet une aide ici. Une combinaison comprenant l’éditeur/browser de programmation xcoral , SDCC, gputils et make réalisera un environnement de niveau professionnel.
Quelques mots sur le thème "quel langage utiliser ?". Pour ma part je conseillerai de suivre au moins au début les excellents conseils de bigonoff, et de réaliser au moins
quelques programmes en assembleur. Ceci permet de comprendre en profondeur le fonctionnement du PIC ! Par la suite, cette "culture" en poche, on cèdera au contraire
d’autant plus volontiers à la tentation de réaliser une application en quelques lignes de C. Quant au choix du compilateur C, le CC5X en version gratuite permet de se
familiariser avec cet environnement, mais notons que le compilateur de CCS est bien plus riche d’un point de vue des librairies fournies, et que si l’on connaît Linux, on bénéficiera de SDCC et de la suite gputils. Les exemples fournis ici vous proposent l’usage de CC5X, gratuit, quitte à reprogrammer des fonctions de librairie comme putchar ou printf.
quelques distributeurs
-
selectronic distribue quelques modèles PIC essentiels à Paris ;
-
reichelt , efficace et sérieux, propose presque toute la gamme à des prix intéressants ;
-
conrad est plus connu, mais un peu plus cher et moins bien fourni.
choix du processeur, options matérielles, budget
Parmi la très large gamme Microchip, seuls les modèles réellement disponibles dans le commerce ont un intérêt. On se trouve donc rapidement réduit à quelques références
courantes : le 16F84 obsolète, le 16F628 qui est le modèle d’entrée intéressant, et le 16F876 si l’on a besoin notamment d’un convertisseur A/N. La série 12Fxxx est
intéressante pour les applications miniaturisées, mais n’est disponible qu’en vente en ligne.
L’oscillateur sera de préférence réalisé à l’aide d’un résonateur céramique simplifiant le montage par rapport à un quartz. A noter que le 16F628 dispose d’un oscillateur
intégré de précision suffisante.
Microchip propose depuis quelques temps une nouvelle série 18Fxxxx qui offre une puissance plus élevée, mais aussi une complexité de mise en oeuvre bien plus grande. Je ne
la recommande pas pour l’instant pour l’amateur.
Le budget de mise en oeuvre de votre "bureau d’études PIC" ne dépassera pas quelques dizaines d’euros : un 16F628 coûte environ 6 euros, MPASM est gratuit.
programmeur
Le premier montage à réaliser pour mettre en oeuvre un PIC est le programmeur. Il s’agit d’un montage permettant la programmation de la mémoire EEPROM du PIC (mémoire
programme) à partir du code binaire généré par l’assembleur ou le compilateur. On trouvera dans le web de nombreux exemples de programmeurs qui se classent en deux
familles :
-
les programmeurs de type "interface série" dont le représentant est le JDM. La plupart génèrent la tension de programmation à partir des tensions disponibles sur l’interface série, ce qui est plus ou moins fiable. Ils sont plus simples, donc plus faciles à réaliser ;
-
les programmeurs de type "interface parallèle" (imprimante) de type Tait .
Ils mettent en oeuvre une alimentation externe (donc plus fiable) et sont souvent plus rapides que les précédents, au prix d’une complexité plus élevée sans être rhédibitoire. L’un des meilleurs est sans doute le brenner 3.
Il est à noter que ces programmeurs nécessitent tous de pouvoir commander directement les entrées-sorties des interfaces en question. En d’autres termes, on dépend ici étroitement du matériel "compatible PC" et il est encore difficile de trouver des programmeurs indépendants de cette contrainte (en USB par exemple).
Pour ma part je vous propose un mouton à 5 pattes : un programmeur de type "série" compatible JDM, mais muni d’une alimentation externe. Cette approche conserve la
simplicité, tout en garantissant une tension de programmation correcte.
Ici on se munira d’une alimentation (récupérée d’un vieux GSM ou autre) d’environ 15V continus et d’intensité même très faible (le programmeur ne consomme presque pas de courant). Cette tension est régulée à travers un petit régulateur 12V (pour la tension de programmation) puis un second de 5V (pour alimenter le PIC pendant l’opération). Le signal RS232 "TxD" commande le 12V à travers deux transistors T1 et T2 (T1 est monté en inverseur). Une LED témoigne de l’application du 12V.
Ce programmeur n’a chez moi jamais failli à sa tâche : voyez la photo, le schéma , et installez le (très bon) logiciel de programmation IC-prog sous windows, qui d’ailleurs fonctionnera très bien aussi sous Linux grâce à l’émulateur Wines !
Exemples de montages
La liste qui suit s’enrichira au fur et à mesure des contributions des Mouettes ! A noter pour bientôt : un réchauffeur de glow semi-automatique...
platine de prototypage
Ce premier montage vous permettra de réaliser de nombreux prototypes. Il s’agit simplement d’une platine pastillée recevant un PIC, des rails d’alimentation, une LED et une interface série basée sur le circuit MAX232. La LED est une façon simple de visualiser le fonctionnement de votre logiciel, de façon à faciliter le déboguage. L’interface série vous permettra d’afficher à volonté sur votre PC (muni d’un logiciel de communication tel que Hyperterminal) des valeurs permettant de suivre de visu vos algorithmes.
Le schéma est
ici, la photo est
là, et un petit programme de test (clignotement de LED et envoi de caractères sur l’interface série) pour CC5X est
ici en source ou
ici en code généré.
banc testeur de servos
On a souvent besoin de vérifier le bon état de nos précieux servos, et ce sans devoir déballer un récepteur, un émetteur et leurs accumulateurs. Ce petit montage permet cela très facilement. Il repose sur un générateur de créneaux de commande servo commandé par potentiomètre. Le but du jeu est le suivant : générer des créneaux
conformes, toutes les 20 mS, et de durée variant de 800 à 2000 uS environ. Cette durée est pour le servo la consigne de position angulaire.
La position du potentiomètre est évaluée par mesure de la durée de l’impulsion d’un 555 monté en monostable (impulsion déclenchée par le logiciel) ; l’idée est inspirée de l’interface joystick des PCs et permet de s’affranchir d’un convertisseur A/N dont le 16F628 est dépourvu. Les créneaux de commande sont ensuite générés au moyen du timer0 du PIC ; l’algorithme met en oeuvre les interruptions. Le timer0 est initialisé pour engendrer une interruption toutes les 20 ms ; la routine de traitement de
l’interruption génère le créneau lui-même. Une LED est allumée pendant la durée du créneau, et permet de suivre à l’oeuil les variations de commande. Il est à noter que
les interruptions sont inhibées pendant la mesure du 555, évitant des résultats aléatoires.
La mise au point de ce montage, nécessaire par la dispersion possible de la valeur du condensateur, sera faite en ajustant la valeur d’une constante "measureDelay" (cf. le source) par des essais ou mieux, par suivi des valeurs du compteur sur l’interface série de la platine de prototypage. Consultez la photo, le schéma, le source en C pour CC5X, ou prenez directement le code généré.
Fin.