L´AVEU DE JIDÉ :
Eh bien non, cet extrait du cahier de classe du petit Picolas ne traite pas de démêlés avec Timère, comme vous eussiez pu y prétendre...
Mes compétences — que je sonde souvent, et longuement, car après tout, ne deviennent-elles pas les vôtres à la fin de chaque page ? — mes compétences, donc, ne m´autorisent pas (malgré l´aide d´amis aussi dévoués que patients) à entamer dès maintenant la descente en Basic vers ces tripes mystérieuses pleines d´IT et de flags...
Cette dixième page sur le mikroBasic va donc d´abord introduire un composant nouveau, un plus gros PIC, le 16F628A, destiné à renforcer l´équipe. Il a déjà été utilisé à quelques reprises dans Pictrain (par Youjik, par Psi...) tout simplement (et comme Picolas l´a appris dès le premier jour)... parce qu´il a pluss de pattes !



Page 10 : arrivée du PIC 16F628

Pourquoi un nouveau PIC ?
Petit a : les pattes ! Le PIC 16F628 possède deux ports (ensembles de pattes qui peuvent être des entrées ou des sorties d´informations), de chacun huit pattes, soit seize au lieu des six de notre cher vieil ami le 12F675.
Huit d´entre ces seize sont concomitantes et forment (par exemple sur une rangée de leds) l´image exacte d´un octet, d´un registre : ne serait-ce que pour cela (afficher à l´extérieur un nombre traité à l´intérieur), c´est un avantage pour le “débogage” (“montre-moi, s´il te plaît, le contenu d´un de tes registres, que je voie pourquoi tout ne marche pas comme j´ai prévu...”).
Ces pattes à fort courant (20 mA chacune) sont aussi naturellement le paradis des jeux de lumières. Un nombre binaire, taillable et corvéable à merci, c´est huit lumières qui s´allument et s´éteignent à notre rythme (et jusqu´à quelques centaines de milliers de fois par seconde)...
Et si ces pattes ne suffisent pas à votre appétit, faites comme on avait pratiqué pour le 628 avec nos pages en assembleur “Multipin” : le 675, avec beaucoup de matière grise de notre part, consentait à piloter 20 leds avec 5 pattes, le 628 avec la même dose de matière grise (un peu moins même, si on le fait en Basic) se verra à la tête de... 182 petites lumières individuellement allumées ou éteintes — et vous vous souvenez qu´un bit allumé ou éteint, c´est peut-être une led, mais aussi un relais, un moteur, un aiguillage, un dételeur, un triac sous 220 volts...
Petit b : la normalisation ! Il y a deux sortes de vocabulaires, celui du 12F675 et celui de tous les autres PIC du monde ! Le tout petit 675 (à la suite des vieux PIC 8-pattes obsolètes dont nous n´avons jamais parlé) organise son monde à base de GPIO (General Purpose Input Output). Le 16F628 et tous les autres possèdent des PORTS nommés PORTA, PORTB, et cetera jusqu´à PORTE pour les gros 40-pattes.
Petit c : une immense bibliothèque PIC sur Internet ! Le 16F628 est récent et moderne mais il est créé pour remplacer patte pour patte le vieux 16F84, le monstre sacré du monde des PIC. Tous les livres, tous les sites ayant plus de trois-quatre ans d´âge travaillaient avec ce PIC ! Vous verrez comment traduire les minuscules différences entre le vieux père et le jeune fils (car le plus récent est évidemment mieux en tout que l´ancêtre) et jeter aux orties ce quartz naguère indispensable et même quelques résistances, bouton-poussoir et condensateurs qui devaient l´entourer.

Encore tout recommencer de zéro ?
Mais non : est-ce que Ptitrain vous a déjà fait des coups pareils ? Est-ce que vous nous confondez avec vos fabricants d´ordinateurs, d´appareils photo, de postes de télé... ou avec Velleman (qui fusilla la T.T.T.) ?
Quand on a introduit le Basic dans Ptitrain, on a bien insisté sur le fait que nous nous appuierions sur nos connaissances préalables (Pictrain en assembleur) et c´est grâce à ça que nous avons fait quasiment le tour de la question en neuf pages.
À dix mots près, tout ce qui est dit sur 12F675 sera identique pour le 628 nouveau venu. On pourra passer de l´un à l´autre avec un clic de doigts.

Sur la carte Easypic, on doit manipuler 4 cavaliers situés l´un à côté de l´autre, dans la “zone 27” et bien placer le PIC sur le support en “zone 25” (et non à côté du 40-pattes). Attention, ne laissez pas un 675 et un 628 ensemble sur la carte.

Débarrassons-nous tout de suite des détails !
Les PORTS en premier : sur le schéma, on voit les pattes Ra0, Ra1, Ra2,Ra3, Ra4, Ra5, Ra6, Ra7 (si ça ne tenait qu´à moi, je numéroterais de un à huit, plutôt que de zéro à sept, mais le monde cruel des informaticiens a donné d´autres habitudes et on ne peut pas quand même révolutionner ce microcosme tout-puissant...). Ce sont les huit pattes du port A, nommé PORTA.

