Dernière mise à jour :
21/02/2010
Présentation
Ce chenillard un peu particulier m'a
été demandé par quelqu'un qui souhait effectuer le
dépannage d'un jouet d'enfant cassé, et dont le
fonctionnement est semi-manuel. Composé de 10 leds et d'un
bouton poussoir, voici son fonctionnement, sachant que les dix leds
sont disposées verticalement, led D1 en haut et led D10 en bas :
- à la mise sous tension, toutes les leds sont éteintes.
- 1er appui sur le bouton poussoir : la led D1 s'allume, puis
s'éteint quand s'allume la led D2, qui elle-même
s'éteint quand s'allume la led D3, etc. L'illusion est celle
d'une bille qui tombe. Une fois la led D10 allumée, tout se
bloque (toutes les leds sont éteintes, sauf la led D10 qui reste
allumée).
- 2ème appui sur le bouton poussoir : la led D1 s'allume, puis
s'éteint quand s'allume la led D2, qui elle-même
s'éteint quand s'allume la led D3, etc. Comme
précédement, sauf que là, le système se
bloque quand s'allume la led D9. A ce stade, les deux leds D9 et D10
restent allumées.
- 3ème appui sur le bouton poussoir : la led D1 s'allume, puis s'éteint
quand s'allume la led D2, qui elle-même s'éteint quand s'allume la led
D3, etc, même cinéma, jusqu'à allumage de la led D8, qui reste alors
allumée en plus des deux du bas.
- idem pour les appuis suivant.
- 10ème appui : il y a à ce moment 9 leds allumées
(D2 à D10), la dernière (D1) s'allume et hop, le
système se fige. Toutes les leds sont allumées.
- 11ème appui : toutes les leds s'éteignent et il ne se
passe rien d'autre, on se retrouve au point de départ.
Le dessin qui suit donne un aperçu de ce que cela doit donner.
Chaque colonne représente les dix leds à un instant
donné. Le "Go !" au dessus d'une colonne représente
l'appui sur le bouton poussoir (ce dessin ne représente qu'une
partie d'un cycle complet).
Pour répondre à ce cahier des charges, je me suis dit que
la meilleur solution serait sans doute d'utiliser un PIC, et je me suis
donc attelé à emplir de quelques lignes de code, un
16F628A flambant neuf.
Schéma
Le schéma est très simple, surtout si on le compare
à toute la mécanique qu'il aurait fallu mettre en place
avec des circuits logiques classiques. L'horloge (l'oscillateur) est
intégré dans l'unique circuit intégré
présent, il est vraiment difficile de faire plus simple.
Fonctionnement général
A la mise sous tension, toutes les leds clignotent trois fois de suite
rapidement, puis restent ensuite éteintes. Si cet effet n'est
pas souhaité, il faut simplement mettre en commentaire la ligne
"Welcome" dans la procédure du programme principal et recompiler
le programme (avec par exemple la version d'évaluation de
MikroPascal puisque le code ici ne dépasse pas la limite de 1
KO). Pour initier le cycle de descentes de billes, il faut appuyer sur
le bouton poussoir SW1. A noter que l'appui sur SW1 pendant qu'une
bille est en train de descendre, n'est volontairement pas pris en
compte. De même, un délai d'inactivité de 100 ms a
été volontairement ajouté après chaque fin
de descente, ce délai est surtout utile pour conserver un
comportement normal quand on arrive à la dernière bille,
si la vitesse de descente sélectionnée est rapide, pour
ne pas enchaîner immédiatement avec la suite de
façon incontrôlée (à cause des rebonds du
poussoir). Il s'agit ici en quelque sorte d'un système
anti-rebond logiciel.
Réglage de la vitesse
La vitesse de descente des "billes" est programmable via les trois
cavaliers JP1, JP2 et JP3. Le délai qui s'écoule entre
chaque étape (passage d'une bille à l'autre)
dépend de l'orientation de ces cavaliers, vers le +Alim (niveau logique
1) ou vers la
masse (niveau logique 0), selon le codage suivant.
JP1=0 et JP2=0 et JP3=0 > délai = 10 ms (le plus rapide)
JP1=1 et JP2=0 et JP3=0 > délai = 30 ms
JP1=0 et JP2=1 et JP3=0 > délai = 50 ms
JP1=1 et JP2=1 et JP3=0 > délai = 70 ms
JP1=0 et JP2=0 et JP3=1 > délai = 100 ms
JP1=1 et JP2=0 et JP3=1 > délai = 120 ms
JP1=0 et JP2=1 et JP3=1 > délai = 150 ms
JP1=1 et JP2=1 et JP3=1 > délai = 200 ms (le plus lent)
Important : les trois
entrées RA5, RA6 et RA7 doivent impérativement être
raccordées soit à la masse, soit au +Alim, il ne faut pas
les laisser en l'air. Aucune obligation d'utiliser des cavaliers si
vous souhaitez garder toujours la même vitesse, ces
entrées peuvent être câblées à
demeure. D'un point de vue pédagogique, le remplacement des
trois cavaliers par trois inverseurs simples accessibles par
l'utilisateur peut l'habituer à "évaluer le poids
d'informations binaires", puisqu'à huit combinaisons possibles
correspondent huit vitesses différentes. Vous pouvez aussi
remplacer ces inverseurs par de simples interrupteurs
câblés entre les entrées et le +Alim, il faut dans
ce cas ajouter des résistances de rappel de 10 K0 à 47 K0
entre chaque entrée et la masse.
Prototype
Le montage a été essayé avec la platine EasyPic4,
associée à un petit circuit d'expérimentation sans
soudure, les deux systèmes étant raccordés entre
eux au moyen de connecteurs de type EasyProto (un connecteur pour le
port A du PIC et un autre pour le port B).
Les leds utilisées sont vieilles et n'éclairent pas
beaucoup, d'autant que la valeur des résistances séries
montées en série avec ces dernières est de 1K,
mais cela suffisait amplement pour mettre au point le montage et en
vérifier le fonctionnement.
Alimentation
Le circuit est prévu pour être directement alimenté
sur pile, avec deux ou trois piles de 1,5 V montés en
série. Mais vous pouvez bien entendu ajouter un
régulateur de tension
de type 7805 (ou mieux 78L05) si le branchement à une source de tension
supérieure s'impose.
Code source et fichier compilé
Code source MikroPascal V8.3 et fichier binaire compilé (*.hex)
prêt à flasher dans le PIC, dans l'archive zip que voici :
Chenillard_009 - 16F628
(version du 21/02/2010)
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page
PIC - Sources.
Circuit imprimé
Non réalisé.
Corrections et remarques
21/02/2010-
Possibilité ajout condensateur de 100 nF en parallèle sur le bouton
poussoir de commande SW1, dans le cas où vous observez un déclanchement
inopiné sur la dernière descente de led (poussoir enfoncé trop
longtemps et rebonds au relachement). Cet ajout a nécessité une petite
modification au niveau du logiciel, car le condensateur, à la mise sous
tension, est déchargé et se comporte donc comme un court-circuit (même
effet qu'un appui sur SW1).
- Portage du code logiciel pour compilation sous MikroPascal Pro V3.20.