Deuxième réalisation
pratique : “Multipin20” |
Pour cette deuxième
réalisation pratique, copiable ou modifiable par chacun d´entre
vous, nous nous sommes fixé le but ultime : utiliser au maximum,
et toujours grâce à l´exploitation des trois états, les
pattes d´un minuscule 675. On va aboutir à un défilement
ininterrompu de vingt leds, grâce à cinq
de ces
pattes.
Nous allons donc
prouver (vous prouver, mais aussi nous prouver) qu´on peut faire
deux fois mieux que le 4017
chéri du Meccano électronique...
et ce, uniquement avec du texte, quasiment sans
câblage ni composants extérieurs (ni condensateurs, ni astable,
juste 5 résistances). Car un programme, ça
n´est après tout que texte et nous n´allons pas
priver d´utiliser
aussi au maximum les programmes informatiques ad hoc pour les faire... écrire à notre
place !
En partant du schéma de
Microchip :
nous allons compliquer en ajoutant la dernière patte libre, GP2 (on
sait que la patte n° 3 n´est utilisable que comme une entrée ;
et les septième et huitième sont celles de l´alimentation,
plus et masse).
Avec 5 pattes on peut
commander (5 — 4) = 20 leds, dont voici le schéma :
On voit clairement les huit
leds ajoutées, D12 à D19 et la 5 résistance,
sur GP2.
Rappelons le principe de
la commande... Chaque patte peut être utilisée :
 |
 |
 |
soit
comme une entrée : |
|
soit
comme une sortie : |
Ça n´est pas la tension
qui compte : un entrée peut être à 0 ou à 5 volts ; une
sortie peut être à 0 ou à 5 volts aussi. C´est
la fonction qui compte : soit l´info entre pour être traitée
(un bouton-poussoir, un phototransistor, une LDR, un détecteur de chaleur,
de bruit, d´aimant...), soit l´info traitée sort (une
led, un optocoupleur, un relais, un haut-parleur, un composant de puissance...).
Vous vous souvenez que c´est
le registre TRISIO qui contient ces informations sur l´état des pattes :
le bit 4 de TRISIO, s´il est à ,
commande que cette patte est une sortie (mnémo en anglais : zéro
ressemble à un O, comme output).
Si ce bit était à ,
la patte de sortie n° 4 serait une entrée (mnémo angloglotte :
un un ressemble à un I comme input). Voilà un point de
réglé.
 |
 |
 |
 |
|
Pour
vous troubler encore un peu, une simple sortie peut être exploitée
de quatre façons ! Je peux commander qu´une lampe m´alerte si
la sortie est à (d
sur le dessin), ou bien si cette sortie est à (c)...
Et vous êtes bien d´accord que les lampes à gauche
du dessin ne sont pas allumées si la sortie est à (a)
ou à (d).
La bonne nouvelle, c´est que c´est vous qui décidez de
la façon dont la lampe est exploitée, chacune ayant un avantage
particulier. |
Le PIC peut donc fournir du
courant (dessin d) (vous verrez souvent utiliser le mot anglais source) ou
en consommer (dessin c) (en anglais sink). C´est le registre
GPIO qui commande le niveau de sortie : le bit 4 de GPIO, s´il est à ,
commande à la patte n° 4 de présenter du + 5 volts.
Ce bit à la
patte 4 serait mise à la masse (0 volt). Et
enfin : que cette sortie 4 allume ou éteigne la lampe, c´est décidé bêtement...
par le câblage
de cette lampe.
Si vous êtes de bonne
foi, vous cesserez de dire que le PIC est compliqué, et vous vous souviendrez
que c´était déjà le fonctionnement de la sortie du simplissime circuit 555 !

