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

Dernière mise à jour : 22/12/2013

Présentation

Cette interface MIDI, basée sur un microcontrôleur de type PIC 16F628A, dispose d'une entrée MIDI et de sorties logiques dont l'état dépend de messages MIDI reçus.

interface_midi_005b_pcb_3d_a interface_midi_005b_pcb_3d_b

Elle a été conçu pour allumer une lampe rouge style "RECORD" lors de la réception d'une commande MIDI de type "Démarrage enregistrement" (Sysex MMC Record Punch In), lampe qui s'éteint dès réception d'une commande MIDI de type "Fin enregistrement" (Sysex MMC Record Punch Out ou Sysex MMC STOP). Ces données peuvent être envoyées par des surfaces de contrôle (télécommandes) ou des séquenceurs logiciel tels que Cubase, Nuendo, Live ou Protools. Une première sortie logique représente l'état d'enregistrement indiquée par les messages MMC, une seconde sortie est dédiée aux messages Start/Stop de type temps réel (RT, Real Time). Les deux sorties sont totalement indépendantes. En outre, les sorties logiques peuvent être inhibées ou forcées à volonté via deux entrées de commandes dont l'usage est optionnel. Une version plus évoluée compatible avec messages MIDI au protocole Mackie HUI est en cours de développement, voir page Indicateur lumineux enregistrement 001.

Schéma

La sortie MIDI OUT est optionnelle, mais il est interdit de supprimer le reste !

interface_midi_005b

Principe général de fonctionnement
Cette interface réagit aux commandes MMC standard suivantes, qui sont des commandes Sysex "Temps réel" :
- [ F0 7F 00 06 01 F7 ] --> Stop
- [ F0 7F 00 06 02 F7 ] --> Play
- [ F0 7F 00 06 06 F7 ] --> Record Strobe (Punch In)
- [ F0 7F 00 06 07 F7 ] --> Record Exit (Punch out)
- [ F0 7F 00 06 0F F7 ] --> MMC Reset
Elle peut être utilisée de deux façons différentes :
Cette deuxième possibilité peut présenter des limites, voir paragraphe Essais pour détails.

