Dernière mise à jour :
28/01/2014
Présentation
Cette interface MIDI dispose d'une entrée MIDI IN, de 3
entrées
logiques et d'une sortie MIDI OUT.
Elle a été conçue à la demande d'un professionnel pour s'intercaler
entre une guitare MIDI et un
expandeur, et permet d'envoyer des Program Change avec des commandes au
pieds (pédale). Le cachier des charges était le suivant :
- Les données MIDI entrantes (venant de la guitare) devaient
passer en toute transparence, sans filtrage.
- Les
commandes de Program Change (destinées à modifier le numéro de
programme de l'expandeur) devaient pouvoir être envoyées :
. de façon directe avec deux boutons-poussoir Up et Down (mode
Live)
. après recherche du numéro à envoyer (mode Search/Prepare).
- La
pression sur les boutons-poussoirs devait bénéficier d'une fonction
d'auto-répétition. Les délais d'anti-rebond (T0), d'attente avant
auto-répétition (T1) et d'attente entre répétitions (T2) devaient être
ajustables.
- Le
canal MIDI des données émises devait pouvoir être figé à une valeur
quelconque, ou être copié sur les derniers messages MIDI entrants.
- Reprogrammation possible in-situ (ICSP) via un connecteur 5
points standard.
Schéma
Le coeur du montage est un microcontrôleur
PIC 18F45K22 cadencé par un quartz
externe de 12
MHz.
Fonctionnement général
Les données MIDI qui arrivent à la
queue-leu-leu sur l'entrée MIDI IN
sont traitées octet par octet et se retrouvent en sortie, sans
aucun filtrage. Pour limiter tout risque de perte de données, j'ai
implémenté une mémoire tampon (buffer circulaire) de 255
octets.
Un
affichage numérique permet de visualiser le numéro de Program Change à
envoyer (affichage au choix de la plage 0 à 127 ou 1 à 128).
Trois
boutons-poussoirs (au pied) permettent d'utiliser le système en gardant
les mains libres (principe de toutes les pédales d'effets ou de
commande) :
- bouton Up, qui permet d'incrémenter le numéro de Program
Change à envoyer sur la sortie MIDI
- bouton Down, qui permet de décrémenter le numéro de Program
Change à envoyer sur la sortie MIDI
- bouton Live/Search, qui permet de passer du mode Live au
mode Search en mode "bascule" :
.
mode live : mode par défaut, à la mise en route. A chaque fois que l'on
presse les boutons Up ou Down, le numéro de Program Change est mis à
jour sur l'afficheur et est envoyé sur la sortie MIDI OUT.
. mode
Search (préparation) : dans ce mode, l'affichage clignote et le numéro
de Program Change est mis à jour sur l'afficheur, mais il n'est pas
envoyé sur la sortie MIDI OUT. Cela permet de passer de n'importe quel
numéro de programme à n'importe quel autre sans envoyer tous les
numéros de Program Change situés entre les deux. L'envoi effectif du
message de Program Change a lieu lors du retour en mode Live.
Remarque
concernant l'affichage du numéro de programme : il peut au
choix
être compris entre 0 et 127 ou 1 et 128, mais dans tous les
cas
les numéros envoyés dans les messages MIDI se situent dans la plage 0 à
127.
Circuit d'horloge / base de temps
Les
lignes
RA7/OSC1 et RA6/OSC2 du PIC sont monopolisées pour y connecter
un
quartz de 12 MHz avec deux condensateurs céramiques
de
faible valeur (22 pF / 63 V). Une interruption est déclenchée toutes
les 5 ms (fréquence 200 Hz) par le timer T0 pour rythmer le
multiplexage de l'affichage. Une vérification peut être effectuée sur
la broche 18 du PIC (RC3), qui change d'état à chaque nouvellle
interruption.
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) 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 permet de récupérer le signal MIDI
au
format TTL, grâce à la présence de la résistance de charge
collecteur R2 reliée au +5 V. Les
données MIDI mises en forme aboutissent à l'entrée RC7/RX1 du
PIC. L'entrée RX2 du second UART du PIC n'est pas utilisée. Quand des
événements MIDI (notes ou autres) arrivent sur
l'entrée RX1, la LED Rx s'allume brièvement.
Sorties MIDI
La sortie MIDI (broche RC6/TX1 du PIC) délivre
brièvement une note MIDI C3 (Do3) lors de l'initialisation du
circuit,
ce qui permet à la mise sous tension de vérifier que
tout démarre bien. Après l'initialisation, la sortie MIDI
délivre les données MIDI qui entrent ou les messages de
Program Change demandés par l'utilisateur.
Affichage
L'affichage du numéro de programme s'effectue à l'aide des trois
afficheurs à
LED sept segments AFF1 à AFF3 de type cathode commune (CC),
selon le
mode
multiplexé
: les afficheurs s'allument à tour de rôle (toujours un seul à la
fois), à un rythme suffisant pour que l'oeil n'y voit que du feu. Cela
permet de réduire la consommation globale ainsi que le nombre de fils
de liaison entre le PIC et l'ensemble des segments. La vitesse de
raffraichissement général est de 200 Hz, soit 66 Hz par
afficheur, chaque afficheur est activé ou désactivé par un transistor
utilisé en commutateur et qui amène le point commun (CC,
cathode
commune) à la masse quand il le faut. La plage d'affichage du numéro de
programme dépend de la valeur donnée au paramètre D (voir paragraphe
suivant), mais quelque soit la plage d'affichage choisie, la plage des
messages
envoyée est toujours 0 à 127.
Réglages/programmation (préférences utilisateur)
La
modification des paramètres utilisateur se fait en entrant dans le mode
"Program". Pour y entrer, le bouton-poussoir Live/Search doit
être
maintenu enfoncé au moment de la mise sous tension. A ce moment,
l'affichage indique "Pr-" (Program). Après relâchement du poussoir
Live/Search, l'affichage est composé d'une lettre et de deux chiffres,
selon code suivant :
- Axx = réglage de la
durée d'anti-rebond pour tous les boutons-poussoirs. Valeur ajustable
de 1 à 99, multiple de 5 ms (la valeur 10 correspond à 50 ms, la valeur
40 correspond à 200 ms). Cette durée correspond au temps minimum
pendant lequel un bouton-poussoir doit être enfoncé pour que l'action
soit prise en compte. Par défaut, la valeur est fixée à 20
(100
ms).
- Bxx = réglage du temps de pression nécessaire pour
activer l'auto-répétition (boutons Up et
Down). Valeur
ajustable de 1 à 99, multiple de 20 ms (la valeur 10 correspond à 200
ms, la valeur 50 correspond à 1 s). Par défaut, la valeur est
fixée à 50
(1 s).
- Cxx
= réglage du temps entre chaque répétition (boutons Up et
Down). Valeur ajustable de 1 à 99, multiple de 5 ms (la valeur
10
correspond à
50 ms, la valeur 50 correspond à 250 ms). Par défaut, la valeur est
fixée à 20
(100 ms).
- Dxx
= réglage de la plage d'affichage du numéro de programme. La valeur 0
correspond à la plage 0 à 127, et la valeur 1 correspond à la plage 1 à
128.
- Exx
= réglage du canal MIDI pour les données sortantes.
Valeur ajustable
de 0 à 16. Si valeur 0, alors le canal MIDI des données
délivrées
par l'interface correspond au numéro de canal du dernier événement reçu
sur l'entrée MIDI IN (canal 1 tant qu'aucune donnée n'est reçue). Une
valeur comprise entre 1 et 16 fige le numéro de canal à la valeur
spécifiée et le numéro de canal des événements MIDI entrants n'est pas
pris en compte.
Chaque nouvelle pression sur le bouton Live/Search permet de
passer au paramètre suivant, et le réglage de la valeur du paramètre en
cours se fait avec les boutons Up et Down. Pour sortir du mode Program
et revenir au mode Live, deux options
possibles :
-
redémarrer l''interface sans aucun bouton-poussoir enfoncé, et dans ce
cas les modifications ne sont pas conservées (retour aux précédentes
valeurs);
- ou presser le bouton Live/Search puis en maintenant
ce dernier enfoncé, presser le bouton Up ou Down. Dans ce cas,
les
dernières valeurs sont enregistrées en EEProm (affichage PrS) et seront
rappelées au prochain démarrage.
|
Entrée dans le mode
"program" pour modification des paramètres utilisateur. |
|
Paramètre A = délai
anti-rebonds, ici 100 ms (20 * 5 ms) |
|
Paramètre B = délai
avant auto-répétition, ici 1 s (50 * 20 ms) |
|
Paramètre C = délai
entre répétitions, ici 125 ms (25 * 5 ms) |
|
Paramètre D = plage
d'affichage du numéro de programme, ici plage 1 à 128 |
|
Paramètre E = canal
MIDI, ici fixé à la valeur 1 |
|
Enregistrement des
nouvelles valeurs |
|
Retour au mode Live
(affichage programme #001 pour valeur Program Change #000) |
Alimentation
Un
régulateur de tension de +5 V (LM7805) est prévu directement sur le
circuit
(U3), ce qui permet d'alimenter cette interface / filtre avec n'importe
quel bloc d'alimentation secteur délivrant une tension comprise entre
+9 V et +15 V.
La
consommation moyenne est limitée du fait du
multiplexage utilisé pour l'affichage du numéro de programme, mais elle
peut
toutefois atteindre 100 mA en crête. Pour cette raison, le régulateur
de tension est un LM7805 et non un 78L05. Une diode de protection
insérée en série dans l'entrée protège l'ensemble en cas d'inversion
accidentelle de la polarité du bloc secteur utilisé. Les deux
condensateurs C3 et C4 assurent un filtrage local suffisant pour un
fonctionnement correct du régulateur de tension et du microcontrôleur.
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
Réalisé et testé avec ma platine EasyPic7, mon
logiciel de test
MidiTest
et mon
contrôleur/générateur
de test MIDI 005.
Au début en y allant doucement avec juste quelques notes jouées sur
un clavier pour vérifier que ça passait bien, puis ensuite avec un gros
paquets de données MIDI pour voir si l'engin tenait la charge.
La
première version du logiciel du PIC se comportait très bien avec
quelques notes jouées à un rythme normal, mais dès qu'on plaquait un
accord de 16 notes en même temps (bras sur les touches du clavier), le
numéro de programme repassait à zéro bien que toutes les infos MIDI
continuaient de transiter ! Le problème était situé au niveau des
interruptions du Timer0 et est corrigé. La suite des tests a montré que
l'interface tenait le choc avec le débit soutenu des données délivrées
par mon
générateur
MIDI de test et en faisant n'importe quoi sur le clavier.
Bref, c'est validé.
Logiciel du PIC
Demande professionnelle, logiciel non disponible en accès libre. Si
intéressé,
me contacter
pour les
détails.
Interface
MIDI 015za - PIC 18F45K22 - 26/01/2014 -
Non
disponible sur ce site
Si
vous souhaitez recevoir par la poste un PIC préprogrammé
et prêt à utiliser,
me
contacter.
Circuit imprimé
Non réalisé, simple idée de départ en simple face avec quelques
straps...
Historique
26/01/2014
- Première mise à disposition.