Le jour où j'ai acheté mon premier ordinateur et mon premier logiciel (un Atari 520ST couplé au logiciel Pro24), j'avais la ferme intention de ne m'en servir que pour faire de la musique. Je me voyais mal faire autre chose avec cet ordinateur. De la programmation ? Jamais de la vie ! ce n'était pas du tout, mais alors pas du tout mon truc ! Puis, pour faire évoluer un peu mes séquences musicales MIDI, j'ai taté le montage audio. A ce moment-là, je disais encore que jamais je ne toucherai au montage vidéo. Promis, juré, craché, pas fait pour moi. Et pourtant quelques années après, je me suis mis à la programmation informatique et au montage vidéo. Hum...
Ce qui m'est arrivé pour les PIC était donc prévisible. Un peu d'électronique par-ci, un peu d'informatique par-là... J'ai fini par craquer et vouloir explorer de nouveaux outils de développement. C'est ainsi qu'en 2007 je me suis lancé dans la programmation des PIC. Bien entendu, comme je n'y connaissais rien et que je n'aime pas me fatiguer pour rien, j'ai cherché une solution qui réclamait le minimum de temps d'apprentissage. Utopique ? Peut-on se lancer dans la programmation des PIC sans avoir à se dépatouiller dans les lignes de code en assembleur ? Voir même sans lire les fameux documents de BigOnOff ?
Figurez-vous que j'avais envie de voir si cela était possible, et ai commencé tout doucement avec mon starterkit EasyPic4 (mon PicKit2 que j'avais aussi sous le coude a été sorti de son emballage des années après, quelle honte), mon compilateur MikroPascal (ce compilateur permet de créer le fichier binaire hex à partir d'un code écrit en langage Pascal, et je me sentais plus à l'aise avec ce langage). J'y suis allé un peu au pif en fin de compte, comme quand j'ai commencé avec Delphi 1 (langage Pascal également, pour du développement Windows).
Quand on parcours les forums de discussion techniques, de nombreuses questions de type "Comment faire clignoter une LED ?" amènent une réponse du type "tu n'as qu'à utiliser un PIC, c'est super simple" (je carricature, mais pas tant que ça). Je ne suis pas tout à fait d'accord, utiliser un PIC pour faire clignoter une LED n'est pas forcement la solution la plus simple, sauf bien sûr pour celui qui connait le PIC et qui est déjà équipé pour le programmer. Je ne parle pas de faire clignoter une LED pour s'initier au PIC, ce qui est totalement différent et chose pour laquelle je suis totalement pour, évidement (ça me semble même être un passage obligé, au même titre que le "Hello World" en développement ordinateur). Pour moi, il n'y a pas plus simple qu'un ou deux transistors, ou un NE555, pour faire clignoter une LED. Alors pourquoi dire que l'usage d'un PIC est très simple ? Parce que le nombre de composants nécessaires pour réaliser des fonctions complexes peut être extrêmement faible ? Peut-être, et dans ce cas, je ne contredirai personne. Mais pour comprendre comment fonctionne un PIC, il faut tout de même se documenter un peu. Et ce n'est pas moi qui conseillerai d'utiliser un PIC pour une fonction que l'on peut réaliser simplement avec quelques composants électroniques non programmables.
Je pense que le PIC à sa place dans plein de domaines : jeux, utilitaires (alarmes, programmateurs divers), commandes séquentielle ou évenementielle, convertisseurs de formats de données, acquisition de données sur courte ou longue durée, transmission de données en s'appuyant sur des normes connues (RS232, MIDI, USB, Ethernet), etc.
On ne doit pas se tromper de cible et penser que le PIC est le composant idéal pour assurer des fonctions "trop simples", ou à l'inverse qu'il convient pour des fonctions complexes que seul un DSP pourrait accomplir. Pour ma part, je me suis fait une petite idée de ce qu'on pouvait réaliser avec des PIC, en parcourant les sites de passionnés, oeuvrant dans les domaines de la musique, de la HF et de la mesure.
Je ne vais pas vous mentir et vous dire que ma première expérience avec les PIC s'est déroulée sans aucun problème, ce serait faux. Mais tout de même, j'ai écrit, compilé et flashé (envoyé dans le PIC) mon premier programme, en 1h30 clé en main à partir de la réception du colis par la poste.
Que le temps passe vite ! Ma EasyPic4 fonctionne encore parfaitement, même si on tente de me faire croire qu'elle est démodée.
Trois générations de carte ont passé, et les petits ajustements que j'aurais trouvés utiles sur la EasyPic4 se retrouvent finalement sur la EasyPic7. Mais de quels ajustements parle donc Rémy ? Oh, rien qui vaille la peine d'en faire la une des journaux. Mais quand on ne se contente pas d'utiliser la carte pour y flasher un PIC qu'on retire aussitôt de son support (ce serait du luxe de se cantonner à cette unique fonction de programmation avec ce genre de platine), les petites subtilités deviennent de grands atouts.
Comme vous le savez peut-être maintenant, on peut utiliser les lignes d'un port de PIC en entrée ou en sortie. Quand on l'utilise en entrée et surtout avec des boutons poussoir, on peut avoir besoin d'ajouter ce qu'on appelle des résistances de rappel qui fixent le potentiel au repos, soit au +V, soit à la masse. Sur la EasyPic4, on peut placer des résistances de rappel sur un port grâce à un petit cavalier, mais on ne peut pas le faire de façon individuelle : soit ces résistances sont câblées sur l'ensemble des lignes du même port, soit elles sont déconnectées. C'est embêtant si on veut en même temps disposer de lignes qui présentent un potentiel positif au repos et de lignes qui présentent un potentiel nul au repos. Contourner ce petit manque ne m'a jamais posé de problème, car la plupart du temps j'utilise la EasyPic avec une platine sans soudure, sur laquelle je mets ce que je veux pour n'importe quel port.
La EasyPic7 a comblé ce manque de façon simple : on dispose maintenant d'un interrupteur à trois positions pour chaque ligne de chaque port, qui permet de porter ces lignes au potentiel désiré, et ce de façon totalement indépendante. Je vous assure qu'il ne s'agit pas d'un gadget ! Je ne vais pas développer ici la liste des ajouts ou améliorations apportés par la carte EasyPic7, ce n'est pas le but de cet article. Le fabricant a même eu l'idée géniale de fournir le schéma de la carte en ajoutant dessus des photos qui montrent à quoi ressemblent les symboles des composants utilisés. Très nettement, il ne pense pas qu'aux pros.
J'aime beaucoup mes platines EasyPic 4 et 7 (j'avoue que la EasyPic 4 ne me sert plus beaucoup, elle pourra peut-être servir de secours un jour). Mais il m'arrive si souvent de devoir programmer un PIC avec un fichier hex tout prêt qu'il me manquait ce petit accessoire bien pratique que constitue un programmateur miniature et donc portable. J'ai donc décidé d'utiliser le PICkit2 qui dormait depuis 2 ans dans une enveloppe à bulles (sic) et l'ai également rapidement adopté.
J'en suis arrivé au point de développer deux applis en même temps (quand elles communiquent entre elles, c'est bien pratique !) avec d'un côté ma EasyPIC et de l'autre mon PICkit2. Au fil du temps j'ai aussi appris à aimer le mode de programmation "in-situ", si pratique quand on ne veut pas déplacer sans arrêt le PIC en cours de développement. Bref, avec mes deux programmateurs, je suis très content, le plus gros me sert quand il faut peaufiner autour du PIC, le plus petit me sert quand je suis en déplacement ou sur un coin de table encombré de maquettes électroniques... Ce n'est qu'en 2021 que la démangeaison de réaliser un clone de PICkit2 est devenue insupportable :
Mon clone de PICkit2, le PK2-RM
Oui, bien heureux j'étais avec mes programmateurs EasyPic7 et PICkit2. Mais comme vous le savez, et même si au fond de mon âme je ne suis pas (trop) matérialiste, il me fallait un nouveau programmateur facile à transporter et apte à faire du débogage matériel. Mon choix s'est porté sur le programmateur MikroProg :
Ce dernier dispose d'un connecteur 10 points qui permet de "l'insérer" dans un circuit existant, avec la possibilité de libérer les lignes de programmation ICSP (PGC, PGD et MCLR) en période d'inactivité. Cette particularité permet plus de souplesse avec les broches dédiées programmation, quand on veut les utiliser "à fond", c'est à dire en temps que ligne d'entrée/sortie quand le circuit travaille de façon nominale (hors étape de programmation). J'avoue avoir eu quelques difficultés à le faire fonctionner correctement au début (il est plus chatouilleux que le PICkit2) mais en respectant à la lettre les indications données dans le manuel utilisateur, tout est OK (ah, cette manie de commencer avant de lire les manuels utilisateur).
Dans les forêts de composants qui nous entourent, difficile de faire son choix, en tout cas quand on est débutant. Vouloir attaquer de front plusieurs types de PIC en même temps me semblait un peu cavalier, et j'ai donc tout naturellement fait mes premiers pas avec le 16F84 et le 16F877, qui étaient tous deux livrés avec la platine EasyPic4. Rien qu'avec ces deux là, il y avait déjà de quoi manger. Puis au hasard de mes ballades sur la toile, j'ai appris que le 16F84 était dépassé et qu'il vallait mieux désormais lui préférer les 16F628A ou 16F648A, plus performants et moins chers. Je m'y suis donc attelé.
Les modèles que j'ai privilégiés pour commencer sont les suivants :
- 12F675 - Pour ses dimensions physiques réduites (8 pattes), son CAN 10 bits.Au 10/08/2014, je n'ai pas encore essayé le 16F870, allez donc savoir pourquoi (sans doute parce qu'il existe des centaines de modèles qu'on a pas le temps de tester).
Oh, un détail : s'il est sympa de disposer de quelques PIC pour se faire la main, il l'est tout autant d'avoir un petit stock de quartz de valeurs différentes. Je dispose pour mes divers bricolages de quartz 32,768 kHz, 4 MHz, 4,096 MHz, 4,194304 MHz, 8 MHz, 8,192 MHz, 10 MHz, 10,240 MHz, 12 MHz, 16 MHz et 20 MHz, auxquels s'additionnent quelques oscillateurs à quartz intégrés de 8,192 MHz, 12,288 MHz, 16 MHz, 27 MHz et 40,960 MHz. Ces oscillateurs intégrés me servent parfois de source d'horloge pour le PIC, mais leur principal usage reside dans la mise en place rapide d'une fréquence de référence stable, pratique pour les systèmes de mesure de fréquence ou de temps.
Le temps aidant, je me suis naturellement attelé aux PIC de la famille 24F et 24EP :
- 24F16KA101 et 24F16KA102 -Je me suis fait la main avec les 24F16KA102 et 24FJ32GA002, pour mes projets Interface DMX 003d et Métronome 008b. J'ai ensuite testé avec succès le 24EP512GU810 inclus sur la platine "Mikromedia for PIC24EP" (écran TFT et dalle tactile) pour mon indicateur de niveau batteries 008. J'avoue sans honte que je me serais bien emmêlé les pinceaux si j'avais tout de suite démarré avec des PIC24 sans passer avant par les "petits" 12F et 16F !
Et que dire des PIC32 ! Ces coquins offrent des subtilités qui imposent pas mal d'heures de lecture (datasheet et autres sources de connaissances), et le simple portage sur un PIC32 d'un programme écrit pour un PIC18 peut vite devenir très rigolo. Le pas est franchi !
- 32MX170OP256B -Bien que possédant quelques PIC32 en boîtier DIL, j'ai réalisé mon premier montage fonctionnel avec un PIC 32MX534F064H soudé sur une platine "Mini-32" proposée par Mikroe (interface DMX 003e). Cette mini carte comporte deux rangées de contacts 20 points et se présente comme un boîtier DIL40 standard au pas de 2,54 mm (brochage ainsi obtenu "compatible" PIC 18F45xx).
Et pour continuer l'aventure (août 2017), je me suis attaqué aux PIC suivants (QFP 64 broches) :
- 32MX575F512Havec un petit CI adaptateur CMS "universel" pour le
premier et
une carte
d'adaptation un peu plus évoluée pour le second (merci à
Matthieu pour le soudage des CMS)...
Programmation avec MikroPascal Pro pour PIC32, et cette fois j'ai accès à toutes les broches des deux microcontrôleurs !
L'aventure a continué avec les PIC32, je me suis enfin décidé de faire le pas et de souder manuellement ces circuits de 1 cm de côté avec 16 broches espacées de 0,5 mm (projet Processeur MIDI 001) :Programmation en ICSP, cela va (presque) de soi...
Même si Arduino et Raspberry ont le vent en poupe, vous êtes encore nombreux à vouloir débuter avec les PICs et à me demander conseil pour le choix d'un programmateur. Je ne suis malheureusement pas très bien placé pour donner des conseils objectifs. Ceci dit, je peux parler un peu des outils que j'utilise et qui fonctionnent bien.
Au départ, j'ai choisi la platine de développement EasyPic parce qu'elle était disponible avec le logiciel MikroPascal, et parce que le langage Pascal était le seul avec lequel je me sentais à l'aise. De plus, le simple fait de trouver un compilateur venant du même éditeur que celui produisant la carte de dévelopement (MikroE) me mettait en confiance. Oui, j'y suis allé au hasard et mon choix m'a satisfait, je peux vraiment l'affirmer après avoir laissé pas mal de bidouilles derrière moi. Je constate que le support après vente de MikroPascal est excellent, leur forum est très actif et l'équipe de développement fait preuve d'une véritable écoute envers les utilisateurs. C'est important pour un produit qui doit évoluer avec l'arrivé de nouveaux composants programmables. J'ai aussi fait acheter une platine à mon ancien travail (c'était une EasyPic6) pour des besoins assez sérieux dans le domaine de la TV numérique. Mes (anciens) collègues ont été épatés de la rapidité avec laquelle on pouvait développer une application PIC.
Je suis ensuite passé à la EasyPic7, et en parallèle j'utilise un programmateur Microchip PICKit2, pour les programmations en mode ICSP (composant programmable en place dans le circuit cible, liaison avec un câble 4 ou 5 conducteurs). Cette interface fonctionne très bien aussi !
Depuis 2015, j'utilise également le programmateur MikroProg de MikroE. Pour faire simple, voici comment j'utilise mes programmateurs :
Nota 1 : mon expérience avec la première version du logiciel PICkit3 pour utiliser le programmateur PICkit3 en standalone (hors environnement MPLAB) s'est révélée catastrophique. Le seul moyen d'utiliser ce programmateur était de passer par le logiciel IPE (non IDE) de Microchip. A ce jour, je n'utilise mon PICkit3 qu'avec MPLAB IPE.
Merci de ne pas me demander si tel ou tel autre compilateur ou platine de programmation est "bien", je ne sais pas répondre.
Mes réalisations mettent en oeuvre des pics "classiques", tels les 12F675, 16F84A, 16F628A, 16F877, 18F2520, 18F4520, 18F45K22. Comme ce que j'ai appris (et apprend toujours) au niveau codage vient en majeure partie des questions / réponses lues à gauche et à droite sur les forums utilisateurs, je ne vois aucune raison de ne pas mettre à disposition mes codes sources (à l'exclusion bien sûr des projets professionnels réalisés sur demande).
Voir page Programmation PIC - Sources.Je me suis décidé à écrire quelques lignes de code pour exemples simples d'applications, à destination des débutants. Voyez ça comme des tutoriels, qui expliquent les bases de la programmation des PIC avec MikroPascal, et qui permettent de s'aventurer dans le monde de la lecture de CAN, des liaisons I2C / SPI ou de l'écriture / lecture de mémoire externes.
Voir page PIC - Bases pour présentation et conventions, et page PIC - Bases - Exemples MikroPascal pour plonger directement dans le sujet.
Ca ne l'était pas pour moi au début, car je n'arrivais pas facilement à combiner les différentes infos que je trouvais ici et là. Pour ceux qui se trouveraient dans la même situation que moi, j'ai écrit une petite page où j'explique ma façon d'aborder mes développements électroniques qui intègrent des PICs, à la page Electronique - Développements. Et puis tiens, pendant qu'on y est, un petit livre pour les débutants...
Les microcontrôleurs PIC
(avec MikroPascal) pour les
débutants... Entre "trop facile" et "trop dur"... le langage Pascal pour écrire des logiciels pour PIC Paru le 16 décembre 2013 chez l'éditeur Publitronic / Elektor. ISBN 978-2-86661-193-4 |
Quand on débute, il est parfois difficile de se lancer, surtout si le montage qu'on veut réaliser comporte un PIC et qu'on n'a pas encore de programmateur. Pour cette raison, j'accèpte à titre gracieux de programmer votre PIC.
Programmation gratuite de PIC