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.
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)
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.
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.
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...).
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é.
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).