Toutes ces pattes du port A ne sont pas nées égales entre elles :
la patte Ra5 ne peut être qu´une entrée jamais une sortie — c´est une “tare” que nous avions déjà connue avec patte GP3 du 12F675.
la patte Ra4 peut être une entrée ou une sortie mais cette sortie est à drain ouvert : on ne peut y trouver que du zéro volt, ou bien la voir en l´air ; jamais elle ne fournit du . Ce phénomène a été expliqué dans quelques-unes de nos pages sous le nom de collecteur ouvert (drain ou collecteur, pour nous, c´est pareil), voir ici (sous le paragraphe IIIg) ou bien ici (en haut de page).
Les autres pattes du port A sont “normales” et on peut les comparer aux pattes “normales” du 12F675 (entrées, ou sorties, fort courant...). Elles servent toutes aussi à un grand nombre d´autres fonctions que nous n´avons pas envisagées jusqu´ici mais c´était aussi le cas du 675 — par exemple, selon le réglage de certains bits de certains registres, Ra5 peut devenir une remise à zéro de tout le programme...
Le port B n´a aucune de ces limitations : toutes les huit pattes sont égales, entrées, sorties, fort courant... Ce sera notre cheval de bataille pour le débogage et les jeux de lumières dont nous vous parlions au début.
alimentation : j´ai porté mon choix sur le 16LF628A, une version (L) qui a comme caractéristique de fonctionner à partir de deux volts et jusqu´à 5,5 V. Ainsi on pourra envisager des applications embarquées avec deux minuscules batteries de 1,2 volt ou deux piles de 1,5 volt. La lettre finale (A) signale une nouvelle mouture du PIC, le 628 tout court semble ne plus exister.
Comme Ptitrain donne en cadeau des PIC 16LF628A à tous ses collaborateurs (sur demande), gageons que ce type sera choisi pour la plupart de nos articles J´en ai acheté en grand nombre chez Microchip à Hongkong et ils me sont revenus à environ 1,5 euro chacun (le 675 dans ces mêmes conditions coûte pile un euro).

Les différences de vocabulaire 675/628
J´ai copié-collé à partir des fichiers fournis par Mikroelketronika tous les noms réservés (bits, registres) de notre cher 12F675 
z10_vocab675.png
J´en ai fait autant pour tous les noms réservés (bits, registres) de notre nouveau 16F628 ; ces mots sont les mêmes (à peu près) pour tous les PIC présents et à venir autres que les tout petits huit-pattes.
z10_vocab628.png

