jeudi 3 mars 2016

Un arduiniste au pays de MPLAB Xpress

J'ai reçu cette semaine mon exemplaire gratuit du MPLAB XPress Evaluation Board de Microchip, et je vous raconte ici ma première exploration de cette carte et de MPLAB Xpress, qui est le nouvel environnement de programmation en ligne offert part Microchip.  Puisque je n'ai eu que très rarement l'occasion de programmer des microcontrôleurs PIC avec MPLAB, mon point de vue sera celui d'un utilisateur d'Arduino en visite sur une autre planète.  Je préférais vous en avertir...

La carte MPLAB Xpress Evaluation Board comporte un microcontrôleur PIC16F18855, 4 LEDs, un potentiomètre, un bouton poussoir (en plus du bouton reset) et une bonne trentaine d'entrées/sorties.

Il suffit de brancher la carte à un ordinateur au moyen d'un câble microUSB (non fourni) pour que l'ordinateur la reconnaisse comme un disque amovible nommé XPRESS (sous Windows 7, j'ai dû patienter un peu pendant l'installation de pilotes de périphériques, ce qui n'a pas été le cas sous Linux).



Ce disque amovible comporte un fichier "README.HTM" qui constitue une façon fort pratique d'accéder à la page de MPLAB Xpress au moyen de votre fureteur web (Internet Explorer, Firefox, Chrome et Safari sont officiellement supportés).



Dans le bas de cette page, un bouton nous donne accès à l'IDE en ligne.


Et nous voici à l'intérieur de MPLAB Xpress...


Ne nous laissons pas intimider par le syndrome de la page vide!  Cliquons plutôt sur le bouton "New Project"...



À partir de là, on peut démarrer son propre projet à partir de zéro...


...ou partir d'un exemple déjà fait:


Ha...seulement 11 exemples?  C'est un peu mince...  Les membres de la communauté des utilisateurs de MPLAB XPress peuvent contribuer à la banque d'exemples, donc j'ai confiance que la quantité d'exemples va rapidement augmenter.   Et peut-être qu'en très peu de temps, ça va devenir comme mbed:  un monstrueux amas d'exemples de qualité variable, pas très bien classés.

Parmi ce vaste choix de 11 exemples, je choisi "Hello World", qui me semble un bon point de départ.

Il faut ensuite indiquer notre modèle de PIC (PIC16F18855), à l'intérieur d'une très longue liste de modèles supportés...


...puis choisir un nom pour ce premier projet (veuillez pardonner l'absence totale d'originalité)...



Pour compiler le projet, on clique sur ce bouton:


À partir de là, c'est le même principe que pour mbed:  un fichier "Premier_Projet.hex" est créé dans votre répertoire de téléchargements.  Pour télécharger le programme dans le microcontrôleur, il s'agit de glisser l'icône de ce fichier .hex dans votre disque amovible "XPRESS", comme si vous vouliez copier le fichier sur une clé USB.


Le nouveau programme s'exécute immédiatement.  Jusque là, les 4 LEDs de votre carte s'allumaient en alternance.  Maintenant, la LED "D2" reste allumée, pendant que les 3 autres demeurent éteintes. Ce n'est peut-être pas très spectaculaire, mais ça fonctionne!

Jusqu'à maintenant,  tout fonctionne comme sur des roulettes:  je suis satisfait à 100%, sans la moindre réserve.

C'est ici que les choses se corsent un peu...

J'aimerais maintenant modifier ce projet:  allumer la LED D3 plutôt que la LED D2, par exemple.   C'est ma façon préférée d'apprendre:  je pars d'un exemple tout fait et je le modifie afin de mieux comprendre son fonctionnement.

Je jette donc un coup d'oeil au contenu du fichier "main.c", pour constater que la routine principale est vide!


Bon, on m'indique que les informations pertinentes se trouvent dans d'autres fichiers, qui ont été générés au moyen du MCC:  Microchip Code Configurator.  Effectivement, le projet contient 4 autres fichiers.


C'est effectivement dans ces autres fichiers que les choses se passent.  Voici, à titre d'exemple, un extrait du fichier "pin_manager.h":


...et j'en profite pour rappeler que ce programme se contente d'allumer une LED!

Avec Arduino, ce serait simplement digitalWrite(13,HIGH); !!!

Tous les exemples que j'ai explorés ont cette même caractéristique:  un fichier "main.c" vide (ou presque), et des fichiers d'accompagnements d'une complexité ahurissante.  J'ai testé  l'exemple "Hardware Blink" qui fait clignoter les 4 LEDs à l'unisson, l'exemple "Breathing LED" qui change la luminosité des LEDs par PWM, l'exemple "LED brightness control using potentiometer" qui, comme son titre l'indique, permet de contrôler la luminosité des LEDs au moyen du potentiomètre.  Ils fonctionnent tous à la perfection, mais je n'y comprend rien!

Changement de stratégie, donc...mettons ces exemples de côté.  Je dépoussière un peu mes rudiments de programmation de PIC (ça remonte à 2011!) et je crée un nouveau projet à partir de zéro.

Voici le résultat:  un programme qui allume en alternance chacune des 4 LEDs.  Ce n'est probablement pas la façon la plus élégante de procéder, mais je comprend ce que je fais, et ça fonctionne.


En résumé

Tout fonctionne sans le moindre pépin, et le rapport qualité-prix (gratuit...) est imbattable!  Puisque je ne prévois pas me mettre à programmer des microcontrôleurs PIC de façon intensive dans un proche avenir, j'apprécie cette possibilité de programmer sans devoir installer une volumineuse suite de logiciels.  Mais le débutant devra se débrouiller pour trouver des tutoriels ailleurs car les exemples, peu nombreux, me semblent bien nébuleux.

Yves Pelletier   (TwitterFacebook)

1 commentaire:

  1. Je pense que pour bien comprendre le fonctionnement des pics, il faut faire les tuto de bigonoff qui partent de programmes simples(programmation des pics en assembleurs). Ensuite, c'est vraiment beaucoup plus facile de comprendre tout ce que l'on fait en "c". L'équivalent de arduino/atmel est pic/picaxe, ne l'oublions pas. Picaxe peut même se programmer avec de simples organigrammes.

    RépondreSupprimer