Electronique > Réalisations > InterfacesInterfaces MIDI > Contrôleur MIDI 003

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

controleur_midi_003_pcb_3d_a

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


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.

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

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

controleur_midi_003b

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.