Electronique > Réalisations > Interfaces > MIDI > Contrôleur MIDI 008b [Pro]

Dernière mise à jour : 01/01/2017

Présentation

Ce contrôleur MIDI basé sur un microcontrôleur PIC 18F46K22 a été développé sur mesure pour le pilotage d'un logiciel spécifique. Il dispose de 16 entrées analogiques et de 88 entrées logiques. Une sortie MIDI OUT permet l'envoi des évenements MIDI.

controleur_midi_008b_pcb_3d_a

Les 16 entrées analogiques (#0 à #15) et les 88 commandes logiques (#0 à #87) sont lues en boucle. Quand une valeur analogique ou logique change, un événement MIDI est émis sur la sortie principale. Les commandes logiques #88 à #95 sont utilisées pour la configuration de l'interface.

Schéma

Le système est scindé en deux parties, carte UC et carte d'entrée.

controleur_midi_008b_uc
Carte processeur (UC) + régulation alim (image volontairement embrouillée)

interface_midi_008b_inputs
Carte d'entrées analogiques et numériques (image volontairement embrouillée)

Fonctionnement général
Le logiciel du PIC lit en boucle les entrées analogiques et les entrées logiques, et délivre un événement MIDI à chaque fois qu'une entrée analogique ou logique change (en valeur ou en état). La lecture des 16 entrées analogiques est assurée par deux convertisseurs analogique/numérique octuples externes, chacun possèdant 8 entrées. Pour les 96 commandes logiques, le multiplexage est de rigueur avec un clavier matricé 12*8. Une diode de protection à chaque point de croisement du clavier assure une protection efficace des circuits logiques en cas de pression simultanée sur plusieurs boutons-poussoirs. Une LED clignote en synchronisme avec l'émission des données MIDI.

Entrées analogiques
Les 16 entrées analogiques sont lues en un peu moins de 1 ms (environ 800 us). Les données acquises (échantillonnées) sont quantifiées sur 12 bits, on opère donc une troncature de 5 bits pour obtenir une valeur finale comprise entre 0 et 127 (plage de valeurs acceptées pour les données MIDI transmises, qui sont codées sur 7 bits). Afin de limiter les risques d'envoi de données "parasites" en l'absence de manoeuvre des potentiomètres, une routine particulière est mise en oeuvre. Cette dernière consiste à comparer entre eux les trois derniers échantillons lus, de façon individuelle pour chaque entrée. C'est à l'issue de ces comparaisons que le logiciel décide s'il s'agit d'un vrai changement désiré par l'opérateur. 

Entrées logiques
Le PIC 18F46K22 ne possède pas assez de broches pour traiter directement la totalité des voies, ce qui justifie l'utilisation d'un matriçage. Pour cela, des registres à décalage sont utilisés pour sélectionner/activer un groupe de 8 touches parmi 12 groupes. Les retours (résultats de la pression des touches du clavier) sont décodés par lecture des états logiques présents sur le PORTD du PIC (retour des infos en 8 bits). Le temps de balayage et d'analyse de 96 touches est inférieur à 1 ms (les 96 touches ne sont pas toutes gérées, détails par la suite). La fonction d'anti-rebond (debounce) est assurée de façon purement logicielle et sa durée peut être ajustée par l'utilisateur entre 0 ms et 200 ms, par pas de 2 ms. Toutes les entrées logiques sont scannées de la même façon, mais elles sont séparées en deux familles :
Remarque : il aurait également été possible de disposer d'entrées individuelles sans matriçage, mais il aurait alors fallu disposer de 12 registres à décalage 8 bits au lieu de 2 seulement (ou de tout autre système de lecture d'états logiques possédant le nombre adéquat d'entrées). La solution retenue ici, largement répendue, est finalement la plus simple.

Commandes logiques utilisées pour la configuration du contrôleur MIDI
Lors de la modification d'un de ces paramètres (durée de l'anti-rebonds, numéro de canal MIDI ou valeur de vélocité) la LED clignote deux fois quand on incrémente la valeur, et ne clignote qu'une seule fois si on la décrémente.

Correspondances entre nom des boutons-poussoirs et entrées logiques / configuration interface
Commande #0 = bouton-poussoir SKB1, entrée logique #1
Commande #1 = bouton-poussoir SKB2, entrée logique #2
...
Commandes #2 à #78 = boutons-poussoirs SKB3 à SKB79, entrées logiques #3 à #79
...
Commande #79 = bouton-poussoir SKB80, entrée logique #80
Commande #80 = bouton-poussoir SKB81, entrée logique #81
Commandes #81 à #87 = boutons-poussoirs SKB82 à SKB88, entrées logiques #82 à #88 "non gérées"
...
Commande #88 = bouton-poussoir SKB89 = augmentation valeur durée anti-rebonds
Commande #89 = bouton-poussoir SKB90 = diminution valeur durée anti-rebonds
Commande #90 = bouton-poussoir SKB91 = augmentation valeur canal MIDI
Commande #91 = bouton-poussoir SKB92 = diminution valeur canal MIDI
Commande #92 = bouton-poussoir SKB93 = augmentation valeur vélocité notes MIDI
Commande #93 = bouton-poussoir SKB94 = diminution valeur vélocité notes MIDI
Commandes #94 et D#95 : non utilisées

Entrée MIDI
Non utilisée dans ce montage (juste en prévision d'une évolution future).

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 sur la prise de sortie MIDI OUT mais pas sur l'entrée MIDI IN, pour éviter toute boucle de masse entre équipements.

Prototype

Réalisé sur plaque d'expérimentation et testé avec mon petit module d'interface MIDI 011.

controleur_midi_008b_proto_001a      

Ce prototype testé avec 16 voies d'entrées analogiques et 96 entrées logiques fonctionne parfaitement.

Logiciel du PIC

Logiciel non disponible sur ce site.

Circuit imprimé

Non réalisé par mes soins, vue 3D seulement pour aperçu.

Historique

01/01/2017
- Première mise à disposition.