Il est réconfortant de savoir (dans le monde-foutoir technologique où nous nous débattons tant bien que mal) que Microchip, lui, a été assez intelligent et prévoyant pour assurer la compatibilité de toutes ses docs techniques — sauf au niveau des noms donnés aux PIC ! En voyant simplement les codes 12Fxxx et 16Fxxx on ne peut pas savoir que ces deux PIC sont identiques en architecture intérieure... ce qui est pourtant le cas. Nous en resterons pour quelques années encore à des PIC dits MIDRANGE, et nos 12F675 et 16F628 sont identiques à ce sujet.
On note donc évidemment la disparition des GPIO, GPO, GPIO0, et cetera, au profit de PORTA et PORTB. En revanche, remarquez qu´avec le 675, on pouvait s´adresser à une patte particulière grâce à GP2 ou GPIO2 alors qu´on ne peut pas, avec le 628, écrire directement Ra2 (ce devra être PORTA.2 ou l´utilisation d´un symbol).
Très important (et source de confusion au départ), le changement de TRISIO qui devient TRISA (pour le PORTA) et TRISB (pour le PORTB) : réglage des ports en entrées ou en sorties.
Personne ne regrettera la disparition de cet enfoiré de registre ANSEL qui, quand on l´oublie dès le début d´un programme pour 12F675, nous pourrit la vie pour des heures (il est responsable à lui seul, cet ANSEL, de milliers de mails sur Internet (“Au secours, mon 675 marche pas ! — T´as pensé à ANSEL ? — Euh, non, je vais le faire, merciiiii...”).
En revanche, la ligne CMCON = 7 (comparateurs désactivés) reste d´actualité si on veut utiliser les pattes Ra0 à Ra4 en mode logique.
Enfin, un autre flot de milliers d´appels au secours sur Internet concerne le calibrage fin du 675 (OSCAL et son étrange façon de s´automutiler...). Eh ben, y en a plus maintenant avec le 628, ouf !
Le 628 ne possède pas ANSEL, chouette avons-nous dit, mais c´est parce qu´il ne sait pas assumer cette fonction analogique du 675 ! Un manque qui devra être compensé par des petites magouilles dont sont coutumiers les utilisateurs du vieux 16F84, et on en trouvera par poignées sur le web. (En bas de cette page, voir les différences 16F84/16F628.)
En revanche le 628 possède, en intégré, sur sa patte Rb3, une fonction PWM (ou MLI, modulation de largeur d´impulsion, ça sert à régler finement la luminosité des leds ou la vitesse des moteurs) que le Basic gère d´ailleurs très facilement, ce que nous devions simuler avec beaucoup de matière grise et de lignes de code pour le 675 qui ne sait pas faire ça tout seul.
Je crois avoir fini ce tour des différences 675/628, d´autres nous apparaîtront au fur et à mesure, je les recopierai ici même quand elles se feront jour.

Pour m´aider à repérer les fautes de frappe et autres dans le programme en Basic j´utilise l´éditeur de texte NotePad++, un outil gratuit qui permet le coloriage des mots réservés des langages. Aussitôt j´ai donc écrit une mise à jour pour les mots-clés du 628, et ainsi je ne peux même pas taper GPIO sans voir mon erreur en couleur... Il y a actuellement quatre versions de ce colorieur (1 pour l´assembleur 675, 1 pour l´assembleur 628, 1 pour le Basic 675, 1 pour le Basic 628), vous pouvez les trouver ici sous le nom userDefineLang.xml


Le mot de configuration
En Basic 675, nous avons presque toujours le mot de configuration 3F84... (Voir ici comment se présente la fenêtre de configuration de projet sur un 675.)
Voici comment se présente la configuration lors de la demande d´un New Project à mikroBasic.
Project Name, comme d´hab.
Path, Description, comme vous le désirez...
Device Name : P16F628A (la lettre L qui veut dire faible tension de fonctionnement n´est pas prise en compte dans cette fenêtre ; et le A à la fin désigne une version améliorée du 628 original, c´est très important).
Clock : toujours 4 MHz (pareil qu´avant) avec horloge interne sans quartz.
Et ensuite clic ou non-clic sur les autres composants du mot de configuration (sont importants CP_OFF, WDT_OFF, INTOSC..., MCLRE_OFF).




Attention : piège à con(pilation), cette fenêtre permet le clic n´importe où (on peut valider une position ON et une position OFF pour la même valeur, ce qui est idiot et dangereux). Prenez bien votre temps, et vérifiez que, sauf besoins spéciaux, le mot de configuration est le plus souvent 3F18.

Trouver de la documentation
C´est moins dur pour le 628, qui se fait son chemin sur les traces du vieux F84 (voir notre page 99 Questions), que pour le 675, qui est toujours un vrai outsider... Bien sûr le datasheet (en anglais) de Microchip doit rester prêt à prendre (ici sur le web) ainsi que la documentation sur les PIC Midrange... Des lecteurs ont trouvé quelques documentations en français (pour l´instant il faut se référer à la liste Ptitrainmatique ou piocher dans ce dossier où tout a été stocké provisoirement.
Deuxième source, les docs de Mikroelektronika : ils ont écrit deux livres formidables sur le PIC en général (en assembleur) et il y a les aides et des livres sur leur propre Basic... Des exemples de programmation Basic sur 16F628 (surtout haut de gamme) sous dispo chez eux. (Oui, c´est encore de l´anglais mais, quoi, vous auriez préféré que ce soit en serbe ?)

Traduire du code écrit pour 16F84
Le web regorge de ressources concernant le modèle PIC 16F84, aujourd´hui obsolète... et cher. Qui peut le plus peut le moins (au moins pour ce paragraphe) et le 16F628 est compatible patte pour patte.
Sur un schéma conçu pour le vieux F84, il suffit de supprimer tout
 : le quartz, les condensateurs, les résistances, le bouton-poussoir... Ne mettre que le condensateur de 50 à 100 nF qui relie les deux pattes et .
Vous pouvez aussi avoir à remplacer un F84 par un 628 dans une carte déjà existante et vous ne voulez pas extirper toute la quincaillerie ! Alors, il faut mettre dans le mot de configuration 3F29, ce qui conserve l´utilité du quartz et la validité du reset.
Dans le code Basic, rien à changer. On devra quand même par précaution commencer chaque programme d´origine F84 avec la ligne CMCON=7, afin que les pattes Ra0 à Ra4 du 628 (c´est pareil avec le 675) soient utilisées en mode logique, et non analogiques, ce qui allait de soi avec le vieux F84.
En assembleur seulement, on devra aussi changer l´adresse des variables qui doivent être à 0x20 au lieu de 0x0c et le list et le #include


Si vous trouvez une erreur ou une chose pas claire dans cette page, faites-le-nous savoir par mail, au plus vite, merci !
Les mots marqués d´un astérisque (*) sont ou seront expliqués dans le “P´tit dictionnaire du Meccano électronique”.
Bibl. : PicTrain, Mayeux (page 316). — Descr. : 16F628, 16LF628A, PIC, Microchip, mikroBasic, Mikroelektronika, Pictrain, Multipin, Easypic
 

Jidé
novembre 2008

Rev 24/11/08

Ptitrain, l´e-magazine du train éclectique. — Directeur de la publication : Christophe Franchini.
Rédacteur en chef : Jean-Denis Rondinet