Cette interface MIDI dispose d'une entrée MIDI IN et d'une sortie MIDI OUT. C'est chouette, non ?
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).
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.
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.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.
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 MIDI | RB7 | RB6 | RB5 | RB4 | | | Canal MIDI | RB7 | RB6 | RB5 | RB4 |
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 DSW2[x] fermé ; Valeur 1 = interrupteur DSW2[x] ouvert
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 !
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.
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.
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.
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.
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.
Réalisé en double face.
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)