Electronique > Réalisations > Interfaces > Interfaces MIDI > Interface MIDI 032 

Dernière mise à jour : 28/04/2024

Article non terminé, volontairement non référencé dans les sommaires du site


Présentation

Cette interface permet de créer une liaison MIDI sans fil qui fonctionne à la fréquence d'émission de 2,4 GHz.


interface_midi_032_pcb_3d_front    

Basé sur un PIC 18F26K22 et un composant HF (HF = Haute Fréquence) spécialisé nRF24L01+, le même montage peut faire office d'émetteur ou de récepteur. Il faut bien sûr deux modules pour assurer une liaison point à point : un module configuré en émetteur et branché sur une sortie MIDI OUT, l'autre configuré en récepteur et relié à une entrée MIDI IN.

   

Avertissements

Le système a été conçu pour permettre la transmission des messages MIDI courts de type "Note", "Program Change" (PC), "Control Change" (CC) et "Real Time" (System, Clock, MMC). Les Sysex sont supportés tant que leur longueur ne dépasse pas 30 octets (au-delà, ils sont ignorés). L'objectif prioritaire de ce projet est de pouvoir transmettre les messages principaux (notes, PC et CC) avec le minimum de latence.

Le système fonctionne "globalement". Tous les types de messages MIDI énumérés ci-devant sont transmis correctement (sans erreur), sauf quand lesdits messages sont nombreux et rapprochés. 

   

Pour l'heure, système pas fiable pour usage "jeu clavier", mais OK pour usage "télécommande". Détails au § Prototype.

   

Schéma

Les deux composants principaux sont bien sûr le PIC et le module HF équipé du nRF24L01.


interface_midi_032

-
   
Fonctionnement général

Le fonctionnement général dépend du mode dans lequel on place le module MIDI 032, ce dernier pouvant être configuré en émetteur (TX) ou en récepteur (RX). Le mode est défini par le cavalier (jumper) JP2/TxRx :

   
Indicateurs lumineux
Quatre LED ont été prévues pour disposer d'une indication du mode (TX ou RX) et des échanges de données MIDI.
Point besoin de prévoir un témoin de présence d'alimentation, puisque l'un des deux voyants LED1 ou LED2 est forcément allumé.
   
Canaux

On ne se soucie généralement guère du canal d'émission ou de code d'adressage quand une seule liaison HF est requise. Mais quand on veut établir en même temps plusieurs liaisons HF dans un même espace de travail et avec un même plan de fréquences, il faut bien que les appareils ne se mélangent pas les pinceaux. Le nRF24 dispose d'un plan d'adressage pour le canal d'émission (0 à 125) qui permet de travailler à une fréquence HF comprise entre 2400 MHz et 2525 MHz. Il dispose également d'un code d'adressage "interne" sur 40 bits (5 octets) qui permet de travailler en "sous-canaux" (pipes) au sein d'un même canal HF. Aurais-je été inspiré en prévoyant dès le début des lignes d'extension (IOx) sur le PIC ?

Pour l'instant, mes tests de sélection de canal ne sont pas concluants, puisque la liaison entre émetteur et récepteur reste établie même si j'attribue des canaux différents aux deux modules... très drôle.

Liaison entre PIC 18F26K22 et module nRF24
Le PIC est alimenté sous +5V et le module nRF24 l'est sous une tension de +3V3. Pourtant, les liaisons entre les deux sont directes, sans translateur de niveau. La raison en est que les broches d'E/S du nRF24 sont "compatibles" 5V : les entrées tolèrent une valeur de +5V et les tensions de +3V3 délivrées par ce même module sont correctement interprêtées comme un état logique haut par les entrées du PIC. Cela nous va très bien !
   
Alimentation

