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.

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

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

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

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.

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

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.

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.

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.

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.