Electronique > RéalisationsInterfaces > Interfaces MIDI > Interface MIDI 006

Dernière mise à jour : 26/09/2010

Présentation

Le présent circuit a été conçu à la demande d'un régisseur de théâtre, pour une "assistance" au séquencement d'un jeu d'orgue lumineux directement depuis la scène, via des capteurs de pression ou de simples interrupteurs agissant comme des interrupteurs de commande.

interface_midi_006_pcb_3d_a

Il délivre des évenements MIDI de type Note On/Off ou Control Change (CC) différents selon les capteurs actionnés. Par exemple envoi d'une note MIDI Do3 sur action d'un premier capteur et envoi d'une note MIDI La3 sur action d'un second capteur. Le coeur du montage est un petit PIC de type 16F628A et les évenements MIDI générées peuvent être modifiées à tout instant et très simplement. Ce circuit a été basé sur mon générateur de percussions 003 mais contrairement à ce dernier, le montage présenté ici est plus "statique" et ne prend pas en compte la force de frappe sur les capteurs, il agit en tout ou rien. Ce qui signifie que les évements envoyés ne sont pas dynamiques. Comme il dispose de quatre entrée pour capteurs, il peut envoyer quatre évenements MIDI différents.

Schéma

Le schéma complet est visible ci-dessous.

interface_midi_006

On y retrouve les grandes lignes du générateur de percussion 003, avec une légère simplification au niveau des entrées capteurs. Le circuit peut être décomposé en trois parties bien distinctes :
- les étages d'entrée
- le circuit de gestion à base de microcontrôleur
- la régulation d'alimentation secteur

Etages d'entrée
Il y a quatre circuits d'entrée, chacun est constitué d'un capteur, de deux diodes, de deux résistances et d'un condensateur. Ces quatre circuits d'entrée auraient sans doute pû être encore plus simplifiés mais j'ai préféré jouer la sécurité. Le principe consiste à lire l'état des quatre lignes RA0 à RA3 configurées en entrées logiques et à détecter quand la tension monte brusquement. En mode d'envoi de messages de type Note On / Off, un evènement Note On (3 octets) est produit quand une des entrées reçoit une tension supérieure à 4 V, suivi d'un évenement Note Off (3 octets)  quelques dizaines ou centaines de millisecondes plus tard. En mode d'envoi de messages de type Control Change, un seul message MIDI est transmis (3 octets). Le graphe suivant montre comment le circuit réagit quand l'entrée Tr1 (courbe rouge) reçoit une tension qui évolue subitement à cause d'une action sur un bouton poussoir ou capteur (Poussoir Tr1, courbe verte).

interface_midi_006_graphe_001a

Le graphe qui précède montre deux évenements distincts dans le temps. Le premier est lié à l'appui sur un capteur qui présente un changement d'état franc. Le second est lié à l'appui sur un bouton poussoir grand public qui génère des rebonds mécaniques et donc des rebonds électriques (aller-retours répétés visibles sur la courbe verte). Le circuit d'entrée "nettoye" les rebonds et permet d'envoyer au PIC des signaux beaucoup plus propres. Dans les deux cas (avec ou sans rebonds du capteur), le PIC ne génère qu'un seul évenement MIDI, c'est ce qui est désiré.
Explication : le condensateur C1 et la résistance R1 forment un couple heureux qui permet de sculpter la forme du signal électrique qui arrive au PIC quand le poussoir IN1 (ou autre élement de commande mécanique) est actionné. Le signal obtenu et transmis au PIC est semblable à celui de la courbe rouge vue ci-avant. Il augmente vite mais diminue lentement. C'est cette façon de faire qui permet d'obtenir l'effet "anti-rebond" et qui permet de ne pas retrouver une tension nulle trop rapidement. Rien n'interdit de simplifier encore l'étage d'entrée et de ne rien mettre (oui on peut) et de compter sur le logiciel pour se dépattouiller seul (fonction anti-rebond logiciel, appelé debouncing). Mais dans ce cas le temps de réaction est diminué puisque l'évenement MIDI n'est envoyé qu'après la durée de la fonction anti-rebond (plusieurs dizaines de ms). Faire ce qui est fait ici (anti-rebond matériel) permet une réactivité immédiate (moins de 1 ms), l'évenement MIDI est généré dès que l'entrée du PIC change d'état. La diode zener est facultative, elle n'est là que pour s'assurer qu'aucune surtension importante n'atteindra le PIC. Les boutons poussoir (ou autres capteurs) de commande sont en effet destinés à être déportés et ils risquent de se retrouver assez loin du circuit électronique. De plus, le circuit étant prévu pour une utilisation scénique, il est quasiment inévitable de se chopper des parasites ambiants en provenance de sources de puissance (projecteurs et gradateurs entre autres). La diode D5 pourra ne pas être implantée si l'élement de déclenchement présente une très forte résistance ohmique au repos (plus de 10 MO). Elle est indispensable si la source de déclenchement présente au repos une résistance de sortie faible, et empêche que le condensateur ne se décharge ailleurs que dans la résistance R1 (ou alors il faut en tenir compte, par exemple en augmentant la valeur de C1). La résistance R5 n'est pas absolument indispensable mais est tout de même conseillée, elle permet de limiter le courant d'entrée dans le PIC en cas de forte surtension en entrée qui n'aurait pas été rabotée suffisement vite par la diode zener D1. A mon sens la diode zener est assez rapide, mais pour un usage en ambiance sévère je préfère redoubler de précautions (certains me diront que c'est ridicule, mais j'assume).

