Cette interface MIDI est une version actualisée de mon interface MIDI 008b.
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).
Le coeur du montage est un microcontrôleur PIC 18F26K22, en remplacement du PIC 16F628A (obsolète) qui équipait l'interface MIDI 008b.
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.
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.
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.
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.
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.
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.
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.
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 !
Il est possible d'utiliser d'autres optocoupleurs pour l'entrée MIDI, voir page Interfaces MIDI pour plus de détails.
Câblage valable pour les prises MIDI IN, MIDI OUT et MIDI THRU.
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.
Réalisé en double face, avec quelques composants CMS à la clé.
13/02/2022
- Première mise à disposition.