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

Dernière mise à jour : 01/04/2012

Présentation

Cette interface MIDI permet la conversion de message MIDI Timing Clock (MIDI sync 24 PPQN, octet de statut $F8) en impulsions type TTL pour synchronisation d'équipements non MIDI disposant d'une entrée d'horloge pour synchronisation externe.

interface_midi_012_pcb_3d_a

Le circuit est basé sur un PIC 16F628A, d'une entrée MIDI et de quelques sorties logiques dont le rôle est décrit plus loin dans le texte.

Schéma

Une interface MIDI, c'est bien ce qu'on a dit.

interface_midi_012

Le circuit pourrait être divisé en deux sections bien distinctes, une pour la partie réception MIDI et l'autre pour la partie émission MIDI. Comme il n'y a pas de partie émission MIDI, c'est encore plus simple.

Réception des données MIDI
Conversion MIDI vers TTL
Les données MIDI au format MIDI arrivent sur l'optocoupleur U1 via la prise DIN d'entrée J1 et la résistance R1. Elles ressortent au format TTL sur la broche 5 de l'optocoupleur, grâce à la résistance de rappel R2 vers le +5 V, et sont envoyées ainsi à l'entrée RB1/Rx (broche 7) du PIC. 
Il est possible d'utiliser d'autres optocoupleurs pour l'entrée MIDI, voir page Interfaces MIDI pour plus de détails.

Emission des données MIDI
Vous, vous n'avez pas suivi...

Sorties logiques et rythme des impulsions
Le circuit dispose de quatre sorties :
Les deux sorties Out_Pos et Out_Neg délivrent des impulsions au rythme des messages MIDI $F8. Les deux sorties Out_Pos_DivX et Out_Neg_DivX délivrent des impulsions à un rythme inférieur au rythme d'entrée, avec un facteur de division ajustable entre 1 et 255. Le facteur de division dépend de la position de trois microswitches parmi ceux que comporte DSW1. Mais comment diable spécifier un facteur de division compris entre ces deux limites 1 et 255 avec seulement trois fils (bits) de configuration ? La réponse est la suivante : comme on dispose de 8 codes possibles avec trois bits de configuration, j'ai pris la décision d'utiliser sept codes pour les facteurs de division classiques (multiples de 2) et un code particulier où l'on doit envoyer un message Sysex pour préciser la valeur désirée. Résumé dans le tableau suivant.

RB6RB5RB4Division par
0001
0012
0104
0118
10016
10132
11064
111[sysex]

Si vous voulez disposer d'un facteur de division de 1, 2, 4, 8, 16, 32 ou 64, pas besoin d'envoyer de messages sysex à l'interface pour la configurer, il suffit de placer les entrées RB4 à RB6 dans l'état logique indiqué dans le tableau précédent. Pour un facteur de division autre (par exemple 3 ou 13), il vous faut passer par l'envoi d'un sysex - ce qui est très facile à faire avec n'importe quel séquenceur logiciel - et mettre les trois entrées RB4 à RB6 à l'état logique haut. Le message sysex à envoyer doit suivre la "syntaxe" suivante :
Octet #1 = $F0 = Début de message SYSEX
Octet #2 = $7D = Identifiant constructeur (ici $7D car usage non commercial)
Octet #3 = $00 = Identifiant machine (valeur arbitraire)
Octet #4 = $00 = Code fonction (valeur arbitraire)
Octet #5 = LSB => quatre premiers bits de la valeur hexa désirée (détail ci-après)
Octet #6 = MSB => quatre derniers bits de la valeur hexa désirée (détail ci-après)
Octet #7 = $F7 =Fin de message SYSEX (EOX, End Of eXclusive)
Il est nécessaire de couper en deux la valeur du facteur de division pour éviter la présence d'un nombre supérieur à 127 dans la trame sysex.
Quelques exemples :
Pas très difficile une fois qu'on a pigé le concept ;-)

Le quatrième interrupteur de DSW1 qui est câblé sur la broche RB7 du PIC permet de spécifier si le compteur de division doit oui ou non être remis à zéro lors de la réception d'un message MIDI START ($FA) ou STOP ($FC).

Remarques :
- Comme le pullup interne du PIC est activé pour économiser des résistances externes, le fait de ne rien câbler sur les entrées RB4 à RB7 conduit à l'obtention d'un niveau logique 1. La fermeture des interrupteurs (ou la mise en place de straps) sur lesdites entrées les place à un niveau logique bas.
- Lors de la réception d'un sysex de configuration valide, la LED D2 s'allume brièvement.

Le graphe qui suit montre les impulsions générées sur les quatres sorties logiques à la réception de chaque message MIDI Sync ($F8), pour un facteur de division fixé à 4 (RB6=0, RB5=1 et RB4=0).

interface_midi_012_graphe_001a

J'ai fixé la durée des impulsions à 4 ms, elles pourraient être de durée un peu différente mais c'est une valeur normalement passe-partout.

Alimentation
L'alimentation de 5 V requise par cette interface peut être fournie par n'importe quelle alim délivrant cette tension sous un courant max de 100 mA.

Brochage des prises MIDI

Câblage valable pour les prises MIDI IN, MIDI OUT et MIDI THRU.

midi_din_cablage_001

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

Les fichiers *.asm et *.hex générés par l'outil MikroPascal (MP Pro V5.30) sont disponibles dans l'archive dont le lien suit. 
Interface MIDI 012 - PIC 16F628A - (01/04/2012)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Réalisé en simple face.

interface_midi_012_pcb_composants

Typon aux formats PDF, EPS et Bitmap 600 dpi

Historique

01/04/2012
- Première mise à disposition.