Dernière mise à jour :
27/09/2020
Présentation
Cette interface MIDI 017d-x est une évolution de mon interface
MIDI 017c. Basée sur un PIC18 ou PIC32, elle dispose de 1, 2
ou
4 entrées MIDI et de 8 sorties CV/Gate/Trig. Chaque sortie CV
peut
suivre une
courbe Volt/Octave ou Hertz/Volt.
Coeur du montage, sans
l'étage de sortie analogique
Trois versions partagent les mêmes fonctions, seul
diffère le
nombre d'entrées MIDI :
-
version 017d-1 (*) avec
PIC18-DIP-28 : 1 entrée MIDI et 8 sorties CV/Gate (1 seule
sortie CV "complète", voir texte)
-
version 017d-2 avec
PIC18-CMS-64 : 2 entrées MIDI et 8 sorties CV/Gate
-
version 017d-4 avec
PIC32-CMS-64 : 4 entrées MIDI et 8 sorties CV/Gate
(*) La version 017d-1 n'a été conçue que pour la phase de
tests
préliminaires et la validation du moteur logiciel, commun aux trois
versions (prototypage plus facile).
Avertissement
Pro - Interface
développée dans un cadre pro, logiciel non disponible en
libre accès.
- Système version 017d-1 : simulation
OK ; prototype réalisé
et fonctionnel
- Système version 017d-2 :
simulation OK ; prototype
en phase de validation
- Système version 017d-4 : en
attente de validation du
système version 017d-2
Caractéristiques techniques principales
Généralités :
- 1 entrée MIDI IN (017d-1 avec PIC18) ou
2 entrées MIDI IN (017d-2 avec PIC18) ou 4
entrées MIDI IN (017d-4 avec PIC32)
- 8 sorties CV indépendantes avec CNA 16 bits (1
seule sortie Trig/Gate pour la version 017d-1)
- Plage des sorties CV sans
interface de sortie additionnelle : de 0 à +5 V
- Plage des sorties CV avec
interface de sortie additionnelle : amplitude totale et offset
ajustables, de -16 V à +16 V
- Affichage LCD pour le réglage des paramètres
individuels de chaque voie de sortie
Pour chaque
sortie
CV 1 à 8 :
- Choix de l'entrée MIDI 1 ou 2 (version 017d-2) ou
1 à 4 (version 017d-4)
- Choix du canal MIDI 1 à 16 ou Omni
- Choix du type de message MIDI à convertir : hauteur note,
vélocité note, Control Change ou Program Change
- Courbes CV en Volt/Octave ou Hertz/Volt
- Choix de la note (ou autre évènement) de départ et
d'arrivée (plage de jeu)
- Choix de le durée des impulsions Trigger (de 100 us à 9900
us)
- Choix de la polarité des sorties Trigger et Gate
- Gestion des notes détachées ou liées, avec GateOff
forcé sur notes liées configurable (de 100 us à 9900 us)
- Support
du Pitchbend sur note, avec étendue configurable
- à
venir
- Trigger
sur note unique (note isolée ou première note d'un
groupe), sur toutes les notes (retrigger) ou sur aucune note
- à
venir
Pas de fonction séquenceur ni arpégiateur ;)
Schéma 017d-1 - 1 port MIDI, avec PIC18 (DIP-28)
Système fonctionnel, initialement conçu pour la validation du
coeur du logiciel et des CNA.
Schéma incomplet
L'écran
LCD 4x20 et les boutons-poussoirs sont utilisés de la même
façon pour
les trois versions. Les 28 broches du PIC18 utilisé dans
cette version permettent le strict minimum, à savoir 1 entrée MIDI IN,
8 sorties
CV, mais 1 seule sortie Trig et 1 seule sortie Gate.
En résumé,
1 seule
sortie CV "complète" et réellement utilisable
- suffisant pour l'ensemble des tests grandeur nature, puisque le
moteur logiciel et les
CNA (convertisseurs numérique-analogique) utilisés sont les mêmes pour
toutes les versions.
Schéma 017d-2 - 2 ports MIDI, avec PIC18F (CMS-64)
Le coeur du montage est un microcontrôleur PIC18F
cadencé par un quartz de 16 MHz, auquel sont associés
les CNA
requis pour délivrer les tensions analogiques des sorties CV.
2 entrées MIDI et 8
sorties CV
Schéma 017d-4 - 4 ports MIDI, avec PIC32 (CMS-64)
Le coeur du montage est un microcontrôleur PIC32
cadencé par un quartz de 16 MHz, auquel sont associés
les CNA
requis pour délivrer les tensions analogiques des sorties CV.
4 entrées MIDI et 8
sorties CV
Description générale
Les
fonctionnalités décrites ci-après sont valables pour les trois versions
d'interface (017d-1 avec PIC18, 017d-2 avec PIC18 et 017d-4
avec PIC32), seul le nombre
d'entrées MIDI
diffère. Au 27/09/2020, certaines fonctions que je souhaite implémenter
ne le sont pas
encore.
Pour
chaque note MIDI reçue, l'interface délivre une tension analogique
comprise entre deux valeurs extrêmes (par exemple entre 0 V et +5 V)
qui dépend de la hauteur de la note (pitch) ou de sa vélocité. On peut
également utiliser des évènements de types PC (Program
Change) ou
CC (Control Change) à la place des notes. A chaque évènement MIDI reçu,
(NoteOn lors de la pression d'une touche de clavier, par
exemple),
deux sorties logiques "Gate" et "Trigger" s'activent. La sortie Trigger
ne s'active que très brièvement (par exemple pendant 500 us ou 1 ms,
valeur ajustable)
alors que la sortie Gate reste activée tant qu'au moins une note est
jouée.
Courbe de conversion MIDI vers CV
Il existe plusieurs "règles" de conversion, avec une
croissance
linéaire Hertz/Volt ou
exponentielle Volt/Octave. Chacune
des 8 sorties CV de l'interface 017d-x peut travailler avec les deux
types de courbes.
L'interface permet en outre de travailler avec un troisième type
de courbe
entièrement personnalisable par l'utilisateur (courbe User), dans le
but de répondre à
des besoins spécifiques (gamme "exotique" / non tempérée,
inversion haut/bas,
etc).
Remarque :
au 27/09/2020, la configuration "User" n'est pas encore fonctionnelle.
A - Courbe "Volt" :
Volt/Octave
Courbe standard de 1 V / octave (Roland, Moog, Sequential Circuits,
Oberheim, ARP...) avec une plage de tension de sortie de 0 V à
+5 V permettant de couvrir 5 octaves, ou avec une plage de
tension de sortie de 0 V à +10 V permettant de couvrir 8 octaves :
- Do0 (C0) : CV = 0.000 V
- Do1 (C1) : CV = +1,000 V
- Do2 (C2) : CV = +2,000 V
- Do3 (C3) : CV = +3,000 V
- Do4 (C4) : CV = +4,000 V
- Do5 (C5) : CV = +5,000 V
- Do6 (C6) : CV = +6,000 V (interface de sortie
analogique additionnelle requise)
- Do7 (C7) : CV = +7,000 V (interface de sortie
analogique additionnelle requise)
- Do8 (C8) : CV = +8,000 V (interface de sortie
analogique additionnelle requise)
Remarque : certains instruments, pour une tension CV
de 0 V, peuvent jouer une note différente du Do0 (Fa pour le MiniMoog,
par exemple). Cette interface permet de spécifier la valeur de la
première note, qui correspond à une tension de sortie de 0 V (ou
éventuellement une autre valeur).
B - Courbe "Hertz" :
Hertz/Volt
Avec cette courbe, la tension de sortie est doublée à chaque fois
qu'une note
passe d'une octave donnée à l'octave immédiatement supérieure, ce qui
augmente la
"précision" dans les notes les plus aigues. Par exemple (réglage
d'origine) :
- La0 (A0) => CV = 0,125 V
- La1 (A1) => CV = 0,250 V
- La2 (A2) => CV = 0,500 V
- La3 (A3) => CV = 1,000 V
- La4 (A4) => CV = 2,000 V
- La5 (A5) => CV = 4,000 V
- La6 (A6) => CV = 8,000 V (interface de sortie
analogique additionnelle requise)
C - Courbe "User" :
courbe personnalisée
La courbe personnalisée permet de délivrer n'importe quelle tension
comprise entre -15 V et +15 V, de façon individuelle pour chacune des
notes MIDI. Pour aller au-delà de la plage 0 V à +5 V, l'interface de
sortie analogique additionnelle est requise. La courbe personnalisée
peut s'appuyer
sur une base
linéaire Hertz/Volt ou exponentielle Volt/Octave puis
être ensuite ajustée selon les besoins. La procédure de
réglage
n'est
pas détaillée ici (elle est décrite dans le manuel utilisateur complet
qui ne peut être délivré que dans un cadre pro).
Remarque : une plage de tension allant au-delà de la plage -15 V à +15
V est possible,
me contacter
pour détails.
Modes des sorties CV
Chaque sortie CV peut traduire (réagir à) des messages MIDI
variés :
- Hauteur note (Pitch) : la sortie CV reflète la hauteur de
la note selon une courbe Volt/Octave
ou Hertz/Volt.
- Vélocité note (Velocity) : la sortie CV reflète la vélocité
de la note.
- CC (Control Change) : la sortie CV reflète la
valeur du CC.
- PC (Program Change) : la sortie CV reflète la valeur du PC.
Suivi de la hauteur des notes (Pitch)
Dans ce mode, la tension de sortie CV dépend de la hauteur (Pitch) de
la note reçue, sans tenir compte de sa vélocité.
La norme MIDI spécifie une plage de hauteur de note couvrant
les
valeurs de 0 (Do-2) à 127 (Sol8), mais l'utilisateur peut ici spécifier
une plage de fonctionnement plus réduite, par exemple de 33 (LA0) à 69
(LA3).
Suivi de la vélocité des notes (Velocity)
Dans
ce mode, la tension de sortie CV dépend de la "force de frappe"
(Velocity) de la note reçue, sans tenir compte de sa hauteur (Pitch).
La norme MIDI spécifie une plage de vélocité couvrant les
valeurs de 0 à 127. Comme pour la hauteur de note (Pitch),
l'utilisateur peut spécifier
une plage de fonctionnement plus réduite, par exemple de 50 à 100.
Suivi de la valeur des CC (Control Change)
Dans ce mode, la tension de sortie CV dépend de la valeur donnée au
CC#7 (Control Change de volume).
Une valeur comprise entre 1 et 127 peut être utilisée pour modifier la
tension de sortie CV.
Une valeur de 0 provoque la remise à zéro de la sortie CV (tension
nulle).
Remarque
: dans une version future, il sera possible de spécifier le numéro de
CC désiré.
Suivi de la valeur des PC (Program Change)
Dans ce mode, la tension de sortie CV dépend de la valeur donnée au PC
(Program Change).
Une valeur comprise entre 1 et 127 peut être utilisée pour modifier la
tension de sortie CV.
Une valeur de 0 provoque la remise à zéro de la sortie CV (tension
nulle).
Tension de référence des sortie CV
L'utilisateur
peut spécifier la valeur de référence de la tension de sortie CV. Cette
tension de référence correspond à la tension de sortie la plus basse,
délivrée pour la note de départ de l'étendue de jeu (Start note, décrit
au paragraphe suivant).
Généralement,
la tension de référence (de départ) est une tension "entière" (par
exemple 0,0 V ou 1,0 V) quand la courbe de progression choisie est
Volt/octave. Avec cette courbe de progression Volt/octave, le
réglage de la tension de
référence peut se faire entre 0,000 V (0 mV)
et
4,000 V (4000 mV), par
pas de 5 mV.
Avec
une courbe de progression Hertz/Volt, il faut se rappeler que
la
tension de sortie CV est doublée pour chaque octave
supérieure. Si
par exemple la tension de sortie CV est de 0,125 V pour le
La0,
alors elle sera de 0,250 V pour le La1, de 0,500 V
pour le
La2 ou encore de 1,000 V pour le La3.
Avec
cette courbe de progression Hertz/Volt, le réglage de la
tension
de référence peut se faire entre 0,005 V (5 mV) et
4,000 V (4000 mV), par pas de 5 mV.
Remarques
:
- En progression
Hertz/Volt, la tension de référence Vref ne peut pas être égale
à 0,000 V. La tension minimum est de 5 mV.
- Avec une tension de référence très basse (inférieure à 50
mV), la précision dans les notes graves est fortement diminuée. Une
valeur minimale de départ de 125 mV est conseillée.
Décalage (offset) du DAC
Du fait de la tolérance des composants électroniques, une
conversion numérique-analogique peut ne pas être "parfaite"
et on peut observer un petit décalage de la tension de sortie désirée,
par exemple 1,998 V au lieu de 2,000 V. Un tel décalage, quand il est
de même proportion sur toute la plage de réglage, se compense
facilement, soit au niveau logiciel (avant conversion), soit au niveau
matériel (après conversion). Avec cette interface, il est possible
d'agir des deux façons :
- Correction au
niveau matériel: le gain de l'étage de sortie analogique
peut être ajusté de 0% à +300%
- Correction au
niveau logiciel : l'utilisateur peut spécifier une
correction allant de -1,20% à +1,20% par pas de 0,01%
Remarque :
le décalage opéré de façon logicielle est proportionnel à la note
jouée. Dans l'absolu, il est plus élevé pour les notes aigues que pour
les notes graves. Un décalage global (uniforme, de même valeur) peut
être obtenu au niveau matériel.
Etendue de jeu (Range)
L'étendue (la plage) de jeu est définie par une note de départ
(Start Pitch) et une
note de fin (End Pitch). La
note de début de plage peut prendre une valeur comprise entre 0 et 126,
les notes inférieures à la valeur spécifiée pour la note de départ
provoquent la mise à zéro de la sortie CV.
La
note de fin de plage peut prendre une valeur comprise entre 1 et 127.
Les notes supérieures à la valeur spécifiée ne sont pas traitées.
Selon le
mode CV choisi (Pitch, Vel, CC ou PC), l'écran ci-devant se présente
différement :
Sélection du port MIDI et du canal MIDI
Le paramètre MIDI In permet de sélectionner l'une des 2
entrées MIDI (017d-2 avec PIC18) ou l'une des 4 entrées MIDI (017d-4
avec PIC32).
Quant à la sélection du canal MIDI, elle permet
de choisir le canal dont les notes doivent être
traitées. Quand le mode Omni est
choisi, la sortie CV prend en compte toutes les notes MIDI quelque soit
leur canal MIDI.
Il est
possible de sélectionner le même port et le même canal MIDI pour
plusieurs sorties CV,
avec des courbes identiques ou différentes pour chaque voie CV. Le
graphe ci-après montre
un exemple avec les deux sorties CV1 et CV2 qui réagissent
toutes
deux aux évènements MIDI reçus sur le même canal MIDI n°1 (6 notes).
La sortie CV1 a une courbe volt/octave et la
sortie CV2
a une courbe Hertz/volt.
Cela offre la possibilité, par exemple, de piloter deux synthés
différents avec un unique clavier maître (avec un séquenceur, il serait
sans doute plus judicieux de copier des pistes, auxquelles on
attribuerait des
canaux MIDI différents).
Configuration du signal Trigger
Il est possible de spécifier la polarité (Trig Pol) et la
durée (Trig Len) des impulsions Trigger.
En
sélectionnant la polarité "Normal", les impulsions de la sortie Trigger
sont en logique positive (état bas au repos, état haut en activité).
En sélectionnant la polarité "Invert", les impulsions de la sortie
Trigger sont en logique négative (état haut au repos, état bas en
activité).
La durée de l'impulsion Trig est réglable entre 100 us et 9900 us, par
pas de
100 us.
Configuration du signal Gate
Il est possible de spécifier la polarité (Gate Pol) et la
durée (Gate Off) des impulsions Gate.
En
sélectionnant la polarité "Normal", les impulsions de la sortie Gate
sont en logique positive (état bas au repos, état haut en
activité).
En sélectionnant la polarité "Invert", les impulsions de
la sortie Gate sont en logique négative (état haut au repos, état bas
en
activité).
La
fonction GateOff forcée peut être activée (durée > 0
us) ou désactivée (durée = 0 us). Quand elle est
activée, sa valeur peut être comprise entre 100 us et 9900 us, réglable
par pas de 100 us.
Notes séparées ou liées
Quand les notes reçues sont détachées (une seule note à la fois), la
sortie Gate se désactive et la tension de sortie CV repasse à zéro à
chaque réception d'un événement NoteOff.
Exemple
de notes détachées, échelle "hertz" pour CV1 et
"octave" pour CV2
Quand les notes reçues sont liées (une nouvelle note est jouée alors
que la précédente n'est pas encore relâchée), la sortie Gate reste
active durant la "transition" et la sortie CV change de valeur sans
repasser par zéro.
Exemple
de notes liées, échelle "hertz"
pour CV1 et "octave" pour CV2
En cas de réception de plusieurs notes "simultanées", c'est toujours la
dernière reçue qui met à jour la tension de sortie CV.
GateOff forcé
L'interface peut être configurée pour que
la sortie Gate se désactive pendant un très bref instant
(par exemple pendant 500 us) lors de l'arrivée d'une nouvelle
note alors
qu'une note est déjà en cours de jeu.
Exemple
de notes liées, mais avec GateOff forcé (voir trace Gate1)
Interface de sortie analogique additionnelle
L'étage de sortie additionnel délivrant les tensions
analogiques CV a été
conçu
pour pouvoir fonctionner avec plusieurs plages de tension d'entrée
positives (par exemple 0 à +5 V qui est la plus commune) et
permet de délivrer une
tension dans une plage allant d'une valeur nulle (0 V) à une valeur
positive (+16 V maximum), ou d'une valeur négative (-16 V maximum) à
une valeur positive (+16 V maximum). Le taux d'amplification de la
plage est ajustable, il est également possible d'appliquer un offset
pour décaler la plage entière (ajustage du zéro).
Sauvegarde des modifications
L'ensemble des paramètres de chaque voie CV peut être
sauvé en
mémoire interne EEPROM (seules les configurations dont les paramètres ont été modifiés sont sauvegardées).
Reset total
Pour
réinitialiser tous les paramètres avec leur valeur d'origine, presser
simultanément les deux boutons-poussoirs Down et UP au moment de la
mise sous tension de l'interface.
Alimentation
La section microcontrôleur est alimentée
sous +5 V et
l'étage de sortie analogique est alimenté sous une tension symétrique
de +/18 V. Bien évidement, les circuits intégrés analogiques
choisis pour cet étage de sortie supportent sans broncher cette tension
sur le long
terme ;)
Prototype
Prototype réalisé en grande partie sur plaque
d'expérimentation sans
soudure. Pour les DAC testés uniquement disponibles en version
CMS, j'ai utilisé des adaptateurs CMS->DIL.
Version |
Simulation |
Prototype |
Interface MIDI 017d-1
(avec PIC18-DIP-28) |
|
|
Interface MIDI 017d-2
(avec PIC18-CMS-64) |
|
|
Interface MIDI 017d-4
(avec PIC32-CMS-64) |
|
|
La procédure de test consiste à vérifier
les courbes Volt/Octave et Hertz/Volt sur plusieurs
sorties CV. Le
tableau ci-après recense les tensions mesurées sur mon premier
prototype version 017d-1, pour les quatre configurations suivantes :
- CV1 Mes #1
: Volt/octave - plage Do0 à Do5 - valeurs mesurées sur sortie CV1 sans correction (offset DAC = 0)
- CV1 Mes #2
: Volt/octave - plage Do0 à Do5 - valeurs mesurées sur sortie CV1 avec correction (offset DAC = +0.10%)
- CV2 Mes #1
: Hertz/volt - plage La0 à La5 - valeurs mesurées sur sortie CV2 sans correction (offset DAC = 0)
- CV2 Mes #2
: Hertz/volt - plage La0 à La5 - valeurs mesurées sur sortie CV2 avec correction (offset DAC = +0.10%)
Note
MIDI |
|
|
CV1
(Mes #1)
Volt/Octave
sans correction
|
CV1
(Mes #2)
Volt/Octave
correction +0.10%
|
CV2
(Mes #1)
Hertz/Volt
sans correction
|
CV2
(Mes #2)
Hertz/Volt
correction +0.10%
|
|
Do0 (C0) MIDI $18 |
Mesuré |
|
0.001
V |
0.001 V |
-
|
-
|
|
Attendu |
|
0.000
V |
0.000
V |
|
|
|
Ecart |
|
+0.10% |
+0.10% |
|
|
|
La0
(A0) MIDI $21 |
Mesuré |
|
-
|
-
|
0.125
V |
0.125
V |
|
Attendu |
|
|
|
0.125
V |
0.125
V |
|
Ecart |
|
|
|
0.00% |
0.00% |
|
Do1
(C1) MIDI $24 |
Mesuré |
|
0.999
V |
1.000
V |
-
|
0.150 V
|
|
Attendu |
|
1.000
V |
1.000
V |
|
|
|
Ecart |
|
-0.10% |
0.00% |
|
|
|
La1
(A1) MIDI $2D |
Mesuré |
|
-
|
-
|
0.250
V |
0.250
V |
|
Attendu |
|
|
|
0.250
V |
0.250
V |
|
Ecart |
|
|
|
0.00% |
0.00% |
|
Do2
(C2) MIDI $30 |
Mesuré |
|
1.998
V |
2.000
V |
-
|
0.298 V
|
|
Attendu |
|
2.000
V |
2.000
V |
|
|
|
Ecart |
|
-0.10% |
0.00% |
|
|
|
La2
(A2) MIDI $39 |
Mesuré |
|
-
|
-
|
0.500 V |
0.500
V |
|
Attendu |
|
|
|
0.500
V |
0.500
V |
|
Ecart |
|
|
|
0.00% |
0.00% |
|
Do3
(C3) MIDI $3C |
Mesuré |
|
2.997
V |
3.000
V |
-
|
0.596 V
|
|
Attendu |
|
3.000
V |
3.000
V |
|
|
|
Ecart |
|
-0.10% |
0.00% |
|
|
|
La3
(A3) MIDI $45 |
Mesuré |
|
-
|
-
|
0.999 V |
1.000
V |
|
Attendu |
|
|
|
1.000
V |
1.000
V |
|
Ecart |
|
|
|
-0.10% |
0.00% |
|
Do4
(C4) MIDI $48 |
Mesuré |
|
3.996
V |
4.000
V |
-
|
1.190 V
|
|
Attendu |
|
4.000
V |
4.000
V |
|
|
|
Ecart |
|
-0.10% |
0.00% |
|
|
|
La4
(A4) MIDI $51 |
Mesuré |
|
-
|
-
|
1.998
V |
2.000
V |
|
Attendu |
|
|
|
2.000
V |
2.000
V |
|
Ecart |
|
|
|
-0.10% |
0.00% |
|
Do5
(C5) MIDI $54 |
Mesuré |
|
4.994
V |
4.994
V |
-
|
2.380 V
|
|
Attendu |
|
5.000
V |
5.000
V |
|
|
|
Ecart |
|
-0.12% |
-0.12% |
|
|
|
La5
(A5) MIDI $5D |
Mesuré |
|
-
|
-
|
3.996
V |
4.000
V |
|
Attendu |
|
|
|
4.000
V |
4.000
V |
|
Ecart |
|
|
|
-0.10% |
0.00% |
|
Remarque
- La
valeur max de sortie du DAC utilisé pour les valeurs reportées dans le
tableau ci-devant est ici de 2,497 V pour le code 65535 et une
référence
de
tension supposée de +2V500 (la tension en sortie du DAC est
ensuite multipliée par 2 par l'étage de sortie analogique). L'écart
entre la tension de référence supposée (2.500 V) et la valeur mesurée
de 2,497 V montre un écart de 0.12%, qui est compensée par
l'offset du DAC ajustable par l'utilisateur. Les résultats sont déjà très bons
avant correction, ils sont excellents après correction.
- Plus on amplifie la tension issue du DAC avec
l'interface
de
sortie analogique additionnelle et plus
l'écart de tension entre la valeur de la tension attendue et celle de
la tension réellement obtenue augmente, cela est tout à fait normal. Notons toutefois
qu'avec
la grande précision de la tension de sortie dont on dispose ici, cela
ne pose aucun problème...
Logiciel du PIC
Pro - Interface
développée dans un cadre pro, logiciel non disponible en
libre accès.
Circuit imprimé
Réalisé en double face.
Historique
27/09/2020
- Première mise à disposition.