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

Dernière mise à jour : 29/05/2011

Présentation

Cette interface MIDI dispose de 8 sorties logiques dont l'état de chacune est commandée par des évènements MIDI de type NOTE ON / NOTE OFF.

interface_midi_002b_pcb_3d_a

La réception d'une NOTE ON active la sortie qui lui correspond, et la réception d'une NOTE OFF désactive la sortie qui lui correspond. Les notes servant à piloter les sorties logiques sont définies par défaut entre le DO3 et le D04, sans les altérations, mais ces notes peuvent être modifiées à tout moment par l'utilisateur et sont sauvegardées en mémoire pour pouvoir être rappelées instantanement lors de la mise sous tension suivante. Cette interface est complémentaire de l'interface Interface MIDI 002a qui travaille dans le sens inverse, et est basée sur le même principe de fonctionnement que mon interface RS232 001. A voir aussi l'interface MIDI 007 qui fonctionne selon le même principe que celle décrite ici mais qui dispose de 128 sorties au lieu de 8.

Schéma

Le voici, sans la partie alimentation qu'il faut prévoir en sus (alim 5 V classique)

interface_midi_002b

Fonctionnement général
Le coeur du montage est basé sur un PIC 16F628A, dont on exploite l'interface matérielle UART pour la lecture et la production des évenements MIDI. Le logiciel du PIC attend en permanence la réception de données MIDI sur son entrée RB1/RX, et dès qu'une donnée est réceptionnée, elle est placée dans une case mémoire, puis analysée. Si les données reçues correspondent à un évenement MIDI de type NoteOn, la valeur de la note reçue est comparée aux valeurs programmées, et si elle entre en correspondance avec l'une d'elles, la sortie qui lui correspond est activée. La même chose est faite avec les évenements MIDI de type NoteOff , mais cette fois avec pour finalité de désactiver la sortie correspondante.
Remarque : il est possible de spécifier une même valeur de note pour plusieurs sorties, mais cela présente sans doute peu d'intérêt dans la majorité des cas.

