Electronique > Réalisations > Interfaces > Interfaces MIDI > Interface MIDI 002a

Dernière mise à jour : 19/12/2008

Présentation

Cette interface MIDI permet d'envoyer 10 notes MIDI différentes lors de l'activation de 10 boutons poussoir : à chaque bouton poussoir correspond une note MIDI, et il est possible d'en activer un ou plusieurs à la fois. L'appui sur un bouton génère un évenement MIDI de type NOTE ON, et le relachement du bouton se traduit par l'envoi d'un évenement de type NOTE OFF.

interface_midi_002a_pcb_3d_a interface_midi_002a_pcb_3d_b

Ce n'est donc ni plus ni moins qu'un petit clavier "maître" simple, non sensible à la pression (pas de gestion de la vélocité / dynamique). Bien entendu, les boutons poussoirs peuvent être remplacés par n'importe quelle logique de commande autre. En parallèle de ce projet, une interface Interface MIDI 002b qui travaille dans le sens inverse et permet de disposer de commandes logiques à partir d'evenements MIDI.

Le schéma

Le schéma qui suit est relativement simple, même s'il fait appel à un composant programmé.

interface_midi_002a

L'horloge
Le schéma montre un quartz de 4 MHz et ses deux condos C1 et C2 pour l'horloge du PIC. En réalité, j'avais prévu ces composants dans le cas où j'aurais du mal à faire fonctionner correctement l'interface à la vitesse de 4 MHz, avec remplacement éventuel du quartz 4 MHz par un de 8 MHz. Les tests réalisés avec l'horloge interne de 4 MHz s'avèrent en fait concluants, et je ne vois pas de raison pour le moment de changer. Le circuit imprimé que j'ai dessiné comporte un emplacement pour ces composants, mais ils n'auront pas besoin d'être implantés.

Boutons de commande
Les boutons de commande sont à relier sur les bornes du connecteur J2 :
- bouton N°1 (BP1) entre bornes 1 et 20 de J2
- bouton N°2 entre bornes 2 et 19 de J2
- ...
- bouton N°9 entre bornes 9 et 12 de J2
- bouton N°10 (BP10) entre bornes 10 et 11 de J2
Ces commandes, qui opèrent de façon individuelle, amènent un niveau logique bas sur les entrées du PIC. Des résistances de rappel au +5V sont mises en service au sein même du PIC (résistances PULLUP) pour le port B. Ce n'est pas possible pour le port A, mais c'est toujours cinq résistances de gagnées.

Sortie MIDI
Les notes MIDI produites par le PIC sont disponibles sur la sortie MIDI OUT, connecteur J1. L'architecture de sortie est identique à ce que l'on retrouve dans tous les équipements MIDI : borne 4 de la prise DIN reliée au +5V au travers d'une résistance de 220 ohms, borne 5 de cette même prise DIN recevant les données MIDI, issues ici du PIC.

