Electronique > Réalisations > Interfaces > Interfaces MIDI > MIDI Merger 003

Dernière mise à jour : 16/03/2024

Présentation

Ce merger MIDI dispose de deux entrées MIDI et de deux sorties MIDI, et il est plus "intelligent" que mes deux précédents MIDI merger 001 et MIDI merger 002. Il permet le traitement simultané de données sur les deux entrées MIDI et n'en perd pas une goutte tant que le débit des données restent raisonnable (les Sysex étendus de plus de 4 millions d'octets par micro-seconde ne sont pas tolérés).

 
midi_merger_003_pcb_3d_front

Caractéristiques principales

Bien sûr, on peut faire un MIDI-merger avec un PIC plus simple tel que le 16F628A, mais dans ce cas il faut se contenter d'une mémoire tampon fortement limitée (de quelques dizaines d'octets pour chaque entrée MIDI) ce qui suffit peut-être pour des évenements de type Note mais pas vraiment pour des sysex.

   

Avertissements

Ce projet n'a été testé qu'avec les événements de type Notes, ControlChange, ProgramChange et Sysex.

- Le running status est déjà implémenté pour les données entrantes, mais pas pour les données sortantes.
- Les Sysex sont gérées, mais les tests se sont limités à des messages de longueur moyenne (68 octets).

   

Schéma

Le PIC 18F46K22 utilisé est plus gros qu'un 16F628A, et il est vrai que ses 40 broches peuvent impressionner. Soyons forts.

   
midi_merger_003
   

Le fait d'avoir choisi un "gros" PIC pour ce montage m'a permis d'ajouter de nombreuses lignes d'entrées/sorties. Ce n'était pas prémédité et ces lignes peuvent être omises, ainsi que les douze connecteurs qui s'y rattachent, à savoir J4 à J15.


Entrées MIDI

Chacune des deux entrées MIDI (MIDI IN 1 et MIDI IN 2) aboutit à un optocoupleur PC900, chargé d'isoler galvaniquement la sortie de l'instrument que l'on y connecte. Les résistances R1 et R1' sont chargées de limiter le courant dans la LED contenue dans les optocoupleurs, et les diodes D1 et D1' protègent ces mêmes LED en cas d'inversion de polarité des fils des câbles MIDI. Ces diodes ne sont pas absolument indispensables mais je vous conseille tout de même de les mettre. La sortie des optocoupleurs est chargée par une résistance de 220 ohms (R2 et R2'), au repos nous disposons bien d'un état logique haut sur les entrées Rx des modules UART du PIC.


Gestion des données MIDI

Les données MIDI qui arrivent sur chacune des entrées MIDI aboutissent au microcontrôleur dont la première tâche est de les placer dans une mémoire tampon (buffer circulaire). Les données reçues transitent ensuite vers la sortie MIDI Out sélectionnée, dès que le composant a le temps de les traiter, c'est à dire presque tout le temps. Le routage des données MIDI (vers la sortie 1 ou 2) est effectué selon les souhaits de l'utilisateur, qui dispose pour cela des deux interrupteurs SW1 et SW2 :

Bien entendu, les octets des données MIDI reçues sur les deux entrées ne peuvent être transmis (routés) directement vers la ou les sorties, sans un minimum d'intelligence. Ces données sont stockées en attente de leur identification, et c'est seulement quand cette dernière est assurée qu'elles sont transmises "en bloc" sur la sortie choisie, sans "croisement" des données reçues sur les deux entrées. Il va de soi que la gestion la plus délicate concerne le traitement d'un grand nombre de données reçues en même temps sur les deux entrées (sysex sur entrées In1 et In2 en même temps).


Sorties MIDI

Rien de particulier, on retrouve notre broche 4 de la prise DIN reliée au +5 V au travers d'une résistance de 220 ohms (R3 et R3'), la broche 5 de cette même prise DIN recevant les données MIDI venant du PIC via les résistances R4 et R4'.


Fonctions annexes

Fonctions actuellement non implémentées, que j'incluerai dans la prochaine version :


Procédure de tests

J'ai procédé en deux étapes :

- envoi de données simples (notes, CC et PC) et sysex sur les deux entrées MIDI, en alternance rapprochée;
- envoi de données simples (notes, CC et PC) et sysex sur les deux entrées MIDI, en simultané.

La seconde méthode est bien entendu moins sympathique pour le microcontrôleur.


