Dernière mise à jour : 15/04/2012
Livre PIC et MikroPascal ? - Vos avis et suggestions sont attendus...
Présentation
Le jour où j'ai acheté mon premier ordinateur et
mon premier logiciel (un Atari 512 couplé au logiciel Pro24), j'avais
la ferme intention de m'en servir pour faire de la musique. Je me
voyais mal faire autre chose de cet ordinateur. La programmation ? Ca
va pas, non ? Jamais de la vie, ce n'est pas du tout, mais alors pas du
tout mon truc ! Puis pour faire suite aux séquences MIDI, je me suis
taté au montage audio. A ce moment, je disais que
je ne
toucherai jamais au montage vidéo. Promis, juré,
craché, pas fait pour moi. Et je me suis évidement mis à la
programmation informatique et au montage vidéo. Hum...
Ce qui m'arrive donc maintenant devait arriver : un peu
d'électronique par ci, un peu d'informatique par là... il
a fallu que
je craque et que je me commande de nouveaux outils de
développement. Me
voici donc lancé dans la programmation des PIC. Et bien
entendu, comme
je n'y connais rien et que je suis partisant du moindre effort, j'ai
cherché une solution qui me demande moins de temps
d'apprentissage pour
commencer. 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,
(j'ai aussi un PicKit2
mais ne l'ai même pas encore déballé, quelle
honte), mon
compilateur MikroPascal
(ce compilateur permet de générer
le fichier binaire hex à partir d'un code écrit en
langage Pascal, et je
me sens plus à l'aise avec ce langage).
Un peu à l'intuition, en somme, comme quand j'ai commencé
avec Delphi
1 (langage Pascal également).
Que peut-on faire avec un PIC ?
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. 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, Ethernet), etc.
Et j'ai bien
l'intention d'explorer tous ces domaines. Je suis loin d'être un
expert
dans ce domaine, et peut-être suis-je complètement
à côté de la plaque.
Mais je pense qu'on ne doit pas se tromper de cible, et penser que le
PIC est le composant qu'il faut pour assurer des fonctions "trop"
simples", ou à l'inverse penser qu'il est le composant
idéal pour assurer des
fonctions extrêmement 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.
Alors, dis-nous...
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.
Première expérience, nous sommes en 2007
9h00 -
Driiing, c'est le
facteur ! Je fais un sourire et dis bonjour, je signe, je dis au revoir, et je
fonce à la cuisine pour déballer le paquet. Tout ceci a du me prendre cinq bonnes secondes.
9h02 - Je
contrôle le
contenu du pack, qui contient la platine EasyPic4, le compilateur
MikroPascal, les deux afficheurs LCD (LCD 2x16 et LCD graphique), docs
et CD. Les docs donnent immédiatement un très bonne
impression de qualité et de sérieux.
9h20 - Je me
fais un
café et lis les docs d'installation pour le matériel et
les logiciels / drivers USB.
9h30 - Je
branche une alim
externe sur ma platine EasyPic4 après positionnement
adéquat du cavalier d'alim. La platine s'allume et en plus il y
a activité des leds et afficheurs, donc côté
initialisation et horloge, ça semble correctement tourner.
9h35 -
J'installe PicFlash et
les drivers non pas
comme
indiqué dans le doc d'install, puisque les répertoires
du CD spécifiés pour les programmes d'installation n'existent pas.
Pénible mais pas insurmontable, il suffit de parcourir le CD
pour trouver le bon emplacement. L'enquiquinant étant que quand
on rencontre ce type de problème dès la procédure
d'installation, ça fait un peu peur par la suite. Le vendeur
(Lextronic) m'avait annoncé que je pouvais rencontrer des
problèmes d'installation avec WinXP Pro (refus d'installation du
driver), ça n'a pas été le cas sur ma machine.
9h55 -
J'installe le
compilateur MikroPascal pour Pic, qui me force, le coquin, à
installer PicFlash qui a été installé juste avant.
Je ne peux pas désactiver cette option d'installation, je
continue donc contraint et forcé, en me demandant
évidement si cela ne va pas causer des soucis coté
drivers. Par acquis de conscience, je compare la version du driver
déjà installé avec celle du driver qu'on me force
à installer : V7.03 dans les deux cas, ça me rassure un
peu, alors je continue.
10h00 - Je
lance le logiciel
PicFlash afin de voir si connection avec la platine de
développement il y a, et je fais un rapide tour des
fonctionnalités. Ca roule, le contact est bien établi
entre matériel et logiciel.
10h10 - Je
lance MikroPascal,
car mon envie de taper des lignes de code en Pascal est devenue
insupportable. Puis je lis et exécute les instructions
données dans le document papier appelé "Je crée
mon premier projet dans MikroPascal" (bonne idée de l'avoir mis
sous forme papier dans la boite). Ca me rappelle mon premier projet
avec Delphi, avec le célèbre "Hello World".
J'écris mon premier programme en toutes lettres (je ne charge
pas un programme d'exemple tout fait), le compile (je corrige une faute
et je recommence), et l'envoie dans le PIC. Une fois le programme
chargé dans le PIC, il est automatiquement exécuté
et je vois le résultat... Enfin je suis censé le voir. Ca
bouge bien (les leds qui doivent clignoter clignotent) mais ça
fait la même chose qu'avant la programmation du PIC. Deux
solutions : soit ce que j'ai fait n'a pas fonctionné, soit le
PIC était déjà programmé avec leur projet
d'exemple et le résultat visuel est le même avant et
après mes opérations. Pour en avoir le coeur net, je
change donc quelques paramètres dans mon code pascal (ports
différents, durées d'allumage différentes) et
recompile le tout. Après transfert du fichier binaire dans le
PIC, les leds "suivent" les modifications apportées. Tout cela
fonctionne donc bien et il est 10h30.

Je suis vraiment impressionné, car avant d'acheter cet ensemble,
je m'étais pas mal documenté, et avait lu plein de choses
concernant les "bootloader" qui me faisaient un peu peur (bah oui,
quand un terme revient souvent et qu'on ne connait pas le
domaine,
on ne sait pas dans l'immédiat si on risque d'être concerné). Je ne
m'en
suis pas préoccupé, me disant que si j'avais un soucis
avec ça, je trouverais de quoi m'en sortir en farfouillant dans
la toile. Bien sûr, vous allez me
dire que le programme simple fourni en exemple ne
pouvait que fonctionner, et qu'à partir de maintenant, les
choses vont se corser. Et alors, même si c'est le cas, ça
donne envie de continuer, vous ne pensez pas ?
Suite de l'expérience, nous sommes en 2012
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.

Certes, avec le
temps, je me rend compte que cette platine de développement aurait eu
avantage à bénéficer de deux ou trois petits ajustements pour la rendre
encore plus pratique. Mais je n'oublie pas que je la trouvais (et que
je la trouve encore) géniale. Savez-vous qu'en 2012 nous en somme à
la EasyPic7 ? Eh bien, je me suis mis à jour.

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 de faire la une des
journeaux. 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 comble 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. Je souhaite juste ajouter que je
travaille maintenant avec cette nouvelle platine de développement et
que le
fabricant a vraiment fait très fort. Il a même eu l'idée absolument
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.
PICs que j'ai choisis pour apprendre
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é.

