Electronique > Réalisations > InterfacesInterfaces MIDI > Contrôleur MIDI 004

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.

controleur_midi_004_pcb_3d_a

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...

controleur_midi_004

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 :

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.

controleur_midi_004za

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...

controleur_midi_004_proto_001a controleur_midi_004_proto_001b controleur_midi_004_proto_001c

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é.

controleur_midi_004_proto_001d controleur_midi_004_proto_001e controleur_midi_004_proto_001f

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.

controleur_midi_004_pcb_composants

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.