Oscillateur de référence
Les données MIDI sont transmises à la vitesse de 31250 bauds, et cette vitesse doit être respectée autant que faire se peut (à ne pas confondre avec la célèbre devise militaire "au tank de faire sa peau"). Le PIC 16F628A dispose d'un oscillateur interne de 4 MHz dont la précision pourrait suffire pour des applications MIDI, et c'est d'ailleurs cette solution qu'au départ j'avais utilisée. Par la suite, j'ai décidé d'utiliser un quartz, comme pour toutes mes applications MIDI qui se retrouvaient en situation "pro". Ce choix est justifié d'une part pour la meilleur stabilité (la fréquence de l'oscillateur dérive moins en fonction de la température ambiante) et pour une future extension que je prévoyais pour le traitement de messages au protocole Mackie HUI qui demandent un peu plus de temps proceseur. Cette extension n'a finalement pas été mise en oeuvre dans cette interface et fait l'objet d'un développement séparé, voir page Indicateur lumineux enregistrement 001. L'interface MIDI 005b présentée ici restera donc finalement telle qu'elle est, dans sa version "simplifiée" et avec quartz 20 MHz.

Entrée MIDI
Elle se fait, comme d'habitude, sur un optocoupleur qui assure une isolation électrique totale avaec la source MIDI. La résistance R1 limite le courant dans la LED émissive contenue dans l'optocoupleur U2 (ici un CNY17-2) et la diode D1 prévient tout dommage consécutif à une inversion des broches 4 et 5 de la prise MIDI (câble MIDI fait maison malencontreusement croisé ou erreur au niveau du connecteur d'entrée J1). Il m'est arrivé de voir des schéma où la résistance R1 et la diode D1 étaient toutes deux omises, il est vrai que le risque de destruction de l'optocoupleur est faible car il y a déjà des résistances de limitation de courant côté sortie MIDI de la source, mais je préfère rester prudent de ce côté là. Il est possible d'utiliser d'autres optocoupleurs pour l'entrée MIDI, voir page Interfaces MIDI pour plus de détails. 

Sortie MIDI Out
La sortie MIDI Out est totalement optionnelle. Si pas besoin, retirer le connecteur DIN J2 et les résistances R3 et R4. J'ai prévu cette prise de sortie uniquement pour tester le bon fonctionnement de la partie hard de l'UART du PIC, par émission d'un message de type Note brève (note C3 - Do3 - émise pendant 200 ms). Les données MIDI sortent telles quelles au format TTL de la patte RB2 du PIC, qui est aussi la sortie TX de l'UART matériel, et sont délivrées via les deux résistances de limitation de courant R3 et R4, de 220 ohms chacune. Le fait que le PIC possède un UART simplifie bien le développement du logiciel interne et permet surtout une grande précision dans le timing des données émises (même si pour ce genre de montage l'usage d'une gestion totalement logicielle des données MIDI aurait été possible en prenant quelques précautions). Depuis la version du 21/07/2013, possibilité de renvoyer sur la sortie MIDI Out les données qui arrivent sur la prise MIDI In (avec juste un filtrage effectué sur les données de type Active Sensing, ce sont les seules infos qui ne ressortent pas). La mise en service de la fonction écho se fait en mettant la broche RB0 à la masse (pullup activé sur le port B, donc entrée à l'état haut si on la laisse en l'air.
Dans tous les cas, une note est envoyée lors de la mise sous tension pour confirmer le bon démarrage du programme.

Sorties LED (locales et/ou déportées)
Deux LED reflètent la situation en cours :
Ces deux LED peuvent être des modèles standard ou très haute luminosité, mais leur courant nominal ne doit pas dépasser 20 mA chacune.

Inhibition et forçage des sorties logiques
Le circuit est doté de deux entrées "Inhib" (broche RB4 du PIC) et "Force" (broche RB5 du PIC) dont l'utilisation est laissée à votre appréciation. Si ces entrées sont laissées en l'air, elles n'ont aucune action et le circuit se contente de réagir aux messages MIDI reçus.
Dans tous les cas, les messages MIDI et les commandes qu'ils représentent sont analysés en continu et stockés en mémoire, de sorte que les sorties logiques Out_RT et Out_MMC reprennent l'état qu'elles auraient du avoir si aucune de ces entrées de commande n'avaient été utilisées, au moment où on arrête de les utiliser. Prenons l'exemple d'une commande MIDI MMC REC_Start reçue alors que les deux entrées de commande "Inhib" et "Force" sont laissées en l'air. La sortie Out_MMC s'active et la sortie Out_RT reste désactivée. Si aussitôt après on met l'entrée de commande "Inhib" à la masse, la sortie Out_MMC se désactive aussitôt, et si on remet l'entrée "Inhib" en l'air (à l'état haut) alors la sortie Out_MMC se réactive aussitôt.
Usage possible de la commande "Inhib" : permettre à celui qui est aux manettes de désactiver la lampe rouge pour ne pas signaler que l'enregistrement est démarré.
Usage possible de la commande "Force" : permettre à celui qui est aux manettes de faire croire qu'un enregistrement est en cours (pour éviter d'être dérangé entre deux prises par exemple).

Exploitation des sorties logiques
La sortie Out_MMC est à l'état bas au repos (0 V), et passe à l'état haut (+5 V) lors de la réception d'une commande MIDI de type RECORD START (PUNCH IN). Cette même sortie repasse à l'état bas sur réception d'une commande MIDI de type RECORD STOP (PUNCH OUT). La sortie Out_RT est à l'état bas au repos, et passe à l'état haut lors de la réception d'une commande MIDI de type START. Cette même sortie repasse à l'état bas sur réception d'une commande MIDI de type STOP. Cette deuxième sortie a été ajoutée parce que cela ne demandait que très peu de modifications au niveau logiciel et que le PIC disposait d'une nombre de broches suffisant. Peut-être n'y verrez-vous aucune utilité. La connexion d'une LED (pourquoi pas de type haute luminosité rouge) directement sur les sorties du PIC (avec bien sûr une résistance série de limitation de courant) est possible, mais pour une "grosse" lampe style 12 V / 6 W,  24 V / 12 W ou 230 V / 40 W, il faut passer par un étage amplificateur de courant et même par un optocoupleur pour la version 230 V. Voir pages Interfaces logique 001 et Interface de puissance 230V pour quelques exemples pratiques.

Essais

Tests réalisés avec Cubase, Protools et Logic.

Sortie MIDI OUT station de travail raccordée à l'entrée MIDI IN de l'interface

Interface câblée entre sortie MIDI OUT d'une surface de contrôle et entrée MIDI IN de la station de travail
Ne disposant plus de surface de contrôle avec sortie MIDI OUT pour l'envoi des commandes MMC, je me suis décidé de construire vite fait un petit contrôleur dédié à cet usage, qui est devenu mon contrôleur MIDI 004.

controleur_midi_004_proto_001e controleur_midi_004_proto_001a controleur_midi_004_proto_001f

L'interface 005b réagit correctement avec les commandes MMC, qu'elles soient envoyées avec mon logiciel Midi-Test, avec ce mini-contrôleur MIDI 004 ou avec une surface de contrôle qui envoie ce qu'il faut.

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.

Circuit imprimé

Réalisé en simple face, avec un très joli strap que je vous invite à mettre en valeur (fil en or massif de section 16 mm2 maximum).

interface_midi_005b_pcb_composants

Typon aux formats PDF, EPS et Bitmap 600 dpi

Si l'absence de condensateur de découplage d'alim vous effraie, n'hésitez pas à en ajouter un de valeur comprise entre 1 uF et 10 uF / 16 V. Soit directement entre les bornes 5 et 14 du PIC 16F628A (face cuivre du circuit imprimé) soit près du connecteur d'alim J4. Condensateur dans le bon sens, ça va de soi...

Logiciel du PIC

Les fichiers de code source (MikroPascal Pro V5.30) et binaire compilé (*.hex) sont disponibles dans l'archive dont le lien suit. Désormais, seule la dernière version prévue pour fonctionner avec quartz 20 MHz est mise à disposition. Les anciennes versions avec quartz 4 MHz ou oscillateur interne ne sont plus maintenues et n'ont pas bénéficié des dernières mises à jour. Inutile de s'encombrer avec des codes obsolètes.
Interface MIDI 005b - PIC 16F628A - 22/12/2013
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Historique

22/12/2013
- Ajout des LED 1 et 2 pour indication Play/Rec/Stop "sur place".
- Mise à jour du schéma (ajout LED et quartz 20 MHz au lieu de 4 MHz), et du dessin du circuit imprimé.
21/07/2013
- Correction bug majeur (blocage système) en cas de réception d'un certain nombre d'événements MIDI en l'absence de réception des commandes attendues (le compteur des données reçues était incrémenté en permanence sans être remis à zéro et cela provoquait un débordement malheureux). Merci à Nicolas qui a mis le doigt dessus.
01/01/2012
- Correction erreur code PIC version oscillateur interne : la configuration spécifiait un mode d'horloge externe (quartz) et non un mode d'horloge interne. Pour rappel, la version avec quartz externe est toujours conseillée.
- Ajout buffer circulaire en vue d'accépter des messages MIDI plus volumineux (on ne sait jamais ce que l'avenir nous prépare).
- Ajout entrées de commande "Inhib" et "Force" pour contourner les messages MIDI reçus (option).
- Changement vitesse horloge, passage de 4 MHz à 20 MHz. 
06/03/2011
- Première mise à disposition.

Important : à compter du 01/01/2012, les évolutions logicielles ne concernent que la version avec quartz externe 20 MHz. Les versions avec quartz 4 MHz et avec oscillateur interne sont laissées en place mais ne seront plus maintenues. Je conseille d'utiliser la version la plus récente avec quartz 20 MHz.