Dernière mise à jour :
02/02/2014
Présentation
Ce contrôleur MIDI qui se base sur un PIC 16F628A, permet d'envoyer des
commandes MMC standard. Il
dispose de 5 entrées de commande Stop, Play, Rec-In, Rec-Out
et
Reset et d'une sortie MIDI OUT.
Aucune difficulté de réalisation, le circuit est simple et peut
rendre service pour des tests rapides en lieu et place d'une surface de
contrôle dédiée. Deux schémas sont proposés :
-
schéma 004 : version de base, cinq commandes MMC
-
schéma 004za : extension
du schéma 004, avec quatre commandes supplémentaire et possibilité de
choisir l'adresse de l'esclave (Device Id).
Schéma 004
J'aurais pu économiser les cinq résistances de
rappel à la masse (pull-down R3 à R7) en utilisant le port B du PIC et
ses
résistances de pullup intégrées. Mais si je ne l'ai pas fait, c'est
sans doute pour des raisons bien précises...
Principe général
Il consiste à envoyer des messages Sysex Temps réel au format MMC, rien
de plus !
- SW1 / Stop -> F0 7F 7F 06
01 F7
- SW2 / Play -> F0 7F 7F 06
02 F7
- SW3 / RecIn -> F0 7F 7F 06
06 F7
- SW4 / RecOut -> F0 7F 7F 06
07 F7
- SW5 / Reset -> F0 7F 7F 06
0D F7
Les premier et dernier octets ($F0 et $F7) sont les délimiteurs de la trame Sysex.
Le second octet ($7F) indique qu'il s'agit d'une commande temps réel.
Le
troisième octet correspond au numéro d'identification de l'appareil MMC
auquel on s'adresse. Sa valeur peut être comprise entre $00 et $7F.
Avec la valeur $7F, tous les appareils MMC récepteurs
réagissent.
Le quatrième octet ($06) indique qu'il s'agit d'une
commande. Pour une réponse ou confirmation de commande, cet octet est
positionné à $07.
Le cinquième octet est le numéro de commande
proprement dit. C'est lui qui détermine si on veut jouer (Play),
arrêter (Stop) ou enregistrer (Rec).
Plus tard peut-être, ce petit module pourra-t-il envoyer des commandes autres que MMC. Qui sait ce que l'avenir nous réserve (
005).
Coeur du montage
Vous
l'avez compris, c'est le PIC 16F628A qui s'occupe de tout. Le programme
analyse en permanence l'état des entrées RA0 à RA4 et donc l'état
physique enfoncé ou relâché des boutons-poussoirs SW1 à SW5.
Dès
que l'un d'eux est pressé, le PIC envoie la trame MMC correspondante
sur la sortie de son UART, qui elle-même est reliée au connecteur DIN
de la sortie MIDI OUT. Rien de plus ! Ah si, un truc en plus : au
démarrage, le PIC envoie une note de courte durée pour montrer que tout
va bien.
Oscillateur interne ou externe ?
Je
préconise l'emploi d'un quartz externe pour une meilleure stabilité de
la fréquence d'horloge, mais vous avez le droit d'essayer sans. Je
fournis les fichiers pour les deux usages :
- electronique_controleur_midi_004_16f628.hex
: quartz externe 4 MHz requis avec ses deux condensateurs C1
et C2;
- electronique_controleur_midi_004_16f628_oscint.hex
: usage de l'oscillateur interne, pas besoin du quartz ni des
condensateurs C1 et C2.
Rien d'autre à dire ?
Si,
si. Premièrement, j'ai laissé les broches RA5, RB6 et RB7 libres, pour
y raccorder un petit connecteur ICSP (pour programmation future sans
avoir à retirer le PIC de son support). Deuxièmement, quelques broches
du port B seront utilisées pour spécifier le type de messages à
envoyer. Pour l'instant il s'agit de simples messages MMC mais cela
pourrait évoluer.
Schéma 004za
Version un peu plus complète réalisée sur demande pour environnement Protools.
9 boutons-poussoirs (9 commandes distinctes) au lieu de 5 :
- SW1 / Stop -> F0 7F xx 06 01 F7
- SW2 / Play -> F0 7F xx 06 02 F7
- SW3 / RecIn -> F0 7F xx 06 06 F7
- SW4 / Fast-Forward -> F0 7F xx 06 04 F7
- SW5 / Pause -> F0 7F xx 06 09 F7
- SW1 / Rewind -> F0 7F xx 06 05 F7
- SW2 / Rec-Pause -> F0 7F xx 06 08 F7
- SW3 / RecOut -> F0 7F xx 06 07 F7
- SW9 / Reset -> F0 7F xx 06 0D F7
La valeur du troisième octet (DeviceId, xx) dépend de la position du cavalier JP1/DevId :
- si cavalier JP1 retiré (RB0 à 0) -> Device Id (xx) = $00
- si cavalier JP1 en place (RB0 à 1) -> Device Id (xx) = $7F (All devices)
Prototype (schéma 004)
Réalisé sur platine pré-percée à bandes. Pourquoi un support à 28
broches pour poser un PIC à 18 broches ? Allez savoir...
Comme
écrit ci-avant, j'ai laissé les broches RA5, RB6 et RB7 libres pour
permettre la programmation du PIC sur son circuit d'utilisation final
(ICSP) avec un programmateur PICkit2 (ou autre du style, n'importe quel
autre doit convenir pour ce modèle de PIC). Le connecteur utilisé à
cette fin est celui à 5 points situé à côté du quartz, complètement à
droite du circuit imprimé.
Et voilà. En procédant ainsi, je peux jouer avec le contrôleur MIDI 004
qui envoie les messages MMC à l'
interface
MIDI 005b
(ou autre, bien sûr), et programmer les deux PIC à volonté sans rien
débrancher. Un avec le programmateur PICkit2, l'autre avec la platine
EasyPic7. Pour mes tests, je n'ai câblé que les boutons-poussoirs STOP,
PLAY et REC, mais de brefs court-circuits entre la broche 2 du PIC et
le +5 V, puis entre la broche 3 et le +5 V montrent que les données
correspondantes (REC-OUT et RESET) sont bien envoyées elles aussi.
Logiciel du PIC
Fichiers binaires compilés (*.hex) et source MikroPascal (*.mpp*)
fournis (deux fichiers hex, pour usage avec ou sans quartz)
Contrôleur
MIDI 004 - PIC 16F628A - Version du 26/01/2014
Pour obtenir un PIC préprogrammé avec ce logiciel, voir page
Logiciel PIC - Sources .
Circuit imprimé
Réalisé en simple face.
Typon aux formats PDF, EPS et Bitmap 600 dpi
Historique
02/02/2014
- Ajout schéma 014za, 9 commandes MMC et choix du "Device Id" ($00 ou $7F).
26/01/2014
- Le message MMC Reset était erroné (F0 7F 7F 06
0F F7 au lieu de F0 7F 7F 06
0D F7), merci à Jean-Philippe qui m'a signalé l'erreur.
23/12/2013
- Désormais, l'octet d'identification (Id de l'appareil MMC) est $7F et
non plus $00, ce qui évite de devoir configurer les récepteurs su
$00.
22/12/2013
- Première mise à disposition.