Electronique > Réalisations > Selecteur 001c

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.

selecteur_001cb_16f628_proto_001b

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é.

selecteur_001c_16F84
Version 001c avec PIC 16F84A (horloge externe) - désormais déconseillée

selecteur_001c_16f628
Version 001c avec PIC 16F628A (horloge interne) - désormais déconseillée

selecteur_001cb_16f628
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.

selecteur_001c_dessin_001a

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 sorties
Le 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.

selecteur_001c_proto_001a
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 ;-)

selecteur_001cb_16f628_proto_001a selecteur_001cb_16f628_proto_001d

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).

selecteur_001cb_16f628_proto_001c selecteur_001cb_16f628_proto_001b 

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.

selecteur_001c_proto_alain_001a selecteur_001c_proto_alain_001b

Et en plus, Alain a eu la gentillesse de m'envoyer le dessin de son typon, très belle réalisation !

selecteur_001c_proto_alain_001z

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ée
L'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/2010
Toutes 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.