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.
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 !
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 :
- soit intercalée entre la sortie MIDI OUT d'une surface de contrôle et l'entrée MIDI IN de la station de travail;
- soit câblée sur la sortie MIDI OUT de la station de travail
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.
- RB0 = 1 (broche laissée en l'air) : fonction écho désactivée
- RB0 = 0 (broche reliée à la masse) : fonction écho activée
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 :
- LED jaune (LED1) allumée quand un message PLAY est reçu
- LED rouge (LED2) allumée quand un message REC ou PUNCH-IN est reçu
- Aucune LED allumée quand un message STOP est reçu.
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.
- Si
l'entrée Inhib est placée à l'état logique bas (broche RB4 reliée à la
masse), alors les sorties Out_RT et Out_MMC restent désactivées quelque
soient les messages MIDI reçus.
- Si l'entrée Force est placée à l'état logique bas (broche RB5 reliée à
la masse), alors les sorties Out_RT et Out_MMC restent activées
quelque soient les 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
- Cubase (V5 et V7) : fonctionnement OK avec commandes PLAY, STOP et REC
- Protools (V9 et V10) : seule la commande STOP est reconnue
- Live (V8) : seules les commandes PLAY et STOP sont reconnues (la commande REC dans Logic provoque l'allumage du voyant PLAY)
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.
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.
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 mm
2 maximum).
Typon aux formats PDF, EPS et Bitmap 600 dpiSi
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.