Autre
modèle qui m'a interressé assez rapidement, le 12F675, pour ses entrées
analogiques (je le sentais bien pour un usage en vumètre
stéréo ou en indicateur de tension). Puis je me suis aussi un peu penché sur le 18F2520, et je
suis bien persuadé qu'au fil du temps, d'autres modèles
vont s'imposer tout naturellement à moi, surtout dans la série des
18Fxxx (18F2420, 18F2520, 18F4420, 18F4520, 18F2525, 18F2620, 18F4525 ou 18F4620)...
Pour l'heure (les choses vont si vite !) les modèles que j'ai privilégiés sont les suivants :
- 12F675 - Pour ses dimensions physiques réduites (8 pattes), son CAN 10 bits.
- 16F88 - Pour son faible coût, son CAN 10 bits, son USART.
- 16F627A - Reconnu comme étant idéal pour des petits projets.
- 16F628A ou 16F648A - Pour son faible coût, son USART (RS232, MIDI), mais pas de CAN...
- 16F886 - Pour son faible coût, son CAN 10 bits, son USART, plus de lignes d'E/S que le 16F88.
- 18F2420/2520 - Pour son CAN 10 bits, son USART, son module MSSP (I2C) son générateur PWM évolué, son horloge 32 MHz interne (mais prix plus élevé).
- 18F45K22
- Difficile de tout lister tellement il y en a ! Tout ce qui est décrit
ci-avant, avec en plus un module MCCU qui permet de nouvelles choses...
Au
15/04/2012, je n'ai pas encore essayé le 16F870, allez donc savoir pourquoi.
Choix du programmateur
Vous
êtes plusieurs à vouloir débuter avec les PICs et à me demander conseil
pour le choix d'un programmateur de PIC. Je suis malheureusement assez
mal placé pour donner des conseils pour ce genre de chose. J'ai choisi
la platine de développement EasyPic parce qu'elle était disponible
avec le logiciel MikroPascal, et 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é totalement au hasard et mon choix m'a pleinement satisfait, je
peux vraiment l'affirmer après 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
collègues ont été épatés de la rapidité avec laquelle on
pouvait développer une application PIC. Aujourd'hui je suis passé à la
EasyPic7 et si je suis resté sur ce modèle, il doit y avoir une raison
valable. Merci de ne pas me demander si
tel ou tel autre compilateur ou autre platine de programmation est
bien, je ne saurais absolument pas répondre.
Sources pour PIC
J'ai commencé quelques petites
réalisations mettant en oeuvre des pics "classiques", tels les
12F675, 16F84A, 16F628A et 16F877. Comme ce que j'apprend 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.
Voir
page Programmation
PIC -
Sources.
Quelques exemples pratiques pour démarrer
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 m'a pas l'air si simple...
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.