Important : si le capteur utilisé ne supporte pas un courant élevé, vous devez ajouter en série avec lui une résistance de quelques dizaines à quelques centaines d'ohms. La valeur du condensateur C1 est relativement faible, mais quand il est déchargé, il se comporte comme un court-circuit et provoque une pointe d'intensité qui n'est limitée que par la diode D5.

Circuit de gestion
Toute l'intelligence se trouve enfermée dans le PIC 16F628A, et vous pouvez me croire, il n'y a pas grand chose dedans. Le gros de l'affaire peut être vite résumé. Les quatre entrées sont lues en permanence, et quand l'une d'elle présente un étét logique haut, on considère qu'il y a commande. Le logiciel du PIC constitue alors un message MIDI dont la teneur précise dépend des options de l'utilisateur. Si rien de spécial n'a été spécifié par l'utilisateur (premier démarrage par exemple), les valeurs par défaut sont utilisées.

Spécification des notes à jouer (mode réglages)
Vous pouvez spécifier la hauteur de la note à jouer mais aussi son canal MIDI et sa vélocité, grâce au cavalier JP1 (câblé sur RA5) et aux interrupteurs et poussoirs câblés sur les lignes RA4, RB0, RB1, RB3, RB4, RB5, RB6 et RB7 du PIC (respectivement Prog, SetF, SetA, SetB, SetC, SetD, SetE, Down et Up). Il n'y a aucune obligation de modifier la hauteur et la vélocité des notes ou leur numéro de canal MIDI si les valeurs par défaut vous conviennent. Dans ce cas tous les interrupteurs et poussoirs deviennent facultatifs mais la ligne RA5 du PIC doit tout de même être câblée à la masse. Les lignes du PORTB peuvent rester en l'air - le pullup interne étant activé, mais la ligne RA4 doit impérativement être ramenée à un potentiel de +5 V ou de 0 V car il n'y a pas de pullup interne sur le port A du PIC. Les valeurs de notes par défaut sont les suivantes :
- Note 1 : Do3 / canal MIDI 1
- Note 2 : Ré3 / canal MIDI 1
- Note 3 : Mi3 / canal MIDI 1
- Note 4 : Fa3 / canal MIDI 1
La fonction des interrupteurs et poussoirs est décrite ci-après.

Cavalier JP1/Prog (câblé sur la ligne RA5)
- cavalier entre broche centrale et masse (RA5 = 0) : mode d'utilisation normal du système
- cavalier entre broche centrale et +5 V (RA5 = 1) : mode réglage des notes à générer

Interrupteur SW1 / SetA et SetB (câblés sur ligne RB0 et RB1)
Ces interrupteurs permettent de spécifier le paramètre à modifier pour l'entrée (numéro de note) sélectionnée.
- réglage canal MIDI (channel) : RB0 = 0 et RB1 = 0
- réglage hauteur de note (pitch) ou Numéro contrôleur (CC) : RB0 = 1 et RB1 = 0
- réglage vélocité note (vel) ou Valeur contrôleur (CC) : RB0 = 0 et RB1 = 1
Aucun paramètre ne sera modifié si RB0 = 1 et RB1 = 1 (sera peut-être utilisé pour extension future)

