Electronique > Réalisations > Arbitre électronique 001

Dernière mise à jour : 08/08/2010

Présentation

Cet arbitre électronique permet de départager un joueur parmi quatre en indiquant celui qui a été le plus rapide à appuyer sur un bouton. Il fait usage d'un microcontroleur PIC 16F628A.

arbitre_001_pcb_3d_a

Ce circuit fort simple est doté de cinq boutons poussoirs et de cinq leds. Quatre boutons sont associés à des joueurs, le cinquième assure la remise à zéro manuelle. Après la mise sous tension ou après RAZ (remise à zéro, manuelle ou automatique), toutes les leds sont éteintes et le système est prêt. Celui des quatres joueurs qui appuye le plus vite sur son bouton poussoir voit sa led s'allumer, et tous les autres poussoirs sont instantanément bloqués. De la sorte, il n'y a toujours qu'une seule led d'allumée à la fois, même si deux joueurs ont appuyé sur leur poussoir de façon très rapprochée dans le temps. Une version 7 ou 8 joueur est proposée à la page Arbitre 002 et une version 8 joueurs sans composant programmable est proposée à la page Arbitre 003.

Schéma 001

Version 4 joueurs. Un circuit intégré, cinq leds, cinq résistances et cinq boutons poussoir.

arbitre_001

Que dire de ce circuit ? Tout est logiciel, finalement. J'ai par le passé réalisé un circuit dont la fonction était similaire, mais qui ne convenait que pour deux joueurs et qui comportait deux circuits de la famille CMOS (CD4xxx). Il aurait bien sûr été possible de faire la même chose pour quatre joueurs en ajoutant quelques portes logiques, mais j'ai préféré ici faire appel à un petit PIC.

Déroulement du programme interne au PIC
Le programme est en fait très simple : le PIC est configuré pour réagir sur un changement d'état des entrées RB0, et RB4 à RB7, grâce à l'activation des interruptions. C'est ce qui permet une grande réactivité du système, aucune boucle ne tourne dans le programme principal. Lorsqu'un joueur appuie sur un bouton poussoir (SW1 à SW4), le programme regarde si un poussoir a déjà été enfoncé depuis la dernière RAZ, en lisant simplement l'état d'une variable appelée ici bSwitchPressed. Si cette variable est à l'état logique bas, la led correspondant au bouton enfoncé s'allume et la variable passe à l'état haut. Si cette variable est à l'état haut, aucune led ne peut plus être allumée, ce qui correspond au blocage des poussoirs restants. La seule façon de débloquer la situation est d'attendre quelques seconde que le système se réinitialise de lui-même (RAZ automatique), ou d'appuyer sur le poussoir SW5 (RAZ manuelle).

Des fils tout croisés ?
Vous pouvez vous poser la question du pourquoi tout cet imbroglio de fils croisés au niveau des sorties utilisées pour les leds, alors qu'il aurait été possible d'attribuer chaque sortie dans l'ordre : RA0 en correspondance avec SW1, RA1 en correspondance avec SW2, etc... jusqu'à RA4 en correspondance avec SW5. Deux raisons à l'ordre choisi :
- la sortie RA4 se fait en drain ouvert et l'alimentation de la led doit donc être inversée par rapport aux autres sorties, qui travaillent avec une logique positive (un niveau logique haut provoque l'allumage de la led). J'ai donc réservé cette sortie pour la led D5 correspondant à la remise à zéro (cette dernière clignote deux fois rapidement à chaque RAZ).
- les sorties RA0 à RA3 ne sont pas physiquement dans l'ordre désiré au niveau du circuit imprimé, et je tenais absolument à disposer les leds D1 à D4 dans l'ordre. C'est mon côté casse-pied.
Bref, il y a plusieurs façons de faire, j'ai choisi celle-là.

Pourquoi tant de broches inutilisées sur le PIC ?

Quatre joueurs c'est bien, mais pourquoi ne pas exploiter les broches restantes du PIC ? Il y en a bien assez pour augmenter le nombre de joueurs, non ? Oui, effectivement, il reste six broches que l'on pourrait exploiter. Mais si on utilise deux broches pour un joueur (un fil pour le bouton poussoir et un autre pour la led), on ne peut qu'ajouter 3 joueurs. Et dans ce cas autant aller voir du côté de l'arbitre 002 qui en gère justement 7. L'intérêt principal ici est d'utiliser des broches qui peuvent déclencher une interruption. La réactivité du circuit est nettement meilleure et la possibilité de distinguer lequel de deux joueurs qui appuient sur leur bouton dans un intervalle de temps très court a appuyé en premier est plus fiable. On pourrait fort bien effectuer une lecture en boucle de l'ensemble des entrées et localiser les sources du ou des changements, mais cette façon de faire requiert un peu plus de temps processeur et laisse donc plus de (mal)chance de tomber sur un coup double. J'ai aussi pensé utiliser un expendeur de port de type PCF8574 :

arbitre_001b

Mais le problème reste entier : entre le moment où le composant indique (via une interruption) que quelque chose à changé et le moment où on va lire l'état des entrées, il s'écoule un certain temps pendant lequel un autre joueur peut appuyer sur son bouton. Du coup le résultat de la lecture peut indiquer plusieurs entrées actives et il est impossible de savoir laquelle a déclanché l'interruption. J'ai également tenté l'approche suivante, dans laquelle les broches du PIC servent d'entrée en mode attente et servent de sortie quand au moins un joueur à appuyé sur son bouton.

arbitre_001c

Mais je n'ai pas réussi à faire fonctionner le montage.

Codes source et fichiers compilés

Tous les fichiers utiles sont contenus dans l'archive zip dont le lien suit. Code en Pascal, écrit et compilé avec la version V8.3 de MikroPascal. J'ai utilisé le PIC 16F628A, mais le programme peut tout aussi bien tourner sur un PIC 16F84A moyennant quelques retouches mineures (si vous en avez envie et que vous n'y arrivez pas, je le ferai. Mais je vous conseille tout de même le 16F628A, plus "puissant" et moins cher).
Arbitre 001 - 16F628A - Pour 4 joueurs (28/03/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é

Réalisé sur un circuit simple face, mais ce montage peut sans problème être réalisé sur plaque d'expérimentation style Veroboard.

arbitre_001_pcb_composants

Typon 001 aux formats PDF, EPS et Bitmap 600 dpi

Remarques

Pour ce genre de réalisation, il est impératif que les boutons poussoirs soient de très bonne qualité, il est hors de question d'utiliser des poussoirs standards grand public à 50 cents pièce. Le fait de taper vite fait aussi taper fort, et les poussoirs bon marché ne résistent pas longtemps à ce genre de traitement.