Electronique > Réalisations > Interfaces > Interfaces MIDI > Contrôleur MIDI 001

Dernière mise à jour : 13/10/2013

Présentation

Ce contrôleur MIDI dispose de sept voies distinctes et permet d'envoyer des données MIDI de type Program Change ou Control Change à partir de simples potentiomètres.

controleur_midi_001_pcb_3d_a

Un potentiomètre peut ainsi être utilisé pour envoyer un message MIDI de type Program Change alors qu'un autre peut être utilisé pour envoyer des messages MIDI de type Control Change (volume ou panoramique par exemple). Quand on ne touche à aucun potentiomètre, aucune donnée MIDI n'est envoyée. Au départ, je l'avais réalisé pour... pour quoi, au fait ? Je ne sais plus. En tout cas, ça m'a servi pour mettre au point un nouvel instrument de musique MIDI doté d'un accéléromètre fixé sur un corps humain et baptisé AcceloMidi.

Schéma

Même principe de base que mon interface MIDI 003, avec les différences suivantes pour le montage présenté ici :
- 7 entrées analogiques au lieu de 8;
- pas d'entrée numérique;
- remplacement du (plus coûteux) PIC 16F877 par un (moins coûteux) PIC 16F88.

controleur_midi_001

Ne cherchez pas un autre bout de schéma, celui qui précéde est complet, si on fait exception du bloc d'alimentation.

Fonctionnement général
Ce contrôleur permet d'envoyer 7 messages différents à un récepteur / instrument MIDI, par le biais de 7 potentiomètres séparés. L'utilisateur peut spécifier quel type de message envoyer pour chaque potentiomètre. On peut par exemple décider d'affecter le potentiomètre RV1 à l'envoi de données de type Program Change et le potentiomètre RV2 à l'envoi de données de type Control Change. Pour spécifier le type de données que l'interface doit envoyer sur sa sortie MIDI OUT, il faut lui envoyer sur son entrée MIDI IN, des "codes" qui lui diront quoi faire. Rien de compliqué puisque ces codes sont de simples notes. Des exemples de configuration seront donnés au paragraphe procédure de configuration.

Entrée MIDI
L'entrée MIDI est constitué de quelques composants qui permettent d'isoler le contrôleur de l'appareil auquel on le raccorde. C'est toujours comme ça et je n'ai pas envie de faire autrement. On retrouve donc le traditionnel optocoupleur (U2) qui assure cette fonction d'isolation, avec deux résistances (R1 et R2) et une diode (D1) qu'on ne peut pas supprimer sans savoir ce qu'on fait (les économies c'est bien, mais restons sérieux). Les données MIDI réceptionnées par le contrôleur se retrouvent en bonne et due forme sur la broche RB2/RX du PIC 16F88.

Sortie MIDI
La sortie MIDI ne devrait pas engendrer trop de questions. Elle permet de délivrer les données qu'on souhaite envoyer et pour lesquelles on a pris la peine de transpirer pour configurer le contrôleur. Les données MIDI sortent de la broche RB5/TX du PIC et arrivent sereines sur le connecteur MIDI OUT J1.

Choix des potentiomètres
Crantés ou non crantés ? Piste carbone, plastique, Cermet ? Faites comme vous le sentez. Pour ma part je considère que cette interface est plus un "circuit de tests" qu'un organe de commande à part entière. Une chose est sûre : si vous ne voulez pas qu'au bout de quelques mois elle envoie des paquets de données non sollicités, évitez les potentiomètres à 50 cents qui cracheront rapidement. Les modèles à piste plastique me semblent un bon choix pour ce type d'application. Pour la valeur, pas vraiment critique, vous pouvez aussi bien utiliser des 4,7 kO que des 10 kO ou 22 kO.

Procédure de configuration
La configuration de chaque potentiomètre est très simple :
1) Fermer l'interrupteur SW1 (RA5 = 1) pour passer en mode Configuration.
2) Positionner le curseur du potentiomètre auquel vous souhaitez affecter une action :
- soit au minimum pour envoi de Program Change,
- soit au centre pour envoi de Control Change codé sur 7 bits (MSB seulement),
- soit au maximum pour envoi de Control Change codé sur 14 bits (MSB et LSB).
3) Envoyer sur l'entrée MIDI IN, une note MIDI dont les caractéristiques sont définies de la façon suivante :
- hauteur correspondant au potentiomètre à configurer : Do3 pour RV1 à Si3 pour RV7;
- canal MIDI correspondant au canal sur lequel les données seront envoyées;
- vélocité correspondant au numéro de contrôleur à envoyer, de 0 à 95 (les valeurs supérieures à 95 sont ignorées);
Par exemple, si on veut que le potentiomètre RV3 envoie des données de Control Change N°7 (volume) sur le canal MIDI n°11, il faut placer RV3 au centre et envoyer au contrôleur, une note MIDI ayant les caractéristiques suivante :
- hauteur de la note = Mi3 (pour RV3)
- numéro de canal = 11
- vélocité = 7 (code de Control Change correpondant au réglage du volume)
Autre exemple : si on veut que le potentiomètre RV5 envoie des données de Program Change sur le canal MIDI n°2, il faut placer RV5 au minimum et envoyer une note MIDI ayant les caractéristiques suivantes :
- hauteur de la note = Sol3 (pour RV5)
- numéro de canal = 2
- vélocité = peu importe (valeur non prise en compte pour les Program Change)

Prototype

Réalisé avec ma platine EasyPic7 et mon adaptateur entrée/sortie MIDI 011.

controleur_midi_001_proto_001a controleur_midi_001_proto_001b

Bon, les premiers tests m'ont donné des sueurs, une erreur dans mon code provoquait l'envoi de control change à la queue-leu-leu, sans que je ne touche à aucun potentiomètre. Une fois mis hors tension le contrôleur (pas encore au point), l'ordinateur sur lequel je vérifiais la réception des données à continué de traiter les données entrantes pendant plusieurs secondes, le temps de vider le buffer d'entrée ! Pas grave, on répare et on continue. Après quelques optimisation, le code s'est révélé fonctionnel et suffisant pour ce que je voulais faire avec.

Circuit imprimé

Non réalisé.

Logiciel du PIC

Fichier compilé pour PIC (binaire *.hex).
Contrôleur MIDI 001 - 16F88 - (13/10/2013)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Historique

13/10/2013
- Première mise à disposition.