Electronique > Réalisations > Interfaces > Interfaces MIDI > Interface MIDI 010

Dernière mise à jour : 09/10/2011

Présentation

Cette interface MIDI permet de piloter huit potentiomètres numériques de type MCP41xxx (10 kO, 50 kO ou 100 kO) à partir d'événements MIDI de type Note On.

interface_midi_010_pcb_3d_a

En remplaçant les potentiomètres classiques d'équipements analogiques tels que filtres ou effets spéciaux, il devient possible de changer les paramètres qui y sont liés par des commandes MIDI. Ainsi, en connectant un des potentiomètres numériques de cette interface MIDI 010 à la place du potentiomètre qui permet de modifier le temps de retard sur une chambre d'écho, on peut ajuster le temps de retard via de simples notes MIDI, émises en temps réel ou provenant d'un séquenceur logiciel ou matériel. Et en connectant un ou plusieurs des potentiomètres numériques à la place de potentiomètres qui permettent de modifier le comportement d'un filtre analogique (fréquence de coupure, fréquence centrale, largeur de bande, atténuation / amplification) on peut piloter ce filtre par commandes MIDI. Pour une commande de volume où l'élément de réglage est complètement isolé de la section de commande MIDI, voir page Interface MIDI 023.

Avertissements


Schéma

Le schéma montre qu'il est fait usage d'un microcontrôleur, ce qui ne devrait surprendre personne du fait qu'il n'est pas très aisé de faire autrement quand il s'agit de gérer des évenements MIDI et de piloter des potentiomètres numériques. Heureusement le modèle employé est fort répendu, peu coûteux et largement bien distribué. Oui, c'est encore un 16F628A.

interface_midi_010

Fonctionnement général
Le PIC réceptionne les évenements MIDI via une entrée au standard MIDI. Si les évenements reçus sont des notes, le logiciel du PIC les analyse en détail. S'il s'agit des notes attendues (Do3 à Do4 sans les altérations), le logiciel en extrait leurs valeurs de hauteur (pitch) et de vélocité. Si la vélocité est égale à 0, l'évenement MIDI reçu est ignoré (explication donnée plus loin), sinon sa valeur est utilisée pour configurer le potentiomètre qui est rattaché à la note reçue (correspondance indiquée ci-après).

Correspondance entre notes MIDI reçues et potentiomètres
L'interface MIDI 010 comporte huit potentiomètres numériques totalement indépendants, qui peuvent être piloté par les notes MIDI suivantes :
La valeur (position) de chaque potentiomètre numérique est définie par la vélocité de la note reçue. Une valeur de vélocité de 1 correspond à la valeur minimale du curseur du potentiomètre numérique et une valeur de vélocité de 127 correspond à la valeur maximale du curseur. La valeur de vélocité 0 n'a pas été retenue car un évenement de type NoteOff peut être constitué d'un NoteOn avec valeur de vélocité 0. Comme la valeur de vélocité d'une note MIDI se trouve dans la plage 0..127 et que les potentiomètres numériques utilisés ici ont une résolution de 8 bits (256 valeurs), j'ai procédé comme suit :
Quelques exemples :
Remarque : il y a aussi la possibilité d'utiliser deux notes MIDI différentes pour profiter pleinement de la résolution de 8 bits des potentiomètres. Une première note pour la plage 0..127 et une seconde note pour la plage 128..255. J'ai décidé de ne pas procéder comme ça, tout du moins dans un premier temps.

Circuit d'horloge / base de temps
Les lignes RA7/OSC1 et RA6/OSC2 du PIC sont utilisées pour y connecter un quartz de 8 MHz avec ses deux condensateurs de pieds reliés à la masse. Le circuit pourrait aussi fonctionner avec l'horloge interne de 4 MHz, mais avec une fiabilité moindre.

Entrée MIDI
L'entrée MIDI est classique, elle est composée de l'optocoupleur U2 raccordé sur la prise DIN 5 broche J1, via une résistance de limitation de courant (R1) et une diode (D1) protégeant l'optocoupleur en cas d'inversion des deux fils d'entrée de la prise DIN (broches 4 et 5). La sortie de l'optocoupleur, de type NPN, permet de récupérer le signal MIDI au format TTL, grâce à la présence de la résistance de rappel R2 reliée au +5 V. Les données MIDI ainsi mises en forme aboutissent à l'entrée RB1/RX du PIC. Lors de l'arrivée de données MIDI de type Note On, la LED D4 s'illumine pendant quelques dizaines de ms, même si les notes reçues ne sont pas gérées par la suite. Juste pour donner une indication visuelle de la bonne réception des données MIDI, ce qui peut s'avérer utile pour localiser tout problème éventuel.

