Electronique > Réalisations > Interfaces > Interfaces MIDI > Interface MIDI 017d - Pro

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.


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


Caractéristiques techniques principales

Généralités :

Pour chaque sortie CV 1 à 8 :

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.


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


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


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


interface_midi_017x_graphe_002a

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

interface_midi_017x_menu_cv-curve_001a  interface_midi_017x_menu_cv-curve_001b  interface_midi_017x_menu_cv-curve_001c  

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 :


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

interface_midi_017x_menu_cv-mode_001a  

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

interface_midi_017x_menu_cv-mode_001b  

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

interface_midi_017x_menu_cv-mode_001c  

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

interface_midi_017x_menu_cv-mode_001d  

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.
 
interface_midi_017x_menu_cv-vref_001a  interface_midi_017x_menu_cv-vref_001b  

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.

interface_midi_017x_menu_cv-vref_001c  interface_midi_017x_menu_cv-vref_001d  

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 :



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 :


interface_midi_017x_menu_cv-offset_001a  interface_midi_017x_menu_cv-offset_001b  interface_midi_017x_menu_cv-offset_001c  

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.


interface_midi_017x_menu_start-pitch_001a  interface_midi_017x_menu_start-pitch_001b  

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.

interface_midi_017x_menu_end-pitch_001a  interface_midi_017x_menu_pitch_001b  

Selon le mode CV choisi (Pitch, Vel, CC ou PC), l'écran ci-devant se présente différement :

interface_midi_017x_menu_start-vel_001a  interface_midi_017x_menu_start-cc_001a  interface_midi_017x_menu_start-pc_001a  


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


interface_midi_017x_menu_midi-in_001a  interface_midi_017x_menu_midi-in_001b

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.

interface_midi_017x_menu_midi-ch_001a  interface_midi_017x_menu_midi-ch_001b  interface_midi_017x_menu_midi-ch_001c  

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.

interface_midi_017x_graphe_003a

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

interface_midi_017x_menu_trig-pol_001a  interface_midi_017x_menu_trig-pol_001b  

La durée de l'impulsion Trig est réglable entre 100 us et 9900 us, par pas de 100 us.

interface_midi_017x_menu_trig-len_001a  interface_midi_017x_menu_trig-len_001b  


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

interface_midi_017x_menu_gate-pol_001a  interface_midi_017x_menu_gate-pol_001b  

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. 

interface_midi_017x_menu_gate-len_001a  interface_midi_017x_menu_gate-len_001b  interface_midi_017x_menu_gate-len_001c  

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.

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

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

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


interface_midi_017x_menu_save_001a  interface_midi_017x_menu_save_001b  

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.


interface_midi_017d-1_proto_001a_tn interface_midi_017d-1_proto_001b_tn interface_midi_017d-1_proto_001c_tn

Version Simulation Prototype
Interface MIDI 017d-1 (avec PIC18-DIP-28) check_ok check_ok
Interface MIDI 017d-2 (avec PIC18-CMS-64) check_ok check_nok
Interface MIDI 017d-4 (avec PIC32-CMS-64) check_nok check_nok

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 :


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é check_ok 0.001 V 0.001 V -
-

Attendu 0.000 V 0.000 V
Ecart +0.10% +0.10%
La0
(A0)
MIDI $21
Mesuré check_ok -
-
0.125 V 0.125 V
Attendu 0.125 V 0.125 V
Ecart 0.00% 0.00%
Do1
(C1)
MIDI $24
Mesuré check_ok 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é check_ok -
-
0.250 V 0.250 V
Attendu 0.250 V 0.250 V
Ecart 0.00% 0.00%
Do2
(C2)
MIDI $30
Mesuré check_ok 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é check_ok -
-
0.500 V 0.500 V
Attendu 0.500 V 0.500 V
Ecart 0.00% 0.00%
Do3
(C3)
MIDI $3C
Mesuré check_ok 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é check_ok -
-
0.999 V 1.000 V
Attendu 1.000 V 1.000 V
Ecart -0.10% 0.00%
Do4
(C4)
MIDI $48
Mesuré check_ok 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é check_ok -
-
1.998 V 2.000 V
Attendu 2.000 V 2.000 V
Ecart -0.10% 0.00%
Do5
(C5)
MIDI $54
Mesuré check_ok 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é check_ok -
-
3.996 V 4.000 V
Attendu 4.000 V 4.000 V
Ecart -0.10% 0.00%

Remarque

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.