Entrée MIDI
L'entrée MIDI In, connecteur J3, aboutit à l'optocoupleur U2 chargé d'isoler galvaniquement la sortie de l'instrument que l'on va y connecter. Celà est ainsi fait pour les entrées MIDI de n'importe quel équipement que vous pouvez acheter dans le commerce. L'absence de boucle de masse est ainsi garantie, même si l'on connecte de nombreux équipements MIDI entre eux (ce qui n'est malheureusement pas toujours le cas pour la partie audio analogique). La résistance R4 est chargée de limiter le courant dans la led contenue dans l'optocoupleur, et la diode D2 permet de protéger cette même led en cas d'inversion de polarité des fils du cable MIDI. Les données MIDI sont disponibles en sortie de l'optocoupleur au format TTL, grâce à la résistance de polarisation R5 reliée au +5 V.

Notes produites
Les notes jouées sont par défaut les suivantes :
Bouton poussoir N° 1 = note MIDI $45 / A3 / LA3
Bouton poussoir N° 2 = note MIDI $46 / A#3 / LA#3
Bouton poussoir N° 3 = note MIDI $47 / B3 / SI3
Bouton poussoir N° 4 = note MIDI $48 / C3 / DO3
Bouton poussoir N° 5 = note MIDI $49 / C#3 / DO#3
Bouton poussoir N° 6 = note MIDI $4A / D3 / RE3
Bouton poussoir N° 7 = note MIDI $4B / D#3 / RE#3
Bouton poussoir N° 8 = note MIDI $4C / E3 / MI#3
Bouton poussoir N° 9 = note MIDI $4D / F3 / FA#3
Bouton poussoir N° 10 = note MIDI $4E / F#3 / FA#3
Avec une vélocité fixée par défaut de $40 (64 en décimal, c'est le centre de la plage de vélocité qui s'étale entre 0 et 127).

Vous avez la possibilité de spécifier la hauteur de note de votre choix pour chaque bouton poussoir, en plaçant l'interface en mode "programmation" (interrupteur SW1 fermé, RA5 à la masse), et en envoyant un message de type NoteOn sur l'entrée MIDI In de l'interface (connecteur J3). Cette méthode permet de se contenter d'un clavier MIDI quelconque pour programmer l'interface.

Procédure pour programmation des notes à faire jouer par l'interface
- fermer l'interrupteur SW1 (RA5 à la masse).
- appuyer au moins une demi-seconde sur le poussoir qui correspond à la note à modifier. La led D1 clignote rapidement pour confirmer la sélection.
- envoyer un message de type Note On sur l'entrée MIDI In (J3). Pour cela il vous suffit de relier la sortie MIDI Out de n'importe quel clavier musical ou séquenceur, et de faire jouer la note désirée. La led D1 clignote rapidement pour confirmer l'acceptation des nouvelles données, et la sortie MIDI Out de l'interface joue (en echo) une fois pendant une fraction de seconde, la note spécifiée. Si après l'envoi d'une note l'interface ne réagit pas, renvoyer la même note (cela m'est arrivé deux fois sur une centaine de tests).
- répéter l'opération autant de fois que nécessaire, pour l'ensemble des boutons poussoir à configurer.
- Ouvrir l'interrupteur SW1 (RA5 au +5V) pour sortir du mode programmation et revenir en mode d'exploitation normal.

Exemple : vous voulez que la note LA4 soit jouée quand le bouton poussoir N° 3 est enfoncé.
Pour cela, il faut :
- fermer l'interrupteur SW1 (RA5 à la masse).
- appuyer au moins une demi-seconde sur le poussoir N° 3. La led D1 clignote rapidement pour confirmer la sélection.
- envoyer la note LA4 sur l'entrée MIDI In (J3). La led D1 clignote rapidement pour confirmer la réception de la nouvelle note, et la sortie MIDI Out de l'interface joue (en echo) la note LA4 pendant une fraction de seconde.
- Ouvrir l'interrupteur SW1 (RA5 au +5V) pour sortir du mode programmation et revenir en mode d'exploitation normal. Maintenant, l'appui sur le bouton poussoir N° 3 provoque l'émission de la note LA4 sur la sortie MIDI Out de l'interface.

Le proto

Mes premiers essais ont été réalisés avec une petite interface MIDI montée vite fait sur une petite plaque proto spécifiquement faite pour la platine EasyPic4 (option SmartProto avec connecteur 2x5 points intégré), mais je ne l'ai pas trouvée pratique car pour un fonctionnement correct de l'ensemble, je devais désactiver l'ensemble des résistances de pullup et la visu par leds de la carte.

easypic4_ext_midi_001a miditest_optos_graphe_000

Je ne disposais donc plus de retour visuel du bon fonctionnement du système, ce qui ne simplifiait pas la tache du débuggage. J'ai donc préféré déporter complètement tous les composants reliés électriquement aux ports A et B du microcontroleur, sur un petite plaque d'expérimentation sans soudure, la liaison entre les deux systèmes électroniques s'effectuant via des petits cables en nappe équipés des connecteurs adéquats (options EasyProto). Je préfère mille fois cette méthode, qui fait que l'on n'utilise plus les poussoirs et leds de la carte EasyPic (ça c'est un peu dommage), mais qui permet en contrepartie de disposer des ports d'entrée / sortie de façon individuelle avec fonctionnement en logique positive ou inverse sur un même port, sans avoir à jongler sans arrêt avec les cavaliers de la carte de développement.

interface_midi_002a_proto_002a interface_midi_002a_proto_002b

Pour autoriser ce mode de fonctionnement, il convient bien sûr d'isoler les ports du PIC de la carte EasyPic des diverses fonctions intégrées, afin d'en disposer de façon exclusive sur les borniers "externes".

interface_midi_002a_proto_002c