Le PIC est alimenté sous une tension continue stabilisée de +5V grâce au régulateur de tension U101/LM7805. L'entrée de ce régulateur doit recevoir une tension continue de valeur comprise entre +8V et +12V, par le biais du connecteur J101. La diode D101 assure la protection contre toute inversion accidentelle de polarité, tandis que les condensateurs C101 et C102 assurent le filtrage général et la stabilité du régulateur. Le condensateur C103 est indispensable et doit être placé au plus près des broches d'alimentation du PIC.

Une tension de +3V3 est requise pour le module HF nRF24L01, cette tension est tirée du rail +5V et stabilisée par le régulateur U102/78M33.

   

Prototype

Basé sur le dessin de circuit imprimé (PCB) visible plus loin. Deux exemplaires ont été réalisés pour assurer une liaison unique. Economie oblige, j'ai soudé un seul connecteur DIN sur le module configuré en émetteur (MIDI IN) et un seul connecteur DIN sur le module configuré en récepteur (MIDI OUT). Les modules nRF24L01 sont ceux qu'on trouve facilement.

interface_midi_032_proto_rm_001e interface_midi_032_proto_rm_001d module-hf_nrf24l01p_001a 
De gauche à droite : circuits émetteur et récepteur, régulateur de tension 3V3 pour le module HF, module nRF24L01+

Pour mes tests, j'ai adopté une configuration simplifiée et figée correspondant au schéma suivant (1er module configuré en émetteur avec transmission des données arrivant sur l'entrée MIDI IN, 2è module configuré en récepteur et données reçue expédiées sur MIDI OUT) :

interface_midi_032_nrf24-test-tx-rx

interface_midi_032_proto_rm_001f interface_midi_032_proto_rm_001g


On peut dire que cela "fonctionne globalement" en envoyant des messages de type Note, CC, PC ou sysex de longueur maximale 30 octets (les messages "temps réel" composés d'un seul octet d'état System/Clock sont supportés) de manière isolée. L'émetteur envoie bien les paquets de données (longueur entre 1 et 30 octets) et le récepteur les restitue correctement. J'ai effectué un test de robustesse qui a consisté à envoyer plus de 60000 (soixante mille) événements MIDI avec une pause de 1 ms entre chaque événement (de manière automatisée, bien sûr), et à compter les défauts. Aucun loupé sur la totalité, mais curieusement et malheureusement, les choses ne se passent pas aussi bien avec un jeu réel sur clavier, quand je presse plusieurs touches en même temps à un rythme endiablé et que les notes utilisent le running status. Le problème ne me semble pas lié à la gestion des messages MIDI entrants, mais plutôt à un conflit entre les interruptions de l'UART et celles du module nRF24. Bref, pour l'heure, mon système n'est pas fiable pour un usage "jeu scénique".

Je n'ai pas encore évalué la portée (distance acceptée entre émetteur et récepteur) qui de toute façon dépend toujours d'un nombre élevé de facteurs (puissance d'émission, visibilité entre Tx et Rx, environnement). Je n'ai pas non plus mesuré le temps de latence entre émetteur et récepteur, qui en première approximation est faible (a priori de l'odre de la milliseconde quand la liaison est bonne et qu'il n'y a pas besoin de renvoyer les paquets de données).

Reste à faire :

   

Logiciel du PIC

Le fichier binaire compilé (*.hex) de la version alléegée (_LE) est disponible en libre service dans l'archive dont le lien suit.
Interface MIDI 032 - PIC 18F26K22 - LE - xx/xx/2024
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

   

Circuit imprimé (PCB)

Réalisé en double face. 

   
interface_midi_032_pcb_3d_components_top
   
Si au terme des tests que j'ai prévus le prototype se comporte très bien, je développerai peut-être un PCB simplifié pour la fonction émetteur et un autre PCB simplifié pour la fonction récepteur, au lieu d'un seul PCB pour les deux fonctions. Par PCB simplifiés, j'entends circuits de moindres dimensions avec composants CMS uniquement (excepté les connecteurs MIDI-DIN et bornier d'alimentation).

   

Historique

xx/xx/2024
- Première mise à disposition.