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.
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.
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 :
- Sortie Out_Pos : impulsions positives, une pour chaque message $F8 reçu sur l'entrée MIDI
- Sortie Out_Neg : impulsions négatives, une pour chaque message $F8 reçu sur l'entrée MIDI
- Sortie Out_Pos_DivX : impulsions positives, une tous les X messages $F8 reçu sur l'entrée MIDI (voir détail ci-après)
- Sortie Out_Neg_DivX : impulsions négatives, une tous les X messages $F8 reçu sur l'entrée MIDI (voir détail ci-après)
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.
RB6 | RB5 | RB4 | Division par |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 2 |
0 | 1 | 0 | 4 |
0 | 1 | 1 | 8 |
1 | 0 | 0 | 16 |
1 | 0 | 1 | 32 |
1 | 1 | 0 | 64 |
1 | 1 | 1 | [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 :
- Division par 3 (décimale) : 03d = $03 => première valeur LSB = 3 et seconde valeur MSB = 0 (message sysex = F0 7D 00 00 03 00 F7)
- Division par 13 (décimale) : 13d = $0D => première valeur LSB = D et seconde valeur MSB = 0 (message sysex = F0 7D 00 00 0D 00 F7)
- Division par 45 (décimale) : 45d = $2D => première valeur LSB = D et seconde valeur MSB = 2 (message sysex = F0 7D 00 00 0D 02 F7)
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).
- Si RB7 = 0, alors messages MIDI START ($FA) et STOP ($FC) ignorés;
- Si RB7 = 1, alors messages MIDI START ($FA) et STOP ($FC) pris en compte.
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).
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.
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.
Typon aux formats PDF, EPS et Bitmap 600 dpi
Historique
01/04/2012
-
Première mise à disposition.