Ci-après, vue de la plaque d'expérimentation "satellite" pour la section interface MIDI, avec en premier plan les réseaux de résistances (que je n'utilise que pour une question d'encombrement et de visibilité) et les dix leds dans leur boitier rectangulaire pour CI, qui permettent ici de confirmer l'état logique des 10 entrées de l'interface, aussi bien en fonctionnement normal qu'en mode programmation.

interface_midi_002a_proto_002d

Méthodologie des tests
Dans un premier temps, j'ai effectué des tests avec l'interface RS232 de la platine de développement EasyPic, pour m'assurer que quelque chose sortait bien du port RB2 du PIC (sortie TX de l'UART), quand une des entrées de l'interface était activée. A l'autre bout, j'ai utilisé un PC équipé de mon logiciel ComTools et d'une interface série USB/RS232 standard. Après avoir testé avec succès le code à la vitesse de 9600 bauds et 38400 bauds, je l'ai testé en grandeur réelle sur ma platine EasyPic4 à la vitesse de 31250 bauds, via la première interface MIDI que j'avais confectionnée. Tout n'a pas bien fonctionné du premier coup, à cause d'une erreur sur la valeur de la résistance de charge de l'optocoupleur, qui conduisait à un signal d'amplitude trop faible reçu sur le port RB1 (entrée RX de l'UART). Tout allait bien côté émission, mais ça n'allait pas pour la partie réception. Après correction de mon erreur, tout allait bien, mais il me fallait jongler sans arrêt avec les cavaliers de la platine de développement, et appuyer en continu sur un de ses poussoirs pour passer mon interface en mode programmation. J'ai bien deux mains mais ce n'est pas de trop. J'ai donc pû avec mon deuxième montage faire les tests de façon plus efficace (mon cerveau travaillait moins, gage de fiabilité) et plus rapidement. Pour la lecture des évenements MIDI reçu de mon interface, et pour les évenements MIDI envoyés sur cette dernière, j'ai utilisé deux équipements différents :
- un petit logiciel de test MIDI Test spécialement développé pour l'occasion.
- mon petit séquenceur de poche Yamaha QY70

MIDI Test easypic4_ext_midi_001b

Tout fonctionnant bien avec ces deux outils totalement différents (sauf évidement en ce qui concerne le protocole MIDI qui est le même), je considère que c'est OK.

Veuillez nous excuser pour cette interruption momentanée...
Durant mes tests, tout s'arrête d'un coup, ma carte EasyPic et mon interface MIDI s'éteignent, plus rien ne fonctionne sauf mon PC portable qui reste à attendre là, impassible. Je me dis aussitôt que j'ai fait une fausse manip et je commence à pester en cherchant ce que j'ai bien pû faire de mal. C'est ma femme, qui s'étant mise à plat ventre pour attrapper notre cochon d'inde sous un meuble, a découvert la cause de la panne.

divers_fil_ronge_001

Heureusement que le disjoncteur du tableau de distribution d'énergie à fonctionné car notre pauvre petite bête aurait surement senti le roussi. On soupçonne toutefois qu'elle ait ressenti quelque désagrement car la pauvre était toute tremblante.

Alimentation

L'alimentation du montage doit être de +5V. Un régulateur de tension de type 7805 est prévu sur le circuit imprimé, ce qui vous permet d'utiliser toute tension comprise entre +8V et +12V (voire +15V car la consommation globale est faible). Si vous disposez déjà d'une alimentation de 5V, vous pouvez supprimer le régulateur de tension U3 et ses deux condensateurs associés C3 et C4.

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. 

Le 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.

Le programme compilé et le code source

Le fichier binaire compilé (*.hex) et les fichiers de code source (MikroPascal V8.3) sont inclus dans l'archive zip que voici :
Interface MIDI 002a - 16F628
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Le circuit imprimé

Réalisé en simple face, avec quatre straps.

interface_midi_002a_pcb_composants

Typon aux formats PDF, EPS et Bitmap 600 dpi

Remarques
- Pas besoin de mettre le quartz et ses deux condensateurs associés C1 et C2, vu que l'on utilise l'oscillateur interne 4 MHz du PIC.
- Le réseau de résistances RP1 peut être remplacé par des résistances traditionnelles de 10K montées verticalement, dont les bornes supérieures constituent le point commun relié au +5V.