Electronique > Réalisations > Interfaces > Interfaces MIDI > Interface MIDI 008b

Dernière mise à jour : 30/01/2022

Présentation

Cette interface MIDI dispose d'une entrée MIDI IN et d'une sortie MIDI OUT. C'est chouette, non ?


interface_midi_008b_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é au canal MIDI : les données MIDI entrantes ne sortent que si leur canal MIDI correspond à celui sélectionné par l'utilisateur au moyen de microswitches. Il s'agit donc d'une version "évoluée" du système de filtrage effectué par l'interface MIDI 008.  

Le retard introduit par ce filtre (temps de transit entre entrée MIDI IN et sortie MIDI OUT) est de 1 ms. Sachant qu'un évènement MIDI de type Note dure environ 0,9 ms, on peut en déduire que le système réagit en moins de 0,1 ms.

Une version plus élaborée est proposée à la page Interface MIDI 008c (taille du tampon/buffer d'entrée augmenté et filtrage multi-canaux).


Schéma

Le coeur du montage est un microcontrôleur PIC 16F628A dont le logiciel ne fait qu'attendre l'arrivée d'évenements MIDI sur l'entrée MIDI IN pour décider s'il faut oui ou non les laisser sortir sur la prise MIDI OUT. Le circuit est alimenté sous une tension de +5 V.


interface_midi_008b

   

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.

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

Remarques :
- Si vous savez d'avance que les octets $FE et/ou $FF devront toujours être filtrés, les microswitches DSW1[0] et DSW1[1] peuvent être remplacés par une liaison définitive. Dans tous les cas, les entrées RA0 et RA1 du PIC ne doivent pas rester en l'air et doivent être connectées soit à la masse soit au +5 V.
- 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. Je pense donc utile de pouvoir choisir s'il faut ou non le filtrer.

 
Filtrage du numéro de canal MIDI

Les messages de type Note, ControlChange et ProgramChange reçus sur l'entrée MIDI ne sont délivrés sur la sortie MIDI qu'à la condition que leur numéro de canal MIDI corresponde à celui spécifié (en binaire) par les 4 microswitches DSW2[3..0].

 
Canal MIDIRB7RB6RB5RB4|Canal MIDIRB7RB6RB5RB4
10000|91000
20001|101001
30010|111010
40011|121011
50100|131100
60101|141101
70110|151110
80111|161111

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


Circuit d'horloge / base de temps

Les lignes RA7/OSC1 et RA6/OSC2 du PIC sont utilisées pour y connecter un quartz de 20 MHz avec ses deux petits condensateurs céramiques de faible valeur (22 pF). A noter que l'interface MIDI 008 travaillait avec un quartz de 8 MHz. Le gain de temps obtenu sur le traitement (filtrage sur canal MIDI) par cette augmentation de la fréquence d'horloge est de l'ordre de 200 us (0,2 ms). C'est toujours ça !

   
Entrée MIDI

L'entrée MIDI 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 (type NPN) 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 RB1/RX du PIC.


Sortie MIDI

La sortie MIDI (broche RB2/TX du PIC) délivre brièvement une note MIDI C3 (Do3) 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 infos MIDI qui n'ont pas été filtrées.


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 régulateur de tension "miniature" de type LM78L05 (100 mA max), et ce dernier n'a pas besoin de dissipateur thermique (tant mieux car je ne sais pas si vous avez déjà essayé d'en mettre un sur un boîtier plastique TO92, mais ce n'est pas le pied). La diode D2 n'est pas indispensable mais est très vivement conseillée, les blocs secteurs du commerce permettant parfois d'inverser la polarité de la tension de sortie. Il serait dommage de griller le microcontrôleur pour une bête inversion qui n'arrive qu'aux autres. Si vous disposez déjà d'une alimentation de +5 V, alors vous pouvez supprimer tous les composants relatifs à cette section, à savoir D2, C3, C4 et U3.


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

Fichier binaire compilé (*.hex) disponible dans l'archive suivante. 

Interface MIDI 008b - PIC 16F628A - 26/01/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.


interface_midi_008b_pcb_components-top

Dessin PCB au format PDF

Les connecteurs DIN femelle chassis sont montés directement sur le circuit imprimé mais on pourrait fort bien 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

30/01/2022
- Publication sur le site (enfin ! car il aurait du l'être en 2011). J'en ai profité pour rajeunir un peu le code logiciel du PIC.
- Ajout dessin circuit imprimé (PCB) que je n'avais pas dessiné à l'époque.

27/03/2011
- Première mise à disposition (ratée ! cette page n'avait jamais été transférée - corrigé le 30/01/2022)