Circuit d'horloge / base de temps
Les lignes RA7/OSC1 et RA6/OSC2 sont laissées libres pour y connecter un quartz et ses deux inséparables condensateurs, ce qui vous permet de choisir la base de temps que vous préférez : interne 4 MHz ou externe avec quartz 20 MHz. Le circuit imprimé proposé dispose de l'emplacement pour les composants additionnels, que vous implanterez donc ou non, selon votre choix. La partie de code logiciel relative à la configuration générale du PIC étant différente pour les deux modes d'utilisation, vous trouverez deux archives, et vous devrez bien sûr choisir la bonne.
Remarque : le quartz peut aussi être un modèle 4 MHz, mais vous devrez dans ce cas modifier le paramètre "Fréquence d'horloge" du projet "version quartz externe" pour un fonctionnement nominal. Au début, j'avais choisi la fréquence de 4 MHz avec ou sans quartz externe, mais vu la différence de prix entre un quartz 4 MHz et un de 20 MHz, pas de raison de se priver de ce lui qui vibre plus vite. Dans la mesure du possible, préférez la version avec quartz externe 4 MHz ou 20 MHz, le circuit sera plus fiable s'il doit se trouver en un lieu où la température peut beaucoup varier (la température du circuit influe en effet plus la fréquence de fonctionnement du PIC, quand on utilise l'horloge interne).

Entrée MIDI
L'entrée MIDI est classique, elle 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, de 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.

Sortie MIDI
La sortie MIDI est optionnelle, et n'est là que pour vérifier le bon fonctionnement de l'interface en cas de doute. Cette dernière délivre en effet 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. Cette sortie permet aussi de confirmer la bonne prise en compte des nouvelles valeurs de notes spécifiées lors d'une programmation par l'utilisateur (voir paragraphe relatif à la programmation des notes à détecter).

Programmation des notes à détecter
Par défaut, les notes détectées sont les uivantes :
- Sortie Out1 : activée sur réception note C3 (Do3)
- Sortie Out2 : activée sur réception note D3 (Ré3)
- Sortie Out3 : activée sur réception note E3 (Mi3)
- Sortie Out4 : activée sur réception note F3 (Fa3)
- Sortie Out5 : activée sur réception note G3 (Sol3)
- Sortie Out6 : activée sur réception note A3 (La3)
- Sortie Out7 : activée sur réception note B3 (Si3)
- Sortie Out8 : activée sur réception note C4 (Do4)
Pour les modifier en partie ou en intégralité, suivre la procédure suivante :
1 - S'assurer que toutes les sorties Out1 à Out 8 sont actuellement désactivées (dans le doute, éteindre l'interface puis la rallumer).
2 - Mettre l'entrée Prg (broche 5 de J4, entrée RA5 du PIC) à la masse pour entrer en mode programmation.
3 - Mettre le niveau logique adéquat sur les trois entrées In1 à In3, pour spécifier la sortie pour laquelle on veut programmer la nouvelle note, selon tableau suivant :
- Sortie Out1 : In3 = 1, In2 = 1, In1 = 1
- Sortie Out2 : In3 = 1, In2 = 1, In1 = 0
- Sortie Out3 : In3 = 1, In2 = 0, In1 = 1
- Sortie Out4 : In3 = 1, In2 = 0, In1 = 0
- Sortie Out5 : In3 = 0, In2 = 1, In1 = 1
- Sortie Out6 : In3 = 0, In2 = 1, In1 = 0
- Sortie Out7 : In3 = 0, In2 = 0, In1 = 1
- Sortie Out8 : In3 = 0, In2 = 0, In1 = 0
Dans le cas présent, une entrée laissée en l'air équivaut à un niveau logique haut (1), une entrée reliée à la masse équivaut à un état logique bas (0).
4 - Envoyer sur l'entrée MIDI In, la note qui doit activer la sortie spécifiée à l'étape précédente (NoteOn suivi d'un NoteOff). A cet instant, l'interface renvoi la note spécifiée sur la sortie MIDI Out, pour confirmation, et la sortie correspondante s'active pendant quelques centaines de ms.
5 - Répéter l'opération pour toutes sorties à reconfigurer.
6 - Déconnecter l'entrée Prg (broche 5 de J4, entrée RA5 du PIC) de la masse pour sortir du mode programmation.

Remarque : lors de la mise sous tension, les sorties sont toutes activées temporairement, les unes après les autres et pendant un bref instant, en premier la sortie Out1 et en dernier la sortie Out8. Si l'entrée de programmation est à la masse (circuit en mode programmation) au moment de la mise sous tension, le sens d'activation des sorties est inversé : la sortie Out8 s'allume en premier et le cycle se termine avec la sortie Out1.

Exploitation des sorties du PIC
Les sorties du PIC sont mises à disposition au travers d'un octuple darlington de type ULN2803, qui permet de piloter directement des relais ou des voyants de petite puissance. Ce composant peut être supprimé si vous souhaitez exploiter directement les sorties du PIC, pour piloter un circuit logique "standard" ou de simples leds.

Alimentation

L'alimentation du montage doit impérativement être de +5V, vous pouvez vous contenter d'une alim simple basée sur un régulateur de tension de type LM7805 comme celle décrite à la page Alim simple 001.

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

Les fichiers de code source (MikroPascal V2.50 Pro) et binaire compilé (*.hex) sont disponibles dans l'archive dont le lien suit. Je vous conseille la version avec quartz externe 20 MHz, même si le circuit fonctionne bien avec oscillateur interne 4 MHz.
Interface MIDI 002b - PIC 16F628A - Quartz externe 20 MHz - 29/05/2011
Interface MIDI 002b - PIC 16F628A - Oscillateur interne 4 MHz - 29/05/2011
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Prototype

Réalisé sur plaque d'expérimentation sans soudure, relié à ma platine de développement EasyPic4 via deux petits cordons en nappe.

interface_midi_002b_proto_001a interface_midi_002b_proto_001b interface_midi_002b_proto_001d

Un petit bargraphe à leds pour visualiser l'état des sorties, et un optocoupleur rapide de type 6N137 de marque HP. Et ce beau petit monde raccordé à ma "valisette QY70", intégrant tout le nécessaire pour faire dans le portable (hum...).

interface_midi_002b_proto_001c

Fonctionnement de base OK pour le moment, mais les notes ne doivent pas être relachées trop vite (elles doivent durer au moins 0,5 seconde). Je vais essayer de trouver d'où peut venir le problème.

Remarque : j'ai tout de même eu droit à quelques déboires qui m'ont fait perdre plusieurs heures : mon QY70 envoyait toutes les 300 ms, un message "Active Sensing" ($FE) auquel je ne pensais absolument pas, et l'interface, qui ne les ignorait pas, les comptait comme octets "normaux", ce qui rendait le comportement du système assez aléatoire. Il a fallu que je transmette en écho sur la sortie MIDI_Out, les données reçues sur l'entrée MIDI_In et que je fasse suivre tout ça sur un PC pour que je comprenne ce qui n'allait pas.

Circuit imprimé

Commencé.

interface_midi_002b_pcb_composants

Corrections et remarques

29/05/2011
- Ajout buffer circulaire dans le traitement des données reçues pour un meilleur fonctionnement lorsque plusieurs notes MIDI arrivent rapidement les unes derrière les autres.
- Inversion état logique de la sortie RA4 pour qu'elle se comporte comme les autres sorties.
Ces modifications ont été apportées aux deux versions (avec quartz externe 20 MHz et avec oscillateur interne 4 MHz).