Electronique > Réalisations > Interfaces > Interfaces MIDI > Interface MIDI 008c - Pro

Dernière mise à jour : 13/02/2022

Présentation

Cette interface MIDI est une version actualisée de mon interface MIDI 008b.


interface_midi_008c_pcb_3d_a

Cette interface comporte deux filtres, un premier dédié aux messages de type Active Sensing émis toutes les 300 ms par certains instruments de musiques électroniques (notament claviers assez anciens), un second dédié aux canaux MIDI : les données MIDI entrantes ne sortent que si leur canal MIDI a été autorisé par l'utilisateur au moyen de microswitches : le filtrage est individuel pour chaque numéro de canal. Il s'agit donc d'une version "évoluée" du système de filtrage effectué par l'interface MIDI 008b, laquelle laissait sortir les données d'un canal MIDI unique.

Le retard introduit par ce filtre (latence, temps de transit entre entrée MIDI IN et sortie MIDI OUT) est inférieur à 1 ms (pour rappel, un évènement MIDI de type Note dure environ 0,9 ms).


Schéma

Le coeur du montage est un microcontrôleur PIC 18F26K22, en remplacement du PIC 16F628A (obsolète) qui équipait l'interface MIDI 008b.

   

interface_midi_008c

   

Filtrage des messages ActiveSensing

Les données MIDI qui arrivent à la queue leu leu sur l'entrée MIDI IN sont analysées octet par octet, afin de déterminer leur type (Note, ControlChange, ProgramChange, SysEx, etc). Le filtrage des messages ActiveSensing ne concerne que les octets $FE et $FF (reset).

- si l'octet reçu est $FE (Active Sensing), le logiciel regarde l'état de la ligne RB4 du PIC qui dépend de la position du microswitch DSW1[5]. Si ce microswitch est fermé (RB4 = 0), alors l'octet $FE reçu n'est pas filtré et ressort sur la sortie MIDI OUT. Si le microswitch DSW1[5] est ouvert (RB4 = 1), alors l'octet $FE est filtré et ne ressort pas sur la sortie MIDI OUT.
- si l'octet reçu est $FF (Reset), le logiciel regarde l'état de la ligne RB5 du PIC qui dépend de la position du microswitch DSW1[6]. Si ce microswitch est fermé (RB5 = 0), alors l'octet $FF reçu n'est pas filtré et ressort sur la sortie MIDI OUT. Si le microswitch DSW1[6] est ouvert (RB5 = 1), alors l'octet $FF est filtré et ne ressort pas sur la sortie MIDI OUT.
- si l'octet reçu est un autre octet d'état (Status), alors le logiciel analyse son type, et le filtre si nécessaire.

Remarques :

- Si les octets $FE et/ou $FF doivent être filtrés en permanence, les microswitches DSW1[5] et DSW1[6] seront remplacés par un strap.
- Le message active sensing est normalement signifié par un octet de valeur $FE. J'ai cependant lu sur Internet qu'un musicien avait un synthé Roland qui envoyait un octet de valeur $FF toutes les 300 ms, alors que la valeur $FF est normalement réservée pour un reset général et qu'il est généralement déconseillé de l'utiliser. C'est la raison pour laquel ce message $FF peut être filtré, au besoin.

 
Filtrage du numéro de canal MIDI

Les messages MIDI de type Note, ControlChange et ProgramChange reçus sur l'entrée MIDI IN ne sont délivrés sur la sortie MIDI OUT qu'à la condition que leur numéro de canal MIDI ait été autorisé (non filtré). Par défaut et tant que l'utilisateur n'a demandé aucun filtrage sur un canal, aucun des canaux MIDI n'est filtré, ce qui permet de vérifier le bon fonctionnement de l'interface lors d'une première utilisation.

   

Procédure de sélection des canaux MIDI à filtrer

L'activation ou la désactivation du filtrage des canaux MIDI s'effectue par les interrupteurs miniatures (microswitches) DSW1[3..0] (choix du numéro de canal MIDI à traiter) et les boutons-poussoirs SW2/Yes (activation filtrage) et SW3/No (désactivation filtrage).

    

Canal MIDI RB3 RB2 RB1 RB0 | Canal MIDI RB3 RB2 RB1 RB0
1 0 0 0 0 | 9 1 0 0 0
2 0 0 0 1 | 10 1 0 0 1
3 0 0 1 0 | 11 1 0 1 0
4 0 0 1 1 | 12 1 0 1 1
5 0 1 0 0 | 13 1 1 0 0
6 0 1 0 1 | 14 1 1 0 1
7 0 1 1 0 | 15 1 1 1 0
8 0 1 1 1 | 16 1 1 1 1

Valeur 0 = interrupteur DSW1[x] fermé ; Valeur 1 = interrupteur DSW1[x] ouvert 

   

Rappel : la numérotation des canaux MIDI va de 1 à 16, alors que leur représentation binaire va de 0 à 15. Ainsi, le canal MIDI #1 est codé 0000 (0) en binaire, le canal MIDI #2 est codé 0001 (1) en binaire, etc. jusqu'au canal MIDI #16 qui est codé 1111 (15) en binaire.
   

