Dernière mise à jour :
15/12/2019
Présentation
Cette interface MIDI permet de convertir une note MIDI en sa
représentation CV (Control Voltage), avec Gate et Trigger. Il s'agit donc d'un convertisseur MIDI/CV-Gate.
Elle dispose d'une entrée MIDI et d'une sortie en tension 0 à +5 V.
A chaque note reçue, l'interface délivre une tension analogique
comprise entre 0 et +5 V qui dépend de la hauteur de la note (pitch). A
chaque réception d'un événement NoteOn (touche clavier enfoncée), deux
sorties logiques "Gate" et "Trigger" s'activent. La sortie Trigger ne
s'active que très brièvement (environ 1 ms) alors que la sortie Gate
reste activée et ne se désactive que lors de la réception de
l'événement NoteOff correspondant. Le circuit est basé
sur un PIC 16F628A et un convertisseur numérique analogique (DAC) de
type MCP4921. Voir aussi (pour info) la page
Commande CV_Gate 001.
Avertissement
Quid
de cette interface ? A-t-elle un réel intérêt quand on voit tout ce qui
se fait à gauche et à droite, tant chez les professionnels que chez les
amateurs passionnés ? Oui, cette interface ne fait pas tout ce qu'on
aimerait avoir sous la main quand on possède une grande quantité de
synthétiseurs qui ne
réclament pas les mêmes signaux de commande. L'idée ici est de montrer
(une fois de plus, car je ne suis pas le premier à le faire) qu'il faut
peu de choses pour réaliser une interface MIDI/CV. Certes,
on peut fort bien acheter un module pro qui fait tout, on est (presque)
sûr du résultat. Mais on peut aussi se casser un peu la tête et
fabriquer soi-même son module, cela est financièrement intéressant
pour un usage ponctuel ou pour un unique synthétiseur (plus ou moins)
vintage
et "à l'écart des autres" (ne me dites pas que toutes les interfaces
existantes fonctionnent avec tous les synthés de la planète... à moins
peut-être d'y mettre le prix).
Remarque
: une interface MIDI/CV plus évoluée (interface MIDI 017c) est en
cours de développement (demande pro). Elle fonctionne déjà, réagit plus
vite que celle décrite ici et gère les courbes Octave/Volt ou
Hertz/Volt, et est presque terminée. Affaire à suivre ;-)
Schéma
Le coeur du montage est un microcontrôleur
PIC 16F628A cadencé par un quartz de 20 MHz. Le convertisseur
numérique analogique MCP4921 ne fait que ce qu'on lui demande, à savoir
restituer sur sa sortie analogique une tension qui correspond à une
valeur numérique qu'on lui transmet via les broches de son bus SPI.
Fonctionnement général
L'interface possède une entrée MIDI et une sortie de tension
analogique. Quand un événement MIDI de type Note se présente à
l'entrée, l'interface décode les octets de l'événement et en extrait
les valeurs (canal MIDI, hauteur note et vélocité). S'il s'agit du
début d'une note (NoteOn), l'information de hauteur est envoyée au
convertisseur numérique analogique après un très léger traitement. En
même temps, la sortie logique Gate est placée au niveau haut. S'il
s'agit de la fin d'une note (NoteOff), le convertisseur numérique
analogique est remis à zéo (tension de sortie nulle) et la sortie
logique Gate est placée au
niveau bas. Cette interface simple ne peut pas gérer les
accords. Si plusieurs notes arrivent "en même temps", c'est la dernière
qui a le dernier mot. Le temps de réaction est élevé : une fois
reçus tous les bits de l'événement MIDI, les sorties en tension, Gate et
Trigger sont mises à jour en moins d'une milliseconde (610 us pour
tout dire). Bien sûr, les sorties Gate et Trigger ne sont activées qu'une
fois la sortie en tension mise à jour et stabilisée... ce qui
demande entre 4 et 10 us au DAC utilisé ici.
Circuit d'horloge / base de temps
Les
lignes
RA7/OSC1 et RA6/OSC2 du PIC sont connectées à
un
quartz de 20 MHz avec deux condensateurs céramiques
de
faible valeur (22 ou 27 pF / 63 V). On peut en fait travailler avec
toute fréquence comprise entre 8 et 20 MHz (recompilation requise
si changement). La version précédente datée du 28/09/2014 tournait à 8 MHz, la
version du 15/12/2019 tourne à 20 MHz. En passant de 8 MHz à 20 MHz, on
gagne un peu en réactivité :
| 8 MHz | 20 Mhz |
Délai entre arrivée note MIDI-ON (1) et CV | 1,2 ms | 0,5 ms |
Délai entre arrivée note MIDI-ON et Trig | 1,2 ms | 0,5 ms |
Délai entre arrivée note MIDI-ON et Gate | 1,2 ms | 0,5 ms |
Délai entre arrivée note MIDI-OFF et CV | 0,7 ms | 0,3 ms |
Délai entre arrivée note MIDI-OFF et Trig (2) | - | - |
Délai entre arrivée note MIDI-OFF et Gate | 0,2 ms | 0,11 ms |
(
1) :
après réception effective des trois octets constituant la note MIDI, laquelle dure environ 1 ms (
2) :
la durée du signal Trig est constante et ne dépend donc pas de la durée de la note
Entrée MIDI
L'entrée MIDI 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) qui protège 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 permet de récupérer le signal MIDI
au
format TTL, grâce à la présence de la résistance
de charge R2
reliée au +5 V. Les
données MIDI mises en forme aboutissent à l'entrée RB1/RX1 du
PIC.
Conversion MIDI vers CV
Il
existe plusieurs "règles" de conversion, avec une approche linéaire (Hz
/ volt) ou exponentielle (octave / volt). J'ai adopté ici celle
du 1 V / octave (méthode adoptée par Roland, Moog, Sequential
Circuits, Oberheim ou encore ARP) avec une sortie 0 à +5 V :
- tension de 0 V pour la note Do0 (C0)
- tension de +1 V pour la note Do1 (C1)
- tension de +2 V pour la note Do2 (C2)
- tension de +3 V pour la note Do3 (C3)
- tension de +4 V pour la note Do4 (C4)
- tension de +5 V pour la note Do5 (C5)
La
note Fa# (F#), qui se trouve entre deux Do (C) espacés d'un octave,
correspond à une tension de x.5 V (1,5 V pour Fa#1, 2,5 V pour Fa#2,
etc). De même, la note Ré# (D#), qui se trouve entre un Do et le Fa#
qui suit,
correspond à une tension de x.25 V (1,25 V pour Ré#1, 2,25 V pour
Ré#2, etc). On remarque vite qu'une plage de tension de 0 V
à +5 V couvre 5 octaves (on peut noter au passage que certains instruments jouent
une note différente du Do0 pour une tension CV de 0 V - Fa pour le
MiniMoog, par exemple).
Précision de la tension de sortie CV
La
tension max de sortie du convertisseur (valeur pleine échelle)
correspond à la tension appliquée sur la broche VREFA du DAC (broche
6). Si la tension de sortie de l'alimentation utilisée pour cette
interface ne fait pas pile poil +5,00 V, alors la tension de sortie du
convertisseur sera décalée d'autant puisque c'est cette même alim qui
est utilisée comme référence de tension. Pour faire plus sérieux, on
peut appliquer sur la broche VREFA du DAC, une tension de +5 V issue
d'une
référence de tension,
qui sera bien plus stable même avec des différences de température
ambiante élevées. Le TL431 avec un petit potentiomètre ferait très bien
l'affaire, ainsi qu'un AD588 (en +5,000 V). Ceci dit vous avez sans
doute noté la présence de deux boutons poussoirs appelés T- et T+. Ils
permettent de décaler la tension de sortie en plus ou en moins par pas
de 1,22 mV, valeur qui correspond au pas du convertisseur (4096 pas
en 12 bits -> 5,000 V / 4096 = 1,22 mV). La plage de réglage va
de -125 à +125 pas, ce qui permet d'obtenir en sortie une valeur de
pleine échelle comprise entre +4,85 V et... +5 V. Bah oui, le DAC ne va
pas sortir plus que la tension d'alim ! Mais pour toutes les valeurs
inférieures, le décalage sera celui imposé par vos soins (sauf bien sur
en tout début ou en toute fin d'échelle, où on observera forcément un tassement progressif). A
la première mise sous tension du montage, la valeur du décalage
est de 0. La pression des boutons-poussoirs T- ou T+ vous
permet de décaler le cas échéant, la tension de sortie sur toute
son étendue. La valeur de décalage spécifiée est bien sûr conservée en
mémoire et réappliquée à la mise sous tension suivante. Pendant la
phase de réglage (pression sur T- ou T+) la tension de sortie du DAC
correspond à la valeur de la dernière note reçue avec application
de l'offset. Si aucune note n'a été reçue depuis la mise sous tension,
c'est la note Do3 qui est utilisée. Si vous n'avez que faire de cette
fonction de réglage de décalage, vous pouvez supprimer les deux boutons
T- et T+ et raccorder en permanence à la masse les broches RA2 et RA3
du PIC.
Modification de la note de bas d'échelle
La
note de bas d'échelle est fixée par défaut à C0 mais on peut la
modifier via la fonction Learn. La procédure à suivre est très simple :
- appuyer sur bouton Learn, puis
- envoyer la note MIDI qui correspond au bas d'échelle désiré.
La
hauteur de la note reçue est désormais utilisée comme bas d'échelle et
est conservée en EEPROM pour usage ultérieur, même après coupure de
l'alimentation.
Sortie Gate et Trigger
La sortie Gate délivre
une tension positive de +5 V tant qu'une note est jouée. La sortie
Trigger délivre quant à elle une courte impulsion positive d'environ 1 ms au début de
la note (événement NoteOn).
Alimentation
Un
régulateur de tension de +5 V est prévu directement sur le circuit
(U3), ce qui permet d'alimenter l'interface avec n'importe
quel bloc d'alimentation secteur qui délivre une tension comprise entre
+9 V et +15 V. La consommation est assez faible pour se
permettre d'utiliser un régulateur de tension "miniature" de type
LM78L05 (100 mA max), et ce dernier n'a pas besoin de dissipateur
thermique.
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.
Prototype
Interface réalisée et testée avec ma platine EasyPic7 et mon petit clavier maître Evolution (bas de gamme mais suffisant).
La procédure de test était simple. Elle a consisté à presser
une note en
continu sur le clavier MIDI, et à vérifier à l'ohmmètre la valeur
de la tension de sortie du convertisseur. Une LED câblée sur les
sorties
Trigger et Gate confirmaient la bonne marche (le bon déclenchement) du
système. La LED Trigger s'allumait si brièvement qu'on avait peine à la
voir, mais le reste montre que c'est OK. Mesures effectuées avec Do0
comme base de l'échelle et avec un offset de décalage de 0 (boutons T- et T+ non utilisés) :
- Do0 : tension mesurée de 0,00 V
- Do1 : tension mesurée de 0,99 V
- Do2 : tension mesurée de 1,98 V
- Do3 : tension mesurée de 2,99 V
- Do4 : tension mesurée de 3,99 V
- Do5 : tension mesurée de 4,99 V
Tension d'alimentation mesurée aux bornes du convertisseur MCP4921 : 4,99 V. Résultats tout-à-fait cohérents donc.
Logiciel du PIC
Le logiciel compilé (*.hex) est disponible
en libre service, comme d'habitude.
Interface
MIDI 017 - PIC 16F628A - 15/12/2019
Si
vous souhaitez recevoir par la poste un PIC préprogrammé
et prêt à utiliser, merci de consulter la page
PIC - Sources.
Circuit imprimé
Non réalisé.
Historique
15/12/2019
- Recompilation du code
après remplacement du quartz 8 MHz par un quartz 20 MHz, pour une
réactivité légèrement accrue (voir paragraphe Circuit d'horloge / base
de temps).
28/09/2014
- Première mise à disposition.