midi_merger_003_graphe_001a
Envoi de données en alternance (moins contraignant pour le PIC)

midi_merger_003_graphe_001b
Envoi de données en simultané (un peu plus stressant pour le PIC)

Dans les deux cas, les données en sorties MIDI ont été correctement restituées.

midi_merger_003_graphe_001b
Vue de détail de deux flux courts mergés vers la sortie Midi Out 2

Alimentation

L'alimentation est assurée localement par un petit régulateur de tension tripode 5 V. Une évolution future pourrait consister à rendre le système totalement autonome, sans alim externe, en "repiquant" l'alimentation 5V fournie par une des sources MIDI. 

Il est également possible d'utiliser une liaison USB traditionnelle pour récupérer un 5V adapté au mergeur MIDI, la consommation du mergeur MIDI 003 étant largement inférieure au courant qu'on peut tirer d'une liaison USB avec "périphérique non déclaré". Dans ce cas, le câble USB ne transporte aucune donné MIDI et ne sert que de câble d'alimentation. Le régulateur de tension 7805 n'est plus nécessaire et les deux pastilles de circuit imprimé relatives à ses entrée/sortie doivent être reliées ensemble (strap). La diode D101 doit rester en place, car elle constitue une cellule de découplage d'alimentation avec le condensateur C101.

   

Câblages des prises MIDI

Le câblage est le suivant, attention au sens de la vue (de devant ou de derrière)


midi_din_cablage_001

La broche 2 n'est reliée à la masse qu'au niveau des sorties et non au niveau des entrées, pour éviter toute boucle de masse entre équipements.

   

Prototype

Réalisé selon le dessin de circuit imprimé (PCB) de 2016. J'avais reçu le PCB en juin 2016 et l'ai redécouvert toujours nu... en mars 2024 !
Il n'était pas trop tard pour l'assembler et le tester de manière un peu plus approfondie ;)

   
midi_merger_003_proto_rm_001a midi_merger_003_proto_rm_001c midi_merger_003_proto_rm_001d

Cette maquette a été l'occasion pour moi de découvrir un bug rigolo : la LED Rx2 restait parfois bloquée quand des messages MIDI arrivaient sur l'entrée MIDI 2 alors que l'entrée MIDI 1 n'avait encore rien reçu depuis la mise sous tension. Le soucis provenait d'une variable incorrectement initialisée au démarrage (et oui, il faut parfois peu de choses pour semer la zizanie dans un programme).

On notera que je n'ai pas soudé les barrettes de contacts prévues à titre d'extensions futures, mais aussi prévues pour raccorder les interrupteurs de configuration. Toutes les entrées non mises à la masse sont donc portées au niveau logique haut grâce aux résistances de rappel (pullup) activées dans le PIC. J'aurai bien le temps d'ajouter ces barrettes dans 8 ans.

   

Circuit imprimé (PCB)

Réalisé en double face.


midi_merger_003_pcb_components_top
Version du 16/03/2024
 
Typon (PCB) au format PDF 

   

Logiciel du PIC

Fichier compilé (hex) disponible dans l'archive suivante :
MIDI Merger 003 - PIC 18F46K22 - 16/03/2024

Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Historique

17/03/2024
- Ajout photos prototype (construit sur PCB de 2016).
- Ajout informations concernant l'alimentation (possible avec connexion USB).
- [PCB] Correction sérigraphie, le signe "+" était imprimé du mauvais côté du connecteur d'alimentation J101.
- [PCB] Les deux condensateurs de découplage d'alimentation C103 et C104 (2 x 100n) sont désormais placés face inférieure.
- [PIC] Désormais, les LED Rx1 et Rx2 clignotent aussi lors de la réception des messages CC et PC. Auparavant, ces LED ne s'allumaient que sur réception des messages de type Note.
- [PIC] Correction bug - Les messages MIDI présentés sur l'entrée MIDI 2 bloquaient parfois une partie du merger, dans le cas où depuis la mise sous tension aucun message MIDI n'était encore parvenu à l'entrée MIDI 1. L'entrée MIDI 1 restait quant à elle fonctionnelle.

06/06/2021
- Mise à disposition du PCB, lequel offre désormais (en plus de la fonction merger MIDI) des E/S supplémentaires pour extensions futures.
- Le logiciel PIC du 09/10/2016 n'a pas changé.

09/10/2016
- Première mise à disposition.