Electronique > Réalisations > Interfaces > MIDI > Contrôleur MIDI 008 [Pro]

Dernière mise à jour : 28/08/2016

Présentation

Ce système MIDI basé sur un microcontrôleur PIC 18F47J13 dispose de 16 entrées analogiques, de 96 entrées logiques (extensible à 128), d'une sortie MIDI OUT pour l'envoi des évenements MIDI et d'une entrée MIDI In pour la configuration (spécification par l'utilisateur des données MIDI à délivrer).

controleur_midi_008_pcb_3d_a

Les entrées logiques #0 à #87 sont utilisées pour envoyer des événements de type "Note" et les entrées #88 à #95 (ou #88 à #127) sont utilisées pour configurer certains paramètres (transposition, canal MIDI, running status, etc). Les entrées analogiques servent quant à elle à envoyer des données variables (Control Change, Volume, PitchBend, Aftertouch, Panoramique, etc). J'ai développé cette interface en tant "qu'extension naturelle" de mon contrôleur MIDI 003 et j'ai tout à fait conscience que pour ce genre de projet il aurait été préférable de mettre de côté mes PIC18 et d'opter définitivement pour un PIC24 ou un PIC32. Mais cela viendra ;-)

Avertissement

A ce jour le prototype est fonctionnel, mais le paramétrage par l'utilisateur des données "analogiques" à envoyer n'est pas encore implémenté (les données transmises sont toujours des ControlChange). La partie clavier (notes et configuration) fonctionne intégralement.

Schéma

Le système est scindé en deux parties, carte UC et carte d'entrée.

controleur_midi_008_uc
Carte processeur (UC)

interface_midi_008_uc
Carte d'entrées (analogiques et numériques)

Fonctionnement général
Le logiciel interne au PIC lit en boucle les entrées analogiques et les entrées logiques, et délivre un événement MIDI quand l'état d'une des entrées a changé. Pour les entrées analogiques, on utilise un CAN (Convertisseur Analogique/Numérique) associé à des multiplexeurs analogiques, et pour les entrées logique on utilise un clavier matricé 12*8 avec diodes de protection, avec là aussi des multiplexeurs analogiques (mais cette fois utilisés avec des signaux logiques).

Entrées analogiques
Les seize entrées analogiques sont lues grâce au CAN du PIC, via sa broche RA0/AN0. Le multiplexage des 16 entrées s'effectue en externe avec des commutateurs analogiques CD4051. La résolution de la conversion peut se faire en 10 ou 12 bits avec ce PIC, je suis resté sous 10 bits puisque les valeurs "analogiques" transmises seront toujours codées sur 7 bits. La variation de tension minimale requise sur chaque entrée analogique, pour pouvoir être considérée comme ayant évolué par rapport à la mesure précédente, correspond à 5 V / 127 = 40 mV environ. Le temps de lecture et d'analyse d'une entrée analogique est d'environ 110 us (environ 1,8 ms pour la lecture des 16 entrées). Une petite astuce logicielle permet d'éviter l'envoi de données à répétition quand la source de tension (issue d'un potentiomètre par exemple) se trouve "à cheval" sur deux pas de quantification du CAN et qu'à cause du bruit on bascule sans arrêt entre deux valeurs adjacentes.

Entrées logiques
Toutes les entrées logiques sont scannées de la même façon mais sont séparées en deux groupes :
Le PIC 18F47J13 ne possède pas assez de broches pour traiter directement 96 (ou 128) voies, c'est la raison d'être du clavier multiplexé. Les deux multiplexeurs U5 et U6 (CD4051) permettent de travailler sur 16 lignes (16*8 = 128 entrées) ou sur 12 lignes seulement comme c'est le cas ici (12*8 = 96 entrées). Ca, c'est pour l'envoi des données de multiplexage. Pour la réception des données (décodage des touches enfoncées) cela se passe directement sur le PORTD du PIC (retour des infos en 8 bits). Le temps de balayage et d'analyse de 96 touches est d'environ 1,2 ms (ce temps est réduit si l'étendue des notes à prendre en compte est réduite). La fonction d'anti-rebond (debounce) est assurée de façon purement logicielle.

Entrées logiques utilisées pour la configuration du contrôleur
Lors de la modification des paramètres numériques (transposition, vélocité, etc) la LED clignote deux fois quand on incrémente la valeur, elle clignote une fois si on la décrémente. Pour les paramètres On/Off (Running Status et Auto-Panic) la LED clignote deux fois quand le paramètre est activé, elle clignote une fois quand il est désactivé. Les entrées additionnelles disponibles avec l'extension vers 128 voies (entrées logiques #96 à #127) n'ont pour l'heure aucune fonction précise.

Spécification des entrées à activer
La lecture des entrées analogiques et numériques demande un "certain temps" processeur. Ce "certain temps" diffère de celui requis pour le refroidissement d'un fût de canon (je ne pense pas que Fernand me contredirait) puisqu'il est de l'ordre de 3 ms quand on lit les 16 entrées analogiques et les 96 entrées logiques. Afin de ne pas gaspiller des ressources inutiles pour les entrées non utilisées, il est possible de spécifier quelle sont les entrées analogiques (A1 à A16) à prendre en compte. Pour les entrées numériques, il est possible de spécifier la plage des notes à traiter, par exemple début de plage à C3 et fin de plage à A6. Le paramétrage s'effectue par messages MIDI de type "SysEx" appliqués sur l'entrée MIDI IN.


Remarque : les données de configuration reçues sur l'entrée MIDI IN sont toujours prises en comptes (placées dans un buffer/tampon) mais ne sont traitées que lorsque l'interrupteur SW1/MODE est fermé. Certains des paramètres ajustés via l'entrée MIDI IN et messages SysEx auraient pu l'être avec quelques entrées logiques additionnelles (parmi les entrées #96 à #127). Il fallait faire un choix entre un nouveau groupe de boutons/diodes et un connecteur MIDI avec son optocoupleur. La deuxième solution a été retenu pour les possibilités d'évolution.

Bus I2C ?
Prévu (broches RC3 et RC4 du PIC) mais actuellement inutilisé. Il pourra servir pour la sauvegarde éventuelle de paramètres sur une EEPROM externe, ou l'affichage de données sur un écran LCD.

Brochage des prises MIDI

Câblage valable pour les prises MIDI IN, MIDI OUT et MIDI THRU.

midi_din_cablage_001

La borne 2 est reliée à la masse au niveau des sorties mais pas au niveau des entrées, pour éviter toute boucle de masse entre équipements.

Prototype

Réalisé avec un PIC 18F47J13 CMS soudé sur module DIP40, et mon petit module d'interface MIDI 011.

controleur_midi_008_proto_001a  interface_midi_011_proto_001a
Photo prise avant assemblage et test du "clavier"

C'est plus simple comme cela ;-)

Logiciel du PIC

Logiciel non disponible sur ce site.

Circuit imprimé

Non réalisé, vue 3D seulement pour aperçu.

Historique

28/08/2016
- Première mise à disposition.