Dernière mise à jour :
20/05/2012
Présentation
Ce contrôleur MIDI dispose de 128 entrées de commandes prenant la forme
d'un clavier matricé de 8 colonnes / 16 rangées, chaque touche permet
de déclancher un évenement MIDI de type Note On (appui sur une touche)
ou Note Off (relâchement touche).
La
norme
MIDI
définissant 128 notes possibles, on exploite ici le maximum de
ce
qui peut être fait. La première touche (#001) déclanche la note la plus
grave de la gamme MIDI (Do-2) et la dernière touche (#128) déclanche la
note la plus aigue (Sol8). Le circuit est basé sur
un classique PIC 16F628A associé à un circuit intégré TTL décodeur /
démultiplexeur "4 vers
16" de type 74154 (74HC154 ou 74LS154) ou à deux circuits intégrés TTL
décodeur /
démultiplexeur "3 vers 8" de type 74138 (74HC138 ou 74LS138).
-
Schéma 003
: version avec un 74154 (74HC154 ou 74LS154);
-
Schéma 003b
: version avec deux 74138 (74HC138 ou 74LS138).
Le code logiciel du PIC est le même pour les deux schémas.
Avertissements
- On a affaire ici à un montage apte à servir de base à la
réalisation d'un clavier maître polyphonique (on peut jouer plusieurs
notes à la fois) mais non sensible à la
vélocité (pas de mesure de la force de frappe sur les touches).
- Le canal MIDI est figé, il y a un fichier binaire (*.hex) pour chaque canal MIDI 1 à 16.
- La vélocité est fixée à la valeur décimale 100 (sur échelle
1 à 127). Pour modifier cette valeur il convient de retoucher
au code source et de le recompiler.
- Le code source n'est pas livré pour cette application. Pour
toute modification, merci de me
contacter.
Schéma 003 - avec SN74154
La partie électronique est relativement allégée et simple, comme en
atteste le schéma suivant. Si on retire tous les fils de liaison, il ne
reste en effet que bien peu de composants.
Section principale
La partie la plus touffue réside finalement dans le câblage des 128
boutons poussoirs, car même s'ils sont matricés (multiplexés) pour
réduire le nombre de liaisons entre le microcontrôleur et le clavier,
ça fait tout de même un bon paquet de fils à souder.
Section clavier
Principe général
Il
repose sur l'emploi d'un clavier matricé en 8 colonnes de 16 rangées,
ce qui au total conduit bien au nombre de 128 touches. L'état de chaque
touche
est analysé à tour de rôle, il n'est pas possible avec un PIC 16F628A
d'analyser la totalité des touches en une fois (d'ailleurs peu de PIC
le permettraient). A chaque fois qu'une touche est pressée ou relâchée,
le PIC produit un événement de type Note On ou Note Off dont la valeur
(hauteur de note, pitch) dépend justement de la touche concernée.
Coeur du montage
Vous
l'avez deviné, c'est le PIC 16F628A qui mène la danse. Cadencé par un
quartz de 8 MHz (horloge interne de 2 MHz), il envoie ce qu'il faut au
clavier et analyse ce qui lui revient. Les données envoyées
correspondent aux états logiques que l'on trouve sur les fils de rangée
du clavier (Row1 à Row16), alors que les données qui viennent en retour
correspondent aux colonnes (Col1 à Col8). Il aurait été aussi possible
de faire dans le sens contraire au prix de quelques petites variations
matérielles. Si on s'en tient strictement au nombre de rangées et de
colonnes, on s'apperçoit qu'il nous faut 16 + 8 soit 24 lignes
d'entrée/sortie au niveau du PIC. Or le microcontrôleur choisi ici ne
possède pas assez de broches pour faire l'affaire à lui seul. C'est
pourquoi le second circuit intégré U2 a été ajouté. Il s'agit d'un
décodeur démultiplexeur 4 vers 16 (4 entrées codées en binaire et 16
sorties en décimal) qui moyennant 4 fils de commande permet de piloter
16 sorties. Voilà pourquoi les 16 sorties de ce circuit U2 sont reliées
sur les branches de rangées du clavier 128 touches et que 4 fils
seulement aboutissent au PIC pour la gestion des rangées. L'état logique
des rangées est conditionné par
l'état des sorties du circuit U2, dont une seule sortie peut être à
l'état bas à un instant donné. La sortie active dépend de l'état des
entrées A, B, C et D (points marqués R0 à R3 sur le schéma) : si toutes
les entrées A à D de U2/74154 sont à l'état bas, c'est la sortie #0
(broche 1 du
74154, Row1) qui est active et donc à l'état bas. Si toutes les entrées
A à D de U2/74154 sont à l'état haut, c'est la sortie #15
(broche 17 du 74154, Row16) qui est active et donc à l'état bas. Pour
ce qui est
des colonnes, l'accès au PIC est direct et se fait sur quelques lignes
du
PORTA et quelques lignes du PORTB. Le temps mis pour sélectionner une
rangée active et pour lire les huit colonnes est voisin de 46 us. Il
faut donc environ 736 us (46 us * 16 rangées) pour faire le tour
complet des 128 touches du clavier.
Traitement de la polyphonie
Lors de l'analyse d'une
rangée, l'état de ses huit boutons poussoir est analysé de façon
séquentielle (un bouton à la fois). Si deux boutons poussoir ont été
enfoncés "simultanément mais pas tout à fait en même temps", deux cas
peuvent se produire :
- soit le changement d'état est constaté pour les deux boutons lors de
l'analyse de la rangée;
- soit le changement d'état est constaté pour un seul bouton car
l'autre a été enfoncé quelques microsecondes ou millisecondes plus
tard. Dans ce cas, le
changement d'état du second bouton sera constaté lors
d'une analyse
suivante de la même rangée, c'est à dire très peu de temps après.
Dans la pratique, le temps de réaction est quasi-immédiat et même si
deux changements d'état de touches ne sont pas détectées exactement en
même temps, le "rendu" côté notes jouées sera celui de deux notes
jouées en même temps. Souvenez-vous que de toute façon les données MIDI
sont toujours transmises de façon séquentielle...
Clavier 128 notes
Comme
vu précédement, le clavier est de type matricé / multiplexé pour
limiter le nombre de fils de liaison entre lui-même et le circuit
électronique de commande. Les lignes Col1 à Col8 sont
placées à l'état logique haut au repos grâce aux résistances de rappel
R1 à R8 de 10 kO, c'est à dire quand aucune
touche du clavier n'est enfoncée. Quand une touche est enfoncée, deux
cas peuvent se produire :
-
soit la rangée sur laquelle cette touche se trouve est à l'état logique
haut (rangée inactive) et dans ce cas on transmet un état logique haut
et de fait rien ne
change côté réception (colonne);
- soit la rangée sur laquelle cette
touche se trouve est à l'état logique bas (rangée active) et dans ce
cas on transmet un
état logique bas et de fait on détecte une activité côté colonne.
Comme
vu auparavant, l'état logique des rangées est conditionné par l'état
des sorties du circuit U2, dont une seule sortie peut être à l'état bas
à un instant donné. Toutes
les diodes reliées sur les touches du clavier sont de type 1N4148, les
plus classiques et les moins
coûteuses je pense qu'on puisse trouver à ce jour. Elles assurent un
rôle de protection envers les deux circuits intégrés en cas d'appui
simultané sur plusieurs touches.
Sortie MIDI
Les messages MIDI Note On ou Note Off issus du PIC aboutissent
sur une prise DIN 5 points
dont seuls 3 broches sont raccordées : données, +5 V (via résistance) et masse. Rien de
spécial à ajouter, vous m'en voyez bien désolé.
Schéma 003b - Remplacement du SN74154 par deux SN74138
Pour
une raison ou pour une autre (coût, approvisionnement, convictions personnelles), vous pourriez avoir envie de remplacer le
SN74154 par deux SN74138 qui sont des décodeurs démultiplexeur 3 vers 8
(3 entrées codées en binaire et 8
sorties en décimal). Il suffit en effet de coupler les deux SN74138
pour obtenir la fonction décodage démultiplexage 4 vers 16, un
décodeur 74138 travaillant pendant que l'autre se repose. Le schéma
suivant montre comment procéder.
A
un instant donné, un seul SN74138 est actif, c'est celui dont l'entrée
E1 (broche 6, appelée aussi G1 dans certains documents constructeur)
est à l'état haut. Comme ici on veut que ce soit celui du haut sur le
schéma (U2A) quand la commande R3 est à l'état bas, il convient
d'inverser l'état logique de commande qui arrive sur cette fameuse
broche E1. Cette fonction est assurée par le transistor Q1 monté en
commutateur inverseur. En résumé, voici ce qui se passe :
- quand la
commande R3 (broche RB7 du PIC) est à l'état bas, le transistor Q1 est
bloqué et on trouve sur son collecteur une tension de +5 V grâce à la
présence de la résistance de charge collecteur R11. La broche E1 de U2A
est donc à l'état logique haut et le circuit est activé.
La sortie
active de ce circuit dépend de l'état des commandes R0 à R2 (broches
RB4 à RB6 du PIC). Pendant ce temps, la broche E1 du second circuit
SN74138 (U2B) étant à l'état bas, toutes ses sorties sont à l'état
haut, quelque soit l'état des commandes R0 à R2.
- quand la commande
R3 (broche RB7 du PIC) est à l'état haut, le transistor Q1 est saturé
et
on trouve sur son collecteur une tension proche de 0 V. La broche E1 de
U2A est dont à
l'état logique bas et le circuit est désactivé. C'est au tour du
circuit U2A de voir toutes ses sorties passer à l'état logique haut,
sans exception. Pendant ce temps, la
broche E1 du second circuit SN74138 (U2B) étant à l'état haut,
la sortie active de ce
circuit dépend de l'état des commandes R0 à R2 (broches RB4 à RB6 du
PIC).
Au
final, on a donc bien toujours une seule sortie active (à l'état bas
pour rappel) parmi les lignes Row1 à Row16, quelque soit l'état logique
des commandes R0 à R3 (broches RB4 à RB7 du PIC).
Logiciel du PIC
Les seize fichiers binaires compilés (un fichier *.hex par canal MIDI) sont
disponibles
dans l'archive dont le lien suit, ils conviennent pour les deux schémas 003
et 003b.
Contrôleur
MIDI 003 - PIC 16F628A - Version du 17/05/2012
Pour ce projet développé dans un cadre professionnel, le code
source n'est pas disponible. Voir page
Logiciel PIC - Sources
pour plus de détails.
Circuit imprimé
Non réalisé, vue 3D uniquement là pour aperçu des composants utilisés.
Historique
20/05/2012- Ajout d'un fichier compilé (*.hex) pour chaque canal MIDI 1 à 16 (seize fichiers compilés en tout).
-
Augmentation du temps d'anti-rebond, le précédent de 2 ms
était suffisant pour des touches de très bonne qualité mais
insuffisant pour des touches standard. Je l'ai donc passé à 5 ms, ce
qui suffit pour des poussoirs classiques et ne réduit pas trop la
réactivité de l'ensemble, même en plaquant des accords.
21/08/2011- Première mise à disposition, avec un fichier compilé (*.hex) uniquement pour canal MIDI 1.