Dernière mise à jour :
09/10/2011
Présentation
Cette interface MIDI permet de piloter huit potentiomètres numériques
de type MCP41xxx (10 kO, 50 kO ou 100 kO) à partir d'événements
MIDI de type
Note On.
En remplaçant les potentiomètres classiques d'équipements
analogiques tels que filtres ou effets spéciaux, il devient possible de
changer les paramètres qui y sont liés par des commandes MIDI. Ainsi,
en connectant un des potentiomètres numériques de cette interface MIDI
010 à la place du potentiomètre qui permet de modifier le temps de
retard sur une chambre d'écho, on peut ajuster le temps de retard via
de simples notes MIDI, émises en temps réel ou provenant d'un
séquenceur logiciel ou matériel. Et en connectant un ou plusieurs des
potentiomètres numériques à la place de potentiomètres qui permettent
de modifier le comportement d'un filtre analogique (fréquence de
coupure, fréquence centrale, largeur de bande, atténuation /
amplification) on peut piloter ce filtre par commandes MIDI. Pour une
commande de volume où l'élément de réglage est complètement isolé de la
section de commande MIDI, voir page
Interface MIDI 023.
Avertissements
- Les
potentiomètres numériques sont implémentés dans des circuits intégrés
dont les limites de fonctionnement ne sont pas les mêmes que celles des
potentiomètres standard. Un potentiomètre standard ne peut pas être
remplacé dans tous les cas par un potentiomètre numérique, il vous faut
analyser le schéma électronique de l'appareil à modifier pour savoir si
cela est possible (merci de ne pas m'envoyer le schéma en question pour
me demander si cela est faisable, je n'en aurai pas le temps). Le
montage décrit ici suppose que les potentiomètres numériques employés
(de valeur 10 kO, 50 kO ou 100 kO) peuvent convenir à votre
application. A retenir : la tension maximale à appliquer sur les
broches PAx, PWx et PBx des potentiomètres numériques employés ici ne
doit pas excéder la valeur de leur tension d'alimentation, à savoir +5
V par rapport à la masse. Si vous avez le moindre doute, merci de vous
documenter auprès du fabricant de la machine concernée ou de poser vos
questions dans des forums spécialisés.
- Cette interface a été
simulée avec succès mais n'a pas été mise en oeuvre pratiquement. Ceci
dit tout ce qui concerne la partie réception MIDI fonctionne bien,
c'est la même que celle utilisée dans mes interfaces MIDI 007 et 009.
Schéma
Le schéma montre qu'il est fait usage d'un
microcontrôleur, ce qui ne devrait surprendre personne du fait qu'il
n'est pas très aisé de faire autrement quand il s'agit de gérer des
évenements MIDI et de piloter des potentiomètres numériques.
Heureusement le modèle employé est fort répendu, peu coûteux et
largement bien distribué. Oui, c'est encore un 16F628A.
Fonctionnement général
Le PIC réceptionne les évenements MIDI
via une entrée au standard MIDI. Si les évenements reçus sont des
notes, le logiciel du PIC les analyse en détail. S'il s'agit des notes
attendues (Do3 à Do4 sans les altérations), le logiciel en extrait
leurs valeurs de hauteur (pitch) et de vélocité. Si la vélocité est
égale à 0, l'évenement MIDI reçu est ignoré (explication donnée plus
loin), sinon sa valeur est utilisée pour configurer le potentiomètre
qui est rattaché à la note reçue (correspondance indiquée ci-après).
Correspondance entre notes MIDI reçues et potentiomètres
L'interface
MIDI 010 comporte huit potentiomètres numériques totalement
indépendants, qui peuvent être piloté par les notes MIDI suivantes :
- Do3 : potentiomètre N°1
- Re3 : potentiomètre N°2
- Mi3 : potentiomètre N°3
- Fa3 : potentiomètre N°4
- Sol3 : potentiomètre N°5
- La3 : potentiomètre N°6
- Si3 : potentiomètre N°7
- Do4 : potentiomètre N°8
La
valeur (position) de chaque potentiomètre numérique est définie par la
vélocité de la note reçue. Une valeur de vélocité de 1 correspond à la
valeur minimale du curseur du potentiomètre numérique et une valeur de
vélocité de 127 correspond à la valeur maximale du curseur. La valeur
de vélocité 0 n'a pas été retenue car un évenement de type NoteOff peut
être constitué d'un NoteOn avec valeur de vélocité 0. Comme la valeur
de vélocité d'une note MIDI se trouve dans la plage 0..127 et que
les potentiomètres numériques utilisés ici ont une résolution de 8 bits
(256 valeurs), j'ai procédé comme suit :
- si valeur vélocité = 0, alors évenement MIDI ignoré.
- si valeur vélocité = 1, alors valeur envoyée au potentiomètre numérique = $00 (valeur minimale 0).
- si
valeur vélocité comprise entre 2 et 126, alors valeur envoyée au
potentiomètre numérique = valeur vélocité x 2 (valeur comprise entre 4
et 252).
- si valeur vélocité = 127, alors valeur envoyée au potentiomètre numérique = $FF (valeur maximale 255).
Quelques exemples :
- Si réception note Do3 avec vélocité de 16 ($10), alors curseur du
potentiomètre N°1 positionné à la valeur 32 ($20).
- Si réception note Re3 avec vélocité de 1 ($01), alors curseur du
potentiomètre N°2 positionné à la valeur 0 ($00).
- Si
réception note Fa3 avec vélocité de 64 ($40), alors curseur
du potentiomètre N°4 positionné à la valeur 128 ($80).
- Si réception note Si3 avec vélocité de 88 ($58), alors curseur du potentiomètre N°7 positionné à la valeur 176 ($B0).
- Si réception note Si3 avec vélocité de 127 ($7F), alors curseur du potentiomètre N°7 positionné à la valeur 255 ($FF).
Remarque : il y a aussi la possibilité d'utiliser deux notes MIDI différentes
pour profiter pleinement de la résolution de 8 bits des potentiomètres.
Une première note pour la plage 0..127 et une seconde note pour la
plage 128..255. J'ai décidé de ne pas procéder comme ça, tout du moins
dans un premier temps.
Circuit d'horloge / base de temps
Les
lignes
RA7/OSC1 et RA6/OSC2 du PIC sont utilisées pour y connecter un
quartz de 8 MHz avec ses deux condensateurs de
pieds reliés à la masse. Le circuit pourrait aussi fonctionner avec
l'horloge interne de 4 MHz, mais avec une fiabilité moindre.
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 de rappel R2 reliée au
+5 V. Les
données MIDI ainsi mises en forme aboutissent à l'entrée RB1/RX du PIC.
Lors de l'arrivée de données MIDI de type Note On, la LED D4 s'illumine
pendant quelques dizaines de ms, même si les notes reçues ne sont pas
gérées par la suite. Juste pour donner une indication visuelle de
la bonne réception des données MIDI, ce qui peut s'avérer utile pour localiser
tout problème éventuel.
Choix du canal MIDI de réception
Pour cette application les
événements MIDI d'entrée sont tous réglés sur le canal
MIDI 1, on ne peut pas modifier cette valeur. Cela signifie que des
notes reçues avec un canal MIDI différent de 1 seront ignorées. Il est
bien sûr possible de modifier le logiciel du PIC pour que les notes
soient acceptées quelque soit le numéro de canal MIDI, il suffit de me
le demander ;-) On pourrait aussi envisager d'utiliser la broche RA5
actuellement non utilisée pour spécifier si le numéro de canal MIDI à
oui ou non une importance, mais j'ai comme qui dirait déjà pensé à
utiliser cette broche pour adaptation future à d'autres types de
potentiomètres numériques.
Envoi des données aux potentiomètres numériques
Le
positionnement du curseur de chaque potentiomètre numérique est défini
par l'envoi d'une valeur comprise entre 0 et 255, selon un mode série
de type "SPI". Les lignes de données et de signal d'horloge spécifiques
à ce mode de transmission série sont ici matérialisées par les lignes
appelées SPI_Data et SPI_Clock sur le schéma. Pour qu'un des huit
potentiomètres accèpte de recevoir les données transmises sur le bus
(tous les potentiomètres sont câblés en parallèle du point de vue de
ces deux lignes SPI), sa broche CS (Chip Select) doit être portée à un
état logique bas. Au repos, toutes les lignes CS (CS1 à CS8)
sont à l'état haut et aucun des potentiomètres n'est donc apte à
recevoir les informations véhiculées sur les lignes SPI_Data et
SPI_Clock. Quand une note MIDI reçue correspond à l'une de celles
attendues (pour rappel Do3 à Do4), la ligne CSx correspondante est
activée et passe temporairement à l'état logique bas. Pendant ce temps
précis, les données de commande et de valeur qui permettent de
spécifier la position du curseur du potentiomètre sélectionné sont
transmises. Les potentiomètres MCP41xxx réclament deux octets
pour accépter les informations reçues : un octet de "commande" et
un octet de "valeur". Dans le cas qui nous concerne, la valeur de
l'octet de commande est figé et vaut toujours $11 (00010001). L'octet
de valeur contient quant à lui la valeur vue précédement, qui dépend de
la vélocité de la note MIDI reçue. L'octet de commande est envoyé en
premier avec le bit de poids fort (MSB) en première position, puis
vient ensuite l'octet de valeur, lui aussi transmis avec son bit de
poids fort (MSB) en première position. Le graphe qui suit montre ce
qu'on obtient quand la note MIDI Do3 est reçue (activation CS1,
potentiomètre N°1).
La
légère irrégularité temporelle que l'on peut observer entre chaque
impulsion d'horloge (ligne Spi_Clock) est liée au fait que j'ai utilisé
une routine faite maison et fort simplifiée pour l'envoi des données.
Le fonctionnement n'en est nullement affecté.
Alimentation
L'alimentation du PIC est de +5 V et on peut se
contenter d'une alim simple basée sur un régulateur de tension
de
type LM7805 ou 78L05 comme celle décrite à la page
Alim
simple 001.
Pour vous simplifier la tâche, la partie régulation est prévue tant au
niveau schéma qu'au circuit imprimé, il ne vous restera plus qu'à vous
procurer un bloc secteur dont la tension de sortie est comprise entre
+9 V et +15 V. La consommation
globale du circuit est relativement faible puisque inférieure
à 50
mA, vous pouvez donc adopter une alimentation secteur de très petite
taille dont le courant maximal pourra n'être que de 100 mA. La tension
du bloc secteur doit arriver sur le connecteur J2 : masse alimentation
(0 V) sur la broche 1 de J2 et pôle positif de l'alimentation
sur
la broche 2 de J2. La diode D2
protège le circuit contre
toute inversion de polarité accidentelle de la source de
tension. Le condensateur C5 trouve sa place sur le circuit imprimé
juste en dessous du PIC 16F628A (entre les broches 5 et 14) et les
condensateurs C6 à C13 se positionnent sous chaque potentiomètre
numérique (entre les broches 4 et 8). Vous pouvez tout aussi bien
utiliser pour ces neuf condensateurs, des modèles bas profil qui se
feront tout petits sous le support de CI 8 broches des potentiomètres,
ou des CMS qui seront dans ce cas soudés directement côté cuivre.
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. Ici on s'en fiche puisqu'il n'y a pas de prise MIDI OUT.
Logiciel du PIC
Le fichier binaire compilé (*.hex) et les codes source (format MikroPascal) est
disponible
dans l'archive dont le lien suit.
Interface
MIDI 010 - PIC 16F628A - Version du 09/10/2011
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
09/10/2011
-
Première mise à disposition.