Dernière mise à jour :
26/09/2010
Présentation
Le présent circuit a été conçu à la demande d'un régisseur de
théâtre, pour une "assistance" au séquencement d'un jeu d'orgue
lumineux directement depuis la scène, via des capteurs de
pression ou de simples interrupteurs agissant comme des interrupteurs
de commande.
Il délivre des évenements MIDI de type Note On/Off ou
Control Change (CC)
différents selon les capteurs actionnés. Par exemple envoi d'une note
MIDI Do3 sur action d'un premier capteur et envoi d'une note MIDI La3
sur action d'un second capteur. Le coeur du montage est un
petit PIC de
type 16F628A et les évenements MIDI générées peuvent être modifiées à
tout instant
et très simplement. Ce circuit a été basé sur mon
générateur de percussions 003
mais contrairement à ce dernier, le montage présenté ici est plus
"statique" et ne prend pas en compte la force de frappe sur les
capteurs, il agit en tout ou rien. Ce qui signifie que les évements
envoyés ne sont pas dynamiques. Comme il dispose de quatre entrée pour
capteurs, il peut envoyer quatre évenements MIDI différents.
Schéma
Le schéma complet est visible ci-dessous.
On y retrouve les grandes lignes du générateur de percussion 003,
avec une légère simplification au niveau des entrées capteurs. Le
circuit peut être décomposé en trois parties bien distinctes :
- les étages d'entrée
- le circuit de gestion à base de microcontrôleur
- la régulation d'alimentation secteur
Etages d'entrée
Il y a quatre circuits d'entrée,
chacun est constitué d'un capteur, de deux diodes, de deux résistances
et d'un condensateur. Ces quatre circuits d'entrée
auraient sans doute pû être encore plus simplifiés mais j'ai préféré
jouer
la sécurité. Le principe consiste à lire l'état des quatre
lignes RA0 à RA3 configurées en entrées logiques et à détecter
quand la tension monte brusquement. En mode d'envoi de
messages de type Note On / Off, un evènement Note On (3 octets) est produit quand
une des entrées reçoit une tension supérieure à 4 V, suivi
d'un évenement Note Off (3 octets) quelques dizaines ou centaines de millisecondes
plus tard. En mode d'envoi de messages de type Control Change, un seul
message MIDI est transmis (3 octets). Le graphe suivant montre comment le circuit
réagit quand l'entrée Tr1 (courbe rouge) reçoit une tension
qui évolue subitement à cause d'une action sur un bouton poussoir ou
capteur (Poussoir Tr1, courbe verte).
Le graphe qui précède montre deux évenements distincts dans le
temps. Le premier est lié à l'appui sur un capteur qui présente un
changement d'état franc. Le second est lié à l'appui sur un bouton
poussoir grand public qui génère des rebonds mécaniques et donc des
rebonds électriques (aller-retours répétés visibles sur la courbe verte). Le
circuit d'entrée "nettoye" les rebonds et permet d'envoyer au PIC des
signaux beaucoup plus propres. Dans les deux cas (avec ou sans rebonds
du capteur), le PIC ne génère qu'un seul évenement MIDI, c'est ce qui
est désiré.
Explication :
le condensateur C1 et la résistance R1 forment un
couple heureux qui permet de sculpter la forme du signal électrique qui
arrive au PIC quand le poussoir IN1 (ou autre élement de commande
mécanique) est actionné. Le signal obtenu et transmis au PIC est
semblable à celui de la
courbe rouge vue ci-avant. Il augmente vite mais
diminue lentement. C'est cette façon de faire qui permet d'obtenir
l'effet "anti-rebond" et
qui permet de ne pas retrouver une tension nulle trop rapidement. Rien
n'interdit de simplifier encore l'étage d'entrée et de ne rien
mettre (oui on peut) et de compter sur
le logiciel pour se dépattouiller seul (fonction anti-rebond logiciel,
appelé debouncing). Mais dans ce cas le temps de réaction est diminué
puisque l'évenement MIDI n'est envoyé qu'après la durée de la fonction
anti-rebond (plusieurs dizaines de ms). Faire ce qui est fait ici
(anti-rebond matériel) permet une réactivité immédiate (moins de 1 ms),
l'évenement MIDI est généré dès que l'entrée du PIC change d'état. La
diode zener est facultative,
elle n'est là que pour s'assurer qu'aucune surtension importante
n'atteindra le PIC. Les boutons poussoir (ou autres capteurs) de
commande sont en effet destinés à être déportés et ils risquent de se
retrouver assez loin du circuit électronique. De plus, le circuit étant
prévu pour une utilisation scénique, il est quasiment inévitable de se
chopper des parasites ambiants en provenance de sources de puissance
(projecteurs et gradateurs entre autres). La diode D5 pourra ne pas
être implantée si l'élement de déclenchement présente une très forte
résistance ohmique au repos (plus de 10 MO). Elle est indispensable si
la source de déclenchement présente au repos une résistance de sortie
faible, et empêche que le condensateur ne se décharge ailleurs que dans
la résistance R1 (ou alors il faut en tenir compte, par exemple en
augmentant la valeur de C1). La résistance R5 n'est pas absolument
indispensable mais est tout de même conseillée, elle permet de limiter
le courant d'entrée dans le PIC en cas de forte surtension en entrée
qui n'aurait pas été rabotée suffisement vite par la diode zener D1. A
mon sens la diode zener est assez rapide, mais pour un usage en
ambiance sévère je préfère redoubler de précautions (certains me diront
que c'est ridicule, mais j'assume).
Important
: si le capteur utilisé ne supporte pas un courant élevé, vous devez
ajouter en série avec lui une résistance de quelques dizaines à
quelques centaines d'ohms. La valeur du condensateur C1 est
relativement faible, mais quand il est déchargé, il se comporte comme
un court-circuit et provoque une pointe d'intensité qui n'est limitée
que par la diode D5.
Circuit de gestion
Toute
l'intelligence se trouve enfermée dans le PIC 16F628A, et vous pouvez
me
croire, il n'y a pas grand chose dedans. Le gros de l'affaire peut être
vite résumé. Les quatre entrées sont lues en permanence, et
quand l'une d'elle présente un étét logique haut, on considère
qu'il y a commande. Le logiciel du PIC constitue alors un message MIDI
dont la teneur précise dépend des options de l'utilisateur. Si rien de
spécial n'a été spécifié par l'utilisateur (premier démarrage par
exemple), les valeurs par défaut sont utilisées.
Spécification des notes à jouer (mode réglages)
Vous
pouvez spécifier la hauteur de la note à jouer mais aussi son canal
MIDI et sa vélocité, grâce au cavalier JP1 (câblé sur RA5) et aux interrupteurs et
poussoirs câblés
sur les lignes RA4, RB0, RB1, RB3, RB4,
RB5, RB6 et RB7 du PIC (respectivement Prog, SetF, SetA, SetB,
SetC,
SetD, SetE, Down et Up). Il n'y a aucune obligation de
modifier la hauteur et la vélocité des notes ou leur numéro de canal
MIDI si les valeurs
par défaut vous conviennent. Dans ce cas tous les interrupteurs et
poussoirs deviennent facultatifs mais la ligne RA5 du PIC doit tout de
même être câblée à la masse. Les lignes du PORTB peuvent rester en
l'air - le pullup interne étant activé, mais la ligne RA4 doit
impérativement être ramenée à un potentiel de +5 V ou de 0 V car il n'y a pas de pullup interne sur le port A du PIC. Les
valeurs de notes par défaut
sont
les suivantes :
- Note 1 : Do3 / canal MIDI 1
- Note 2 : Ré3 / canal MIDI 1
- Note 3 : Mi3 / canal MIDI 1
- Note 4 :
Fa3 / canal MIDI 1
La fonction des interrupteurs et poussoirs est décrite ci-après.
Cavalier JP1/Prog (câblé
sur la ligne RA5)
- cavalier entre broche centrale et masse (RA5 = 0) : mode
d'utilisation normal du système
- cavalier entre broche centrale et +5
V (RA5 = 1) : mode réglage des notes à générer
Interrupteur SW1 / SetA et SetB
(câblés sur ligne RB0 et RB1)Ces interrupteurs permettent de spécifier le paramètre à modifier pour l'entrée (numéro de note) sélectionnée.
- réglage canal MIDI (channel) : RB0 = 0 et RB1 = 0
- réglage hauteur de note (pitch) ou Numéro contrôleur (CC) : RB0 = 1 et RB1 = 0
- réglage vélocité note (vel) ou Valeur contrôleur (CC) : RB0 = 0 et RB1 = 1
Aucun paramètre ne sera modifié si RB0 = 1 et RB1 = 1 (sera peut-être utilisé pour extension future)
Interrupteurs SW1 / SetC
et SetD (câblés sur lignes RB3 et RB4)
Ces
deux interrupteurs permettent de spécifier la note à modifier parmi les
quatre disponibles. Un interrupteur ouvert correspond à un état logique
haut (valeur logique 1) et un interrupteur fermé correspond à un état
logique bas (valeur logique 0).
- Sélection Note 1 / Trig 1 : RB4 = 0 et RB3 = 0
- Sélection Note 2 / Trig 2 : RB4 = 0 et RB3 = 1
- Sélection Note 3 / Trig 3 : RB4 = 1 et RB3 = 0
- Sélection Note 4 / Trig 4 : RB4 = 1 et RB3 = 1
Le
logiciel du PIC se base sur la position de ces deux interrupteurs pour
déterminer quelle note ou Control Change doit être modifié(e), mais il
regarde également si les entrées de déclenchement Trig sont actives. Si
c'est le cas, ces entrées sont prioritaires. Admettons par exemple que
les deux poussoirs SetC et SetD sont tous deux en position 0 (RB3 et
RB4 à 0) et qu'aucune des entrées trig n'est active. Dans ce cas le logiciel en conclue
que les paramètres à modifier sont ceux de la première entrée Trig1. Si
maintenant on laisse les interrupteurs SetC et SetD dans la même
position mais que l'on active l'entrée Trig2, le logiciel ne tient plus
compte de l'état des interrupteurs SetC et SetD et il en conclue
que les paramètres à modifier sont ceux de la seconde entrée Trig2.
Dans la pratique, cette méthode permet de sélectionner rapidement la
voie dont les paramètres doivent être modifiés. En contrepartie, il
faut laisser l'entrée trig active pendant la modification (pendant
l'appui sur les poussoirs Up et Down). Durant les tests, j'ai trouvé
cette façon de faire bien plus pratique, mais il va de soi que cela
dépendra beaucoup de la position des capteurs de déclenchement. Ceci
dit, rien ne vous interdit de placer un bouton poussoir "local" en
parallèle sur les entrées trig, ce pourrait être utile si des
modifications devaient être souvent apportées. Si le circuit doit être
configuré une fois pour toute et qu'il n'y a pas besoin d'ouvrir son
boitier par la suite, les interrupteurs locaux SetC et SetD feront
parfaitement l'affaire, point besoin de s'embêter à en ajouter.
Interrupteur SW1 / SetE
(câblé sur ligne RB2)Cet interrupteur permet de spécifier le type de message à envoyer, Control Change ou Note On / Off.
- interrupteur ouvert (RB2 = 1) : envoi de messages de type Control Change
- interrupteur fermé (RB2 = 0) : envoi de messages de type Note On / Off
Les
valeurs de Control Change sont les mêmes que les valeurs spécifiées par
l'utilisateur pour les Notes On, avec correspondance suivante (trois
octets envoyés dans tous les cas) :
- Octet N°1 : détermine le
type de message : 1011nnnn si Control Change et 1001nnnn si
Note On (nnnn = canal MIDI dans les deux cas)
- Octet N°2 : Hauteur note (si mode Note On, RB2 = 0) ou Numéro CC (si mode Control Change, RB2 = 1)
- Octet N°3 : Vélocité note (si mode Note On, RB2 = 0) ou Valeur CC (si mode Control Change, RB2 = 1)
Interrupteur SW1 / SetF
(câblé sur ligne RA4)Cet interrupteur permet de spécifier le délais d'inactivité après l'envoi d'un évenement de type Note On ou Control Change.
- interrupteur ouvert (RA4 = 1) : ajout d'un retard de 500 ms entre Note On et Note Off, ou après envoi d'un Control Change
- interrupteur fermé (RA4 = 0) : ajout d'un retard de 50 ms entre Note On et Note Off, ou après envoi d'un Control Change
Boutons poussoir Down et
Up (câblés sur lignes RB6 et RB7)
Ces
boutons poussoir permettent d'incrémenter (Up) ou de décrémenter (Down)
les paramètres de la note en cours de sélection. Le paramètre de la
note qui est modifié dépend de l'état de l'interrupteur SW1 / SetA
(ligne RB0).
- Down : diminution hauteur note ou numéro contrôleur (RB0 = 1 et
RB1 = 0), diminution vélocité note ou valeur contrôleur (RB0 = 0 et RB1
= 1) ou diminution numéro de canal MIDI (RB0 = 0 et RB1 = 0)
- Up : augmentation hauteur note ou numéro contrôleur (RB0 = 1 et RB1 =
0), augmentation vélocité note ou valeur contrôleur (RB0 = 0 et RB1 =
1) ou augmentation numéro de canal MIDI (RB0 = 0 et RB1 = 0)
Réglage de la hauteur des
notes (pitch)
Pour
spécifier la hauteur de chacune des quatre notes, il faut tout
d'abord que le cavalier câblé en ligne RA5 soit
positionné
vers le +5 V (RA5 = 1). Ouvrir
l'interrupteur SW1 / SetA câblé
sur la ligne RB0 (RB0 = 1) pour passer en mode de réglage de hauteur de
note. Sélectionner le numéro de la note devant être modifiée à l'aide
des microswitches SW1 / SetC et SetD câblés sur les
lignes
RB3 et RB4.
- Sélection hauteur note 1 (Trig 1 / Note 1) : RB4 = 0, RB3
= 0 et RB0 = 1
- Sélection hauteur note 2 (Trig 2 / Note 2) : RB4 = 0, RB3
= 1 et RB0 = 1
- Sélection hauteur note 3 (Trig 3 / Note 3) : RB4 = 1, RB3
= 0 et RB0 = 1
- Sélection hauteur note 4 (Trig 4 / Note 4) : RB4 = 1, RB3 = 1 et
RB0 = 1
Puis
appuyer sur le bouton Down (câblé sur la ligne RB6) ou sur
le
bouton Up (câblé sur la ligne RB7) pour ajuster à
la note
désirée. A chaque modification, la note modifiée
est envoyée en temps réel sur la sortie MIDI pendant une
brève durée.
Réglage du canal MIDI des
notes (channel)
Pour
spécifier le numéro de canal MIDI de chacune des quatre notes, il faut
tout
d'abord que le cavalier câblé en ligne RA5 soit
positionné
vers le +5 V
(RA5 = 1). Fermer
l'interrupteur SW1 / SetA câblé
sur la ligne RB0 (RB0 = 0) pour passer en mode de réglage de canal
MIDI. Sélectionner le numéro de la note devant être modifiée à l'aide
des microswitches SW1 / SetC et SetD câblés sur les
lignes
RB3 et RB4.
- Sélection canal MIDI note 1 (Trig 1 / Note 1) : RB4 = 0, RB3 = 0 et
RB0 = 0
- Sélection canal MIDI note 2 (Trig 2 / Note 2) : RB4 = 0,
RB3 = 1 et RB0 = 0
- Sélection canal MIDI note 3 (Trig 3 / Note 3) : RB4 = 1,
RB3 = 0 et RB0 = 0
- Sélection canal MIDI note 4 (Trig 4 / Note 4) : RB4 = 1,
RB3 = 1 et RB0 = 0
Puis
appuyer sur le bouton Down (câblé sur la ligne RB6) ou sur le
bouton Up (câblé sur la ligne RB7) pour ajuster au canal
MIDI désiré. A
chaque modification, la note modifiée est envoyée en temps
réel sur la sortie MIDI pendant une brève durée.
Retour au mode
d'utilisation normal
Une
fois les réglages effectués, repositionner le cavalier
JP1 vers la masse (RA5 = 0) pour sortir du
mode réglage et éviter toute modification
intempestive par appui
accidentel sur les poussoirs Down ou Up. Les derniers réglages
effectués sont stockés en EEProm et sont donc
conservées même en
cas de coupure d'alimentation.
Alimentation secteur
Elle
est basée sur un régulateur de tension tripode classique de type
LM7805. La tension d'entrée peut être comprise entre +9 V et +15 V. La
diode 1N4007 située à l'entrée du régulateur permet de protéger le tout
en cas d'inversion de polarité, ce qui se produit facilement quand on
utilise un bloc secteur tout fait - surtout si la polarité de sortie
peut être modifiée par l'utilisateur.
Câblage prise MIDI OUT
Ne me dites pas que vous connaissez le câblage par coeur...
La broche 2 est reliée à la masse quand la prise est de type MIDI Out, ce qui est le cas ici.
Prototype
Réalisé
sur plaque d'expérimentation sans soudure avec des fils de couleur,
meilleurs conducteurs que les fils blancs (nécessaire ici pour que
l'information MIDI, même très véloce, arrive à temps à l'ordinateur. Tests réalisés avec mon logiciel
MidiTest dans un premier temps, puis avec Cubase dans un second temps. On reste donc dans le binaire.
Le côté bleuté des premières photos est voulu, et ça tombe bien car je n'avais plus de gélatine orange.
Trêve
de plaisanterie. Ces tests grandeur nature m'ont permis d'améliorer la
façon de programmer les valeurs des données MIDI à envoyer. Les tests
sur Cubase m'ont permis de voir très rapidement si tous les paramètres
MIDI étaient correctement gérés, le mode d'affichage des évenements
MIDI sous forme de liste détaillée est parfait pour ça. Contrairement à
la première version à base de 16F88 qui ne fonctionnait pas bien
(version non diffusée officiellement), celle-ci me donne satisfaction.
Logiciel du PIC
L'archive zip dont le lien suit contient le source complet (MikroPascal
Pro
V3.8) et le fichier binaire compilé (*.hex).
Interface MIDI 006 - 16F628 (26/09/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é. Vue 3D uniquement là pour aperçu général des composants utilisés.