Dernière mise à jour :
16/05/2010
Présentation
Le présent montage comporte un microcontrôleur de type PIC
16F84A (obsolète) ou 16F628A (conseillé), et permet de commander un ou plusieurs appareils
parmi huit, par le biais de quelques boutons poussoirs.
Chaque bouton
poussoir correspond à une sortie distincte, et l'appui sur l'un
de ces
boutons active la sortie correspondante. Une version similaire et un
peu moins évoluée,
ne mettant en oeuvre aucun composant programmable, est
présentée à la page
Selecteur
001.
Trois versions sont proposées ici :
- Schéma 001c avec 16F84A - première version avec oscillateur "externe".
- Schéma 001c avec 16F628A - seconde version avec oscillateur interne.
- Schéma 001cb avec 16F628A - troisième version avec oscillateur interne.
Version conseillée.
La
dernière version 001cb est conseillée pour les raisons suivantes :
- le 16F628A
est plus facile à trouver et coûte moins cher que le 16F84A;
- le code logiciel (fourni) est écrit avec la
version la plus récente (à l'écriture de ces lignes) de MikroPascal;
- des erreurs ont été corrrigées.
Pourquoi utiliser un PIC ?
Chercher
à réaliser un sélecteur "simple" avec un composant programmable
peut paraître un peu exagéré, vu le peu de composants nécessaires en
version traditionnelle (voir les autres sélecteurs, sur ce site). Si je
m'y suis attelé, c'est parce que j'y ai
vu les avantages suivants :
- choix du mode de
fonctionnement : soit la sélection d'une sortie désactive
automatiquement la sélection précédente, et on fonctionne alors
toujours dans une configuration "1 sortie parmi plusieures", où l'on ne
peut jamais avoir deux sorties actives en même temps. Soit la sélection
des sorties se fait de façon individuelle, et on peut activer chaque
sortie de façon indépendante (on peut en avoir plusieurs d'activées en
même temps).
- Mémorisation de l'état des sorties après coupure de l'alimentation.
-
Mémorisation de presets utilisateur, rendant possible le rappel
instantané de plusieurs configurations
préenregistrées (5 presets dans le cas présent).
Schémas
Par rapport au schéma du
sélecteur 001,
le PIC n'est pas le seul composant à avoir
fait son apparition. J'ai également ajouté un registre
à décallage série / parallèle de type CD4094, qui permet
de conserver plusieurs sorties activées en même temps, ce
que ne permettait pas le démultiplexeur
"1 parmi N" précédement utilisé.
Version 001c avec PIC 16F84A (horloge externe) - désormais déconseillée
Version 001c avec PIC 16F628A (horloge interne) - désormais déconseillée
Version 001cb avec PIC 16F628A (horloge interne) - Conseillée
Choix du PIC (16F84A ou 16F628A)
A l'origine, ce sélecteur a été
élaboré avec un PIC 16F84A. Ce dernier peut
avantageusement être remplacé par un 16F628A, dont le
surplus de capacité n'apportera rien ici mais dont le prix est
plus bas, argument auquel vous ne devriez pas être insensible.
Les deux composants sont interchangeables broche à broche, vous
devez juste faire attention à charger le bon fichier *.hex dans
le microcontrôleur.
Cadencement du programme
Les PIC 16F84A et 16F628A nécessitent une horloge pour fonctionner (pour
faire
tourner le programme interne). Cette horloge peut être à
base de quartz pour une grande stabilité de fréquence
d'horloge, ou être à base d'un simple circuit RC
(résistance et condensateur). Vue la précision requise
pour le fonctionnement de ce sélecteur, aucun quartz n'est
nécessaire, et le PIC se contente ici de tourner en mode RC,
grâce à R11 et C1.
Remarque : le PIC 16F628A peut
fonctionner avec une horloge interne à 4 MHz, et ne nécessiter alors
aucun composant externe. Je n'avais pas adopté cette
démarche dans un premier temps, d'une part parce que je ne savais pas
encore comment faire, et d'autre part pour rendre entièrement
compatible le
circuit imprimé avec les deux types de microcontrôleurs,
même si en pratique on pouvait dire qu'il suffisait de ne pas
câbler les deux composants superflux (R11 et C1) en cas d'utilisation
du 16F628A. A compter du 18/04/2010, modification et recompilation du
programme pour fonctionnement avec horloge interne 4 MHz du PIC 16F628A. R11 et C1 n'ont
donc plus de raison d'être.
Clavier de commande
Le clavier de commande est matérialisé par des boutons
poussoirs individuels, mais il est tout à fait possible
d'utiliser un clavier rigide ou souple du moment que ce dernier soit de
type multiplexé en 4 rangées et 4 colonnes.
Ces
rangées et colonnes sont cablées sur les huit lignes du
port B du microcontrolleur, qui se retrouve ainsi entièrement
monopolisé. La fonction de chaque bouton poussoir est
indiqué ci-après :
SW1..SW8 : commande sortiesLe
système dispose de 8 sorties individuelles, que l'on peut
commander
à partir des boutons SW1 à SW8. Un appui sur le bouton
SW4 active la
sortie N°4, un appui sur le bouton SW7 active la sortie N°7,
etc. Si le
circuit est placé en mode "mono-sortie" (LED OUTMODE
allumée), l'activation d'une sortie conduit à la
désactivation de la
précédente, car il ne peut y avoir qu'une seule sortie
activée à la
fois. Si le circuit est placé en mode "multi-sorties" (LED
OUTMODE éteinte, après appui sur SW9),
l'appui sur un des boutons poussoir SW1 à SW8 conduit à
changer l'état
de la sortie correspondante. Ainsi, si on appuie une fois sur le bouton
SW5, la sortie N°5 est activée. Si on appuie une nouvelle
fois sur le
bouton SW5, la sortie N°5 est désactivée. Les autres
sorties ne
changent pas d'état.
SW9 : Mode mono-sortie / multi-sorties
Le poussoir SW9 permet de basculer entre mode "mono-sortie" et mode
"multi-sorties". En mode "mono-sortie", la ligne E/S RA3 du PIC est
portée à l'état logique haut, et la led qui y est
raccordée s'allume (elle est éteinte en mode
"multi-sorties").
SW10
: Sauvegarde dans le preset en cours
L'appui sur le poussoir SW10 provoque la mise en mémoire de
l'état des sorties en cours, dans le dernier preset
sélectionné. Si aucun preset n'a été
sélectionné entre la mise sous tension du montage et le
moment où ce poussoir est activé, les données en
cours sont sauvées dans le preset 0 (voir ci-après). A
chaque sauvegarde de configuration, la led connectée sur la
ligne RA4
du PIC s'allume pendant quelques
centaines de millisecondes ou clignote trois fois (selon version logicielle).
SW11..SW16 : Presets 0 à 5
Cinq presets utilisateur permettent de sauvegarder cinq configurations
de sorties différentes, que l'on peut rappeler à tout
instant. Il s'agit des presets 1 à 5, activables grâce aux
boutons poussoirs SW12 à SW16. Il existe un sixième
preset appelé Preset 0, qui correspond à la configuration
en cours au moment où le système est mis sous tension. Ce
preset 0 est celui où est stocké l'état des
sorties quand on appuie sur SW10 et qu'aucun bouton de preset SW11
à SW16 n'a été actionné auparavant. C'est
ce preset qui est rappelé à la mise sous tension du
système. A chaque rappel d'une configuration, la led
connectée sur la ligne RA4 du PIC s'allume pendant quelques
centaines de millisecondes ou clignote deux fois (selon version logicielle).
Remarque : vous trouverez
surement curieux l'étage à transistor cablé sur
la ligne RA4 pour les deux premières versions. La raison en est que la
sortie RA4, contrairement aux
autres sorties du port A, se fait en drain ouvert, et qu'on ne dispose
donc pas de source d'alimentation positive lorsque cette sortie est
active. Bien sûr, il est possible de câbler une led
directement entre cette ligne RA4 et le +5V (avec sa résistance
série pour la limitation de courant, tout de même). Mais
m'avez-vous déjà vu faire simple quand on pouvait montrer
qu'il était possible de faire plus compliqué ? Mettez
donc ce bout de montage de côté, il pourra vous servir un
jour... Et si vraiment vous n'en pouvez plus d'attendre, passez tout de
suite à la version 001cb (qui je le rappelle est désormais la version
conseillée).
Activation des sorties 1 à 8
Le nombre de ports disponibles sur les 16F84A et 16F628A est insuffisant pour
disposer directement de 8 sorties individuelles, vu qu'il ne reste que
les cinq lignes du port A de libre (le port B étant
utilisé pour les boutons poussoirs). Un démultiplexeur de type
CD4514 ou CD4515 permettrait de disposer de 8 sorties à partir
de trois lignes de commande seulement, mais avec la limitation de ne
pouvoir sélectionner qu'une seule sortie à la fois. J'ai
donc opté pour l'utilisation de bascules / verrous pour
contourner cette limitation. Des bascules contenues dans un CD4013
conviendraient tout autant que d'autres, mais j'ai
préféré utiliser un CD4094 qui intègre 8
verrous dans le même boitier. Ce circuit n'est pas à
proprement parler un octuple verrou, mais un registre à
décallage permettant de convertir une donnée série
(DATA 8 bits) en une donnée parallèle (OUT0 à
OUT7). Pour pouvoir le piloter, on a besoin de 3 lignes de commande, ce
dont on dispose même avec le petit PIC choisi ici. Trois sorties
du PIC sont ainsi réservées aux trois fils de "commande"
du CD4094 :
RA0 = DATA
RA1 = CLOCK
RA2 = STROBE
Toute la logique et chronologie des signaux est assurée au sein
du programme, ce qui simplifie bien la partie matérielle. Si
vous êtes interressé par le fonctionnement du
système, je vous invite à consulter le code source en
langage Pascal, livré avec le fichier HEX compilé.
Exemples d'utilisation
Quelques exemples sont souvent parlant, en voici donc rien que pour vous et exempts de droits.
Exemple N°1
Vous
voulez activer les sorties 1 et 3 et sauvegarder cette configuration
dans le preset N°2. Les étapes à suivre sont les suivantes :
- Si la
LED du mode de sortie est allumée (mode mono-sortie activé), passer en
mode multi-sorties en appuyant sur SW9. La LED doit s'éteindre.
- Appuyer sur le poussoir SW13 / Preset N°2
- Appuyer sur les poussoirs SW1 à SW8 de façon à n'activer que les sorties 1 et 3.
- Appuyer sur le poussoir SW10 / Save pour sauvegarder la
configuration en cours dans le preset dernièrement
sélectionné.
Exemple N°2
Vous voulez activer la seule sortie 6 et
sauvegarder cette configuration dans le preset N°5. Les étapes à suivre
sont les suivantes :
-
Le mode de sortie peut indifférement être mono-sortie ou
multi-sorties, pas d'importance dans le cas présent.
- Appuyer sur le poussoir SW16 / Preset N°5
- Appuyer sur les poussoirs SW1 à SW8 de façon à n'activer que la sortie 6.
- Appuyer sur le poussoir SW10 / Save pour sauvegarder la
configuration en cours dans le preset dernièrement
sélectionné.
Exemple N°3
Vous
voulez que les sorties 1, 2 et 3 soient acivées à la mise sous tension
du montage. Vous pouvez donc sauver cette configuration dans le preset
N°0, qui est celui rappelé à la mise en route. Les étapes à suivre
sont les suivantes :
- Si la LED du mode de sortie est allumée
(mode mono-sortie activé), passer en mode multi-sorties en appuyant sur
SW9. La LED doit s'éteindre.
- Appuyer sur le poussoir SW11 / Preset N°0 (cette action est inutile si vous venez juste d'allumer le montage).
- Appuyer sur les poussoirs SW1 à SW8 de façon à n'activer que les sorties 1, 2 et 3.
- Appuyer sur le poussoir SW10 / Save pour sauvegarder la configuration en cours dans le preset N°0.
Utilisation des sorties
Les schémas proposés donnent un exemple d'exploitation des sorties par un simple
affichage de leds, mais vous pouvez aussi, grâce à des transistors ou à
un
circuit intégré de type ULN2803, attaquer directement des relais,
comme
celà est décrit à la page
Interfaces
logique 001.
Prototypes
Réalisés sur plaque d'expérimentation sans soudure, pour la première
version à base de 16F84A et pour la dernière version à base de 16F628A.
Prototype 001c à base de 16F84A
Rien de particulier à dire, le +5 V d'alimentation est obtenu
avec une pile 9 V et un régulateur de tension
intégré LM7805.
Version avec 16F84A
Les touches du clavier (les boutons poussoirs) sont ici
remplacées par de simples fils volants. J'aime utiliser cette
méthode car les contacts ne sont jamais francs, et permettent de
vérifier rapidement le comportement du système avec des
rebonds sur les entrées, la fonction anti-rebonds étant
ici implémentée de façon entièrement
logicielle. Sur cette maquette, cinq leds seulement ont
été cablées : sorties 1 à 4 et confirmation
prise en compte sauvegarde ou rappel preset. J'ai utilisé un
condensateur de 220 pF pour l'horloge, c'est vraiment pour montrer que
la fréquence d'horloge n'est pas du tout critique.
Rappel
: point besoin de la résistance et du condensateur sur la broche
d'horloge du PIC avec les deux dernières versions à 16F628A puisque
l'horloge interne 4 MHz est utilisée.
Prototype 001cb à base de 16F628A
Quasiment le même circuit que précédement mais
cette fois j'ai utilisé un petit clavier matricé 4 x 4
tout fait (carte
extension MikroElektronika) et un baregraphe 10 leds pour faire comme
sur le schéma. Et surtout j'ai procédé à
des tests un peu plus sérieux ;-)
Maintenant
la led "Mode de sortie" connectée en RA3 s'allume correctement
(deuxième led à partir de la droite sur la
première photo ci-après).
Les
huit premières LED du baregraphe correspondent à l'état des 8 sorties,
la neuvième LED indique le mode de sortie, et la dernière clignote lors
du rappel ou de la sauvegarde d'un preset en EEProm.
Réalisation de Alain
Sélecteur 001c version 16F628A (deuxième version du
sélecteur) fabriqué par Alain, merci à lui pour
son retour et pour les photos.
Et en plus, Alain a eu la gentillesse de m'envoyer le dessin de son typon, très belle réalisation !
Logiciel du PIC
Programme compilé (*.hex) pour PIC 16F84A et 16F628A, avec code source
MikroPascal V8.3 pour les deux premières versions et V3.20 pour la troisième version.
Sélecteur
001c - 16F84A - (07/10/2008)
Sélecteur
001c - 16F628A - (18/04/2010)
Sélecteur
001cb - 16F628A - (16/05/2010) -
Version conseilléeL'archive suivante contient le programme des trois versions existantes.
Sélecteurs
001c et 001cb - 16F84A et 16F628A - (16/05/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
16/05/2010Toutes les remarques et corrections du 16/05/2010 qui suivent s'appliquent à la dernière version logigielle 001cb.
- Portage du code logiciel de MikroPascal V8.3 vers
MikroPascal Pro V3.20.
- Correction
problème appui prolongé sur un même bouton. Désormais, il y a mode
répétition au bout de 500 ms au lieu de 100 ms. La valeur d'origine
(100 ms) était trop courte et il fallait appuyer rapidement sur les
boutons pour ne pas avoir d'effet "secondaire".
- Correction
problème LED mode sortie "mono-sortie" ou "multi-sorties". Désormais,
cette LED s'allume correctement quand elle doit l'être, et ne "flashe"
plus (j'avais oublié de désactiver les comparateurs dans
l'initialisation du PIC).
- Désormais, la LED connectée en ligne RA4 du PIC
(LOAD/SAVE) clignote de manière différente selon que l'on rappelle ou
que l'on sauvegarde un preset. La led clignote deux fois lors d'un
rappel de preset et clignote trois fois lors d'une sauvegarde.
- Suppression du transistor qui était branché en sortie
RA4 du PIC, la led LOAD/SAVE y est désormais directement reliée.
Attention au sens de branchement, la cathode de la led est bien côté PIC (sortie drain ouvert) !
- Correction dans le texte descriptif du poussoir SW9 : en mode "mono-sortie", la ligne E/S RA3 du PIC est
portée à l'état logique haut, et la led qui y est
raccordée s'allume (elle est éteinte en mode
"multi-sorties"). Je m'étais trompé et avais marqué le contraire.