Choix du canal MIDI de réception
Pour cette application les événements MIDI d'entrée sont tous réglés sur le canal MIDI 1, on ne peut pas modifier cette valeur. Cela signifie que des notes reçues avec un canal MIDI différent de 1 seront ignorées. Il est bien sûr possible de modifier le logiciel du PIC pour que les notes soient acceptées quelque soit le numéro de canal MIDI, il suffit de me le demander ;-) On pourrait aussi envisager d'utiliser la broche RA5 actuellement non utilisée pour spécifier si le numéro de canal MIDI à oui ou non une importance, mais j'ai comme qui dirait déjà pensé à utiliser cette broche pour adaptation future à d'autres types de potentiomètres numériques.

Envoi des données aux potentiomètres numériques
Le positionnement du curseur de chaque potentiomètre numérique est défini par l'envoi d'une valeur comprise entre 0 et 255, selon un mode série de type "SPI". Les lignes de données et de signal d'horloge spécifiques à ce mode de transmission série sont ici matérialisées par les lignes appelées SPI_Data et SPI_Clock sur le schéma. Pour qu'un des huit potentiomètres accèpte de recevoir les données transmises sur le bus (tous les potentiomètres sont câblés en parallèle du point de vue de ces deux lignes SPI), sa broche CS (Chip Select) doit être portée à un état logique bas. Au repos, toutes les lignes CS (CS1 à CS8) sont à l'état haut et aucun des potentiomètres n'est donc apte à recevoir les informations véhiculées sur les lignes SPI_Data et SPI_Clock. Quand une note MIDI reçue correspond à l'une de celles attendues (pour rappel Do3 à Do4), la ligne CSx correspondante est activée et passe temporairement à l'état logique bas. Pendant ce temps précis, les données de commande et de valeur qui permettent de spécifier la position du curseur du potentiomètre sélectionné sont transmises. Les potentiomètres MCP41xxx réclament deux octets pour accépter les informations reçues : un octet de "commande" et un octet de "valeur". Dans le cas qui nous concerne, la valeur de l'octet de commande est figé et vaut toujours $11 (00010001). L'octet de valeur contient quant à lui la valeur vue précédement, qui dépend de la vélocité de la note MIDI reçue. L'octet de commande est envoyé en premier avec le bit de poids fort (MSB) en première position, puis vient ensuite l'octet de valeur, lui aussi transmis avec son bit de poids fort (MSB) en première position. Le graphe qui suit montre ce qu'on obtient quand la note MIDI Do3 est reçue (activation CS1, potentiomètre N°1).

interface_midi_010_graph_001a

La légère irrégularité temporelle que l'on peut observer entre chaque impulsion d'horloge (ligne Spi_Clock) est liée au fait que j'ai utilisé une routine faite maison et fort simplifiée pour l'envoi des données. Le fonctionnement n'en est nullement affecté.

Alimentation

L'alimentation du PIC est de +5 V et on peut se contenter d'une alim simple basée sur un régulateur de tension de type LM7805 ou 78L05 comme celle décrite à la page Alim simple 001. Pour vous simplifier la tâche, la partie régulation est prévue tant au niveau schéma qu'au circuit imprimé, il ne vous restera plus qu'à vous procurer un bloc secteur dont la tension de sortie est comprise entre +9 V et +15 V. La consommation globale du circuit est relativement faible puisque inférieure à 50 mA, vous pouvez donc adopter une alimentation secteur de très petite taille dont le courant maximal pourra n'être que de 100 mA. La tension du bloc secteur doit arriver sur le connecteur J2 : masse alimentation (0 V) sur la broche 1 de J2 et pôle positif de l'alimentation sur la broche 2 de J2. La diode D2 protège le circuit contre toute inversion de polarité accidentelle de la source de tension. Le condensateur C5 trouve sa place sur le circuit imprimé juste en dessous du PIC 16F628A (entre les broches 5 et 14) et les condensateurs C6 à C13 se positionnent sous chaque potentiomètre numérique (entre les broches 4 et 8). Vous pouvez tout aussi bien utiliser pour ces neuf condensateurs, des modèles bas profil qui se feront tout petits sous le support de CI 8 broches des potentiomètres, ou des CMS qui seront dans ce cas soudés directement côté cuivre.

Choix d'autres optocoupleurs

Il est possible d'utiliser d'autres optocoupleurs pour l'entrée MIDI, voir page Interfaces MIDI pour plus de détails. 

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. Ici on s'en fiche puisqu'il n'y a pas de prise MIDI OUT.

Logiciel du PIC

Le fichier binaire compilé (*.hex) et les codes source (format MikroPascal) est disponible dans l'archive dont le lien suit.  
Interface MIDI 010 - PIC 16F628A - Version du 09/10/2011
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é. 

Historique

09/10/2011
- Première mise à disposition.