Interrupteurs SW1 / SetC et SetD (câblés sur lignes RB3 et RB4)
Ces deux interrupteurs permettent de spécifier la note à modifier parmi les quatre disponibles. Un interrupteur ouvert correspond à un état logique haut (valeur logique 1) et un interrupteur fermé correspond à un état logique bas (valeur logique 0).
- Sélection Note 1 / Trig 1 : RB4 = 0 et RB3 = 0
- Sélection Note 2 / Trig 2 : RB4 = 0 et RB3 = 1
- Sélection Note 3 / Trig 3 : RB4 = 1 et RB3 = 0
- Sélection Note 4 / Trig 4 : RB4 = 1 et RB3 = 1
Le logiciel du PIC se base sur la position de ces deux interrupteurs pour déterminer quelle note ou Control Change doit être modifié(e), mais il regarde également si les entrées de déclenchement Trig sont actives. Si c'est le cas, ces entrées sont prioritaires. Admettons par exemple que les deux poussoirs SetC et SetD sont tous deux en position 0 (RB3 et RB4 à 0) et qu'aucune des entrées trig n'est active. Dans ce cas le logiciel en conclue que les paramètres à modifier sont ceux de la première entrée Trig1. Si maintenant on laisse les interrupteurs SetC et SetD dans la même position mais que l'on active l'entrée Trig2, le logiciel ne tient plus compte de l'état des interrupteurs SetC et SetD et il en conclue que les paramètres à modifier sont ceux de la seconde entrée Trig2. Dans la pratique, cette méthode permet de sélectionner rapidement la voie dont les paramètres doivent être modifiés. En contrepartie, il faut laisser l'entrée trig active pendant la modification (pendant l'appui sur les poussoirs Up et Down). Durant les tests, j'ai trouvé cette façon de faire bien plus pratique, mais il va de soi que cela dépendra beaucoup de la position des capteurs de déclenchement. Ceci dit, rien ne vous interdit de placer un bouton poussoir "local" en parallèle sur les entrées trig, ce pourrait être utile si des modifications devaient être souvent apportées. Si le circuit doit être configuré une fois pour toute et qu'il n'y a pas besoin d'ouvrir son boitier par la suite, les interrupteurs locaux SetC et SetD feront parfaitement l'affaire, point besoin de s'embêter à en ajouter.

Interrupteur SW1 / SetE (câblé sur ligne RB2)
Cet interrupteur permet de spécifier le type de message à envoyer, Control Change ou Note On / Off.
- interrupteur ouvert (RB2 = 1) : envoi de messages de type Control Change
- interrupteur fermé (RB2 = 0) : envoi de messages de type Note On / Off
Les valeurs de Control Change sont les mêmes que les valeurs spécifiées par l'utilisateur pour les Notes On, avec correspondance suivante (trois octets envoyés dans tous les cas) :
- Octet N°1 : détermine le type de message : 1011nnnn si Control Change et 1001nnnn si Note On (nnnn = canal MIDI dans les deux cas)
- Octet N°2 : Hauteur note (si mode Note On, RB2 = 0) ou Numéro CC (si mode Control Change, RB2 = 1)
- Octet N°3 : Vélocité note (si mode Note On, RB2 = 0) ou Valeur CC (si mode Control Change, RB2 = 1)

Interrupteur SW1 / SetF (câblé sur ligne RA4)
Cet interrupteur permet de spécifier le délais d'inactivité après l'envoi d'un évenement de type Note On ou Control Change.
- interrupteur ouvert (RA4 = 1) : ajout d'un retard de 500 ms entre Note On et Note Off, ou après envoi d'un Control Change
- interrupteur fermé (RA4 = 0) : ajout d'un retard de 50 ms entre Note On et Note Off, ou après envoi d'un Control Change

Boutons poussoir Down et Up (câblés sur lignes RB6 et RB7)
Ces boutons poussoir permettent d'incrémenter (Up) ou de décrémenter (Down) les paramètres de la note en cours de sélection. Le paramètre de la note qui est modifié dépend de l'état de l'interrupteur SW1 / SetA (ligne RB0).
- Down : diminution hauteur note ou numéro contrôleur (RB0 = 1 et RB1 = 0), diminution vélocité note ou valeur contrôleur (RB0 = 0 et RB1 = 1) ou diminution numéro de canal MIDI (RB0 = 0 et RB1 = 0)
- Up : augmentation hauteur note ou numéro contrôleur (RB0 = 1 et RB1 = 0), augmentation vélocité note ou valeur contrôleur (RB0 = 0 et RB1 = 1) ou augmentation numéro de canal MIDI (RB0 = 0 et RB1 = 0)

