Cette interface MIDI dispose d'une entrée MIDI IN et d'une sortie MIDI OUT.
Elle se comporte comme un filtre dédié aux messages de type Active Sensing, émis toutes les 300 ms par certains instruments de musiques électroniques (notament claviers assez anciens). Le retard introduit par ce filtre (temps de transit entre entrée MIDI IN et sortie MIDI OUT) est inférieur à 0,5 ms.
Un circuit "plus évolué" permettant de filtrer les messages MIDI selon leur numéro de canal est présentée à la page Interface MIDI 008b.
Le coeur du montage est un microcontrôleur PIC 16F628A dont le logiciel ne fait rien d'autre que d'attendre l'arrivée d'évenements MIDI sur l'entrée MIDI IN. Une alimentation +5 V est requise pour faire fonctionner l'ensemble.
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 cavalier JP1. Si ce cavalier est en position "gauche" (RA0 = 0), alors l'octet $FE reçu n'est pas filtré et ressort sur la sortie MIDI OUT. Si le cavalier JP1 est en position "droite" (RA0 = 1), alors l'octet $FE est filtré et il 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 cavaliers JP1 et/ou JP2 peuvent être remplacés par des liaisons définitives. 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 (comme pour l'active sensing), 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. Si le seul filtrage des messages $FE suffit dans votre cas, laissez donc les messages $FF passer au travers de l'interface en plaçant le cavalier JP2 côté masse.
Les lignes RA7/OSC1 et RA6/OSC2 du PIC sont utilisées pour y connecter un quartz de 8 MHz avec ses deux petits condensateurs céramiques de faible valeur. Vu le travail demandé au logiciel, on aurait pu se contenter d'un quartz de 4 MHz. Mais comme je viens de retrouver mon quartz 8 MHz... Ah si, une raison valable de mettre un quartz plus rapide : le temps de traitement est plus élevé et le temps de transit (retard entre entrée MIDI IN et sortie MIDI OUT) est raccourci. Avec un quartz de 8 MHz, le retard MIDI introduit est de l'ordre de 370 us (0,37 ms). Avec un quartz de 20 MHz, le retard MIDI introduit serait de l'ordre de 340 us (0,34 ms). Et avec un quartz de 4 MHz, le retard MIDI introduit serait de l'ordre de 420 us (0,42 ms). C'est fou le temps qu'on gagne entre 4 MHz et 20 MHz ! Ce que j'ai dit juste avant serait-il donc à remettre en cause ? Allez, je vous laisse réfléchir un peu...
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.
Les fichiers de code source (MikroPascal V3.80 Pro) et binaire compilé (*.hex) sont disponibles dans les archives dont les liens suivent.
Interface MIDI 008 - PIC 16F628A - 27/03/2011
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 simple face, avec un strap.
30/01/2022
-
PCB : Correction implantation des prises MIDI qui avaient la tête à
l'envers (à cause d'un modèle 3D non conforme que je n'avais pas pris
la peine de vérifier). J'en ai profité pour réduire les dimensions du
circuit.
27/03/2011
- Première mise à disposition