Pour activer le filtrage sur un numéro de canal donné, il faut positionner les microswitches DSW1[3..0] sur la position qui correspond à ce numéro de canal (selon les instructions données dans le tableau qui précède) puis presser le boutoin-poussoir SW2/Yes. 

Exemple : pour filtrer les données portant le numéro de canal MIDI #3, il faut fermer DSW1[3] (RB3=0), fermer DSW1[2] (RB2=0), ouvrir DSW1[1] (RB1=1), fermer DSW1[0] (RB0=0) puis presser le boutoin-poussoir SW2/Yes.

Pour désactiver le filtrage sur un numéro de canal donné, il faut positionner les microswitches DSW1[3..0] sur la position qui correspond à ce numéro de canal (selon les instructions données dans le tableau qui précède) puis presser le boutoin-poussoir SW3/No. 

Exemple : pour laisser passer les données portant le numéro de canal MIDI #9, il faut ouvrir DSW1[3] (RB3=1), fermer DSW1[2] (RB2=0), fermer DSW1[1] (RB1=0), fermer DSW1[0] (RB0=0) puis presser le boutoin-poussoir SW3/No.

   

Remarque

Le filtrage est possible sur la totalité des 16 canaux MIDI. Cela permet par exemple de filtrer la totalité des notes, ProgramChange et ControlChange, tout en laissant passer les messages système temps réel (commandes de transport) et les SysEx.

    

Circuit d'horloge / base de temps

Les lignes RA7/OSC1 et RA6/OSC2 du PIC sont utilisées pour y connecter un quartz de 16 MHz avec ses deux petits condensateurs céramiques de faible valeur (22 pF ou 27 pF).

Deux versions de logiciel sont toutefois proposées, une pour un fonctionnement avec le quartz externe, l'autre pour un fonctionnement avec l'oscillateur interne du PIC (sans quartz externe). Sachez toutefois que même si les oscillateurs internes des PIC sont assez stables dans l'ensemble, il y a toujours un risque (assez faible il est vrai) de "décrochage" des données MIDI.

   
Entrée MIDI

L'entrée MIDI est composée de l'optocoupleur U2 (PC900) raccordé sur la prise DIN 5 à broches 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 permet de récupérer le signal MIDI au format TTL, grâce à la présence de la résistance R2 reliée au +5 V. Les données MIDI ainsi mises en forme aboutissent à l'entrée RC7/RX1 du PIC.


Sortie MIDI

La sortie MIDI (broche RC6/TX1 du PIC) délivre brièvement une note MIDI C3 (Do3) sur le canal MIDI #1 lors de son initialisation, ce qui permet dès la mise sous tension de savoir si tout démarre bien. Après l'initialisation, la sortie MIDI laisse sortir les évènements MIDI qui n'ont pas fait l'objet d'un filtrage.


Alimentation

Un régulateur de tension de +5 V est prévu directement sur le circuit (U3), ce qui permet d'alimenter cette interface / filtre avec n'importe quel bloc d'alimentation secteur délivrant une tension comprise entre +9 V et +15 V. La consommation est assez faible pour se permettre d'utiliser un petit régulateur de tension de type LM78L05 (100 mA max), ce dernier n'a pas besoin de dissipateur thermique. La diode D2 n'est pas indispensable mais reste vivement conseillée, les blocs secteurs du commerce permettant parfois d'inverser la polarité de la tension de sortie.

   

Evolutions : autres fonctions MIDI ?

Le PIC choisi ici est sous-exploité et dispose de ressources libres qui pourraient être mises à contribution pour d'autres actions temps réel. Par exemple, effectuer à la volée un changement de canal MIDI ou appliquer une "compression de dynamique" sur les valeurs de vélocité. Autre évolution possible : faire la distinction entre évènements Note, ControlChange et ProgramChange lors du filtrage (par exemple, pour un canal MIDI donné, laisser passer les ProgramChange et bloquer les notes et ControlChange).

Restons modestes dans les demandes, cette interface ne pourra évidemment pas s'élever au rang de mon processeur MIDI 001 !


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.

   

Logiciel du PIC

Pro - Le logiciel téléchargeable ici en libre service est une version limitée (LE). Il permet le filtrage d'un seul canal MIDI et offre donc la même fonctionnalité que l'interface MIDI 008b (les messages MIDI sont délivrés en sortie MIDI OUT si leur numéro de canal MIDI correspond à celui spécifié par les microswitches DSW1. Les boutons-poussoirs SW2/Yes et SW3/No sont inactifs). Pour la version complète, me contacter.

Fichiers binaires compilés (*.hex) disponibles dans l'archive suivante. 

Interface MIDI 008c - PIC 18F26K22 - LE - 12/02/2022

Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.


Circuit imprimé (PCB)

Réalisé en double face, avec quelques composants CMS à la clé.


interface_midi_008c_pcb_components-top_copper-top

Dessin PCB au format PDF

Les connecteurs DIN femelle chassis sont montés directement sur le circuit imprimé. On pourrait réduire les dimensions du circuit imprimé et se contenter de placer sur ce dernier deux ou trois points de connexion à câbler sur des prises DIN fixées "indépendament" sur le boîtier.

Historique

13/02/2022
- Première mise à disposition.