Réglage de la hauteur des notes (pitch)
Pour spécifier la hauteur de chacune des quatre notes, il faut tout d'abord que le cavalier câblé en ligne RA5 soit positionné vers le +5 V (RA5 = 1). Ouvrir l'interrupteur SW1 / SetA câblé sur la ligne RB0 (RB0 = 1) pour passer en mode de réglage de hauteur de note. Sélectionner le numéro de la note devant être modifiée à l'aide des microswitches SW1 / SetC et SetD câblés sur les lignes RB3 et RB4.
- Sélection hauteur note 1 (Trig 1 / Note 1) : RB4 = 0, RB3 = 0 et RB0 = 1
- Sélection hauteur note 2 (Trig 2 / Note 2) : RB4 = 0, RB3 = 1 et RB0 = 1
- Sélection hauteur note 3 (Trig 3 / Note 3) : RB4 = 1, RB3 = 0 et RB0 = 1
- Sélection hauteur note 4 (Trig 4 / Note 4) : RB4 = 1, RB3 = 1 et RB0 = 1
Puis appuyer sur le bouton Down (câblé sur la ligne RB6) ou sur le bouton Up (câblé sur la ligne RB7) pour ajuster à la note désirée. A chaque modification, la note modifiée est envoyée en temps réel sur la sortie MIDI pendant une brève durée.

Réglage du canal MIDI des notes (channel)
Pour spécifier le numéro de canal MIDI de chacune des quatre notes, il faut tout d'abord que le cavalier câblé en ligne RA5 soit positionné vers le +5 V (RA5 = 1). Fermer l'interrupteur SW1 / SetA câblé sur la ligne RB0 (RB0 = 0) pour passer en mode de réglage de canal MIDI. Sélectionner le numéro de la note devant être modifiée à l'aide des microswitches SW1 / SetC et SetD câblés sur les lignes RB3 et RB4.
- Sélection canal MIDI note 1 (Trig 1 / Note 1) : RB4 = 0, RB3 = 0 et RB0 = 0
- Sélection canal MIDI note 2 (Trig 2 / Note 2) : RB4 = 0, RB3 = 1 et RB0 = 0
- Sélection canal MIDI note 3 (Trig 3 / Note 3) : RB4 = 1, RB3 = 0 et RB0 = 0
- Sélection canal MIDI note 4 (Trig 4 / Note 4) : RB4 = 1, RB3 = 1 et RB0 = 0
Puis appuyer sur le bouton Down (câblé sur la ligne RB6) ou sur le bouton Up (câblé sur la ligne RB7) pour ajuster au canal MIDI désiré. A chaque modification, la note modifiée est envoyée en temps réel sur la sortie MIDI pendant une brève durée.

Retour au mode d'utilisation normal
Une fois les réglages effectués, repositionner le cavalier JP1 vers la masse (RA5 = 0) pour sortir du mode réglage et éviter toute modification intempestive par appui accidentel sur les poussoirs Down ou Up. Les derniers réglages effectués sont stockés en EEProm et sont donc conservées même en cas de coupure d'alimentation.

Alimentation secteur
Elle est basée sur un régulateur de tension tripode classique de type LM7805. La tension d'entrée peut être comprise entre +9 V et +15 V. La diode 1N4007 située à l'entrée du régulateur permet de protéger le tout en cas d'inversion de polarité, ce qui se produit facilement quand on utilise un bloc secteur tout fait - surtout si la polarité de sortie peut être modifiée par l'utilisateur.

Câblage prise MIDI OUT

Ne me dites pas que vous connaissez le câblage par coeur...

midi_din_cablage_001

La broche 2 est reliée à la masse quand la prise est de type MIDI Out, ce qui est le cas ici.

Prototype

Réalisé sur plaque d'expérimentation sans soudure avec des fils de couleur, meilleurs conducteurs que les fils blancs (nécessaire ici pour que l'information MIDI, même très véloce, arrive à temps à l'ordinateur. Tests réalisés avec mon logiciel MidiTest dans un premier temps, puis avec Cubase dans un second temps. On reste donc dans le binaire.

interface_midi_006_proto_001a interface_midi_006_proto_001b interface_midi_006_proto_001z
interface_midi_006_proto_001c interface_midi_006_proto_001d

Le côté bleuté des premières photos est voulu, et ça tombe bien car je n'avais plus de gélatine orange.
Trêve de plaisanterie. Ces tests grandeur nature m'ont permis d'améliorer la façon de programmer les valeurs des données MIDI à envoyer. Les tests sur Cubase m'ont permis de voir très rapidement si tous les paramètres MIDI étaient correctement gérés, le mode d'affichage des évenements MIDI sous forme de liste détaillée est parfait pour ça. Contrairement à la première version à base de 16F88 qui ne fonctionnait pas bien (version non diffusée officiellement), celle-ci me donne satisfaction.

Logiciel du PIC

L'archive zip dont le lien suit contient le source complet (MikroPascal Pro V3.8) et le fichier binaire compilé (*.hex).
Interface MIDI 006 - 16F628 (26/09/2010)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Non réalisé. Vue 3D uniquement là pour aperçu général des composants utilisés.