FAQ Je
compte de 0 à 16 et je présente ce nombre sur
les sorties GPIO en espérant que les leds vont s´éclairer
une à une,
et que cela me fera un compteur binaire (j´avoue que
c´est
pour émuler
visuellement un circuit CMOS 4029). Mais ça ne marche
pas ! — Normal !
Le bit 3 de GPIO est “spécial” (c'est une
entrée
seulement, le bit 3 de TRISIO est
toujours à )
est ne peut être
utilisé pour
ton montage !
Parions que tu t´étais inspiré d´un
programme écrit
pour un PIC à pattes plus nombreuses (comme le 16F84).
Dans ces PIC-là, le registre de sortie a huit vrais
bits et ces bits peuvent être copiés sur les
pattes et montrer en effet avec huit leds un nombre en binaire.
Oublie cette possibilité avec le 675 (pour le moment)...
Note aussi que GPIO ne possède matériellement
que 6 bits
et saute de 111111 à 000000 quand il compte. |
|
|
 |
|
Bien, mettons maintenant
en oeuvre les connaissances que nous venons de... rafraîchir. Examinons
de près la diode D4 de notre schéma .
 |
 |
|
On voit
que, pour qu´elle s´illumine, il faut que du courant sorte de
GP1, traverse une résistance, la led (dans le bon sens), une deuxième
résistance,
puis pénètre dans GP5.
GP1 et GP5 doivent
être déclarées comme étant des sorties, GP5 en
sortie
à la masse (s:0V), GP1 en sortie au + (s:5 V). Toutes les
autres seront déclarées
comme étant des entrées (haute impédance, abréviation Z) : 
Voici donc le registre
TRISIO :
Les
zones grisées sont sans intérêt.
|
|
 |
 |
 |
 |
Et voilà
GPIO . Les zones en gris
sont sans intérêt (on y met ce qu´on veut, des zéros par
exemple). |
|
 |
Et notre programme sera ainsi
fait : après un en-tête contenant tout le blablabla habituel
et obligatoire, on place les nombres ad hoc dans les deux registres GPIO et TRISIO pour
allumer la première led.
Puis on fait une pause pour que cette led soit
visible pendant un temps humainement appréciable (sans pause, l´éclair
durerait un millionième
de seconde !)...
Puis on entre les nombres destinés à l´allumage
de la deuxième led, on fait une pause, et cetera...
PTI+ Un
bogue est connu concernant le 12F629/675 : il refuse souvent
d´obéir quand on lui commande plusieurs changements successifs
d´un bit de sortie. Les codes bcf GPIO,1
bsf GPIO,2 par exemple
risquent de ne pas fonctionner. Il faut tourner le problème en
commandant le changement de bits de GPIO en bloc, soit avec
un "masque",
soit avec un registre tampon temporaire. Ce que nous verrons
dans le programme. |
|
|
Voici l´extrait d´un
programme pour utiliser les 20 leds dans un gros chenillard :
Rien de bien compliqué,
n´est-ce
pas ? Juste à remarquer : mon choix d´utiliser le décimal
(directive R = DEC dans l´en-tête) au
lieu du binaire, qui pourtant est bien plus pratique dans ce cas particulier.
C´est
que, comme promis, nous allons plus tard faire écrire ces programmes par
ordinateur... plus exactement par des logiciels “tableurs” du genre
Excel, qui ne digèrent
pas facilement le binaire ni l´hexadécimal...
Pour ces
premiers tests, le sous-programme Tempo est
le même que celui que celui déjà vu sur PicTrain ;
bien sûr, le temps sera plus tard réglable, pour se prêter à toutes
les applications prossibles (ça n´est pas un chenillard “dédié” que
nous fabriquons, mais un “hyper-4017” à
utilisation banalisée)...
Voilà le tableau
Excel qui m´a permis de remplir les cases TRISIO et GPIO ; la seule
chose que j´ai faite
à la main (la seule chose intelligente, que l´ordinateur ne peut
pas faire à
ma place) est de placer les "0" et les "1" dans les 5 colonnes
de gauche.
La prochaine fois, on traduira
directement ce tableau de Excel vers du texte, on l´enrichira de façon automatique,
puis on traduira ce texte vers un fichier .ASM.
(Sachez, pour votre gouverne,
que l´assembleur Microchip MPLAB IDE est aussi un traitement de texte et
une calculette : si c´est moins lourd (c´est-à-dire pas
dans tous les cas), on pourra donc même éviter le passage par un
tableur !) |