Dernière mise à jour :
24/10/2010
Présentation
Voici la description d'un petit orgue
électronique que m'a demandé de réaliser un professeur de guitare. Cet
instrument dispose de 13 touches pour une étendue d'un
octave, de Do3 à Do4, avec La3 central à 440 Hz (voir page
Notes musique
pour plus de détails sur les fréquences générées).
Deux boutons
poussoirs permettent de descendre ou
de monter la tonalité des notes jouées sur -3 octaves à +2 octaves par
cran d'un octave, ce qui permet de couvrir la plage de Do0 à Do6 en six gammes.
L'appareil
dispose d'une sortie audio locale capable d'attaquer directement un
petit
transducteur piezo (générateur sonore intégré) et d'une sortie
MIDI qui
délivre un évenement MIDI de type Note en adéquation avec la
touche pressée et l'octave
sélectionné. La sortie MIDI doit être reliée à un générateur sonore
équipé d'une entrée MIDI tel que synthétiseur, expandeur ou ordinateur
avec instruments virtuels.
En
mode Audio local, une seule note peut être jouée à la fois, l'orgue
est dans ce cas de type monophonique. La note est audible tant qu'on
appuie sur une touche, avec un effet de type "rafale" : note jouée
pendant un certain temps, coupure brêve, note à nouveau jouée, etc. La
raison de ce comportement sera expliquée plus loin.
En mode MIDI, les notes peuvent être jouées de deux façons
différentes :
- mode "Note brève" - dans ce mode seul l'appui sur
les touches du clavier est surveillé, le relachement ne l'est pas. La
note est jouée avec une durée fixe, qui ne dépend pas du temps pendant
lequel on appuie sur le clavier.
- mode "Note normale" - dans ce
mode l'appui et le relachement des touches du clavier sont pris en
compte. La note dure autant de temps qu'on appuie sur les touches
du clavier. Dans ce second mode de fonctionnement on peut plaquer des accords, l'instrument
étant dans ce cas polyphonique (chose que je n'avais pas espérée quand j'ai
débuté sa conception).
Remarque : les sorties MIDI et Audio local ne peuvent pas être activées simultanément, il faut choisir l'une ou l'autre.
Une
option permettant de jouer avec des touches sensitives sera évoquée,
pour ceux qui peinent à appuyer sur des touches mécaniques.
Avertissement
Cet
instrument n'a pas été conçu pour accompagner quelqu'un. On
peut éventuellement s'en servir pour ça en mode MIDI, mais en mode
audio local, les notes durent un peu quand on relache les touches.
Voyez donc cet appareil un peu comme un guide chant d'un type
particulier.
Schéma
Vous avouerez qu'il n'y a tout de même pas grand chose quand on fait l'énumération des capacités de cet instument !
Principe de fonctionnement
Il est assez simple et repose
quasiment intégralement sur le logiciel forgé dans le PIC 18F2520. Il consiste
à lire en permanence l'état des entrées du PIC sur lesquelles sont
reliées les touches du clavier, et à réagir en cas de changement d'état
(pression ou relachement d'une touche).
Dans
le mode Audio local, on lit l'état des seize entrées câblées
aux boutons poussoir. Si une touche Note est appuyée, on génère
sur la ligne AnaOut un signal rectangulaire dont la fréquence
correspond à la note en question. Si après la génération de cette note
l'entrée qui était activée l'est toujours, le PIC rejoue la même note.
La légère coupure audio qui en résulte (entre les deux productions
sonores) donne un petit effet que l'on peut qualifier de sympathique si
on l'aime bien. Pour ma part ça ne me gêne pas. La durée de chaque
"séquence" de note peut être ajustée dans le code si nécessaire, la
valeur fixée par défaut est de 500 ms. On retiendra simplement qu'il
s'agit du temps minimal pendant lequel les notes sont entendues même si
l'appui sur les touches est très bref.
Dans le mode MIDI, les notes
sont générées de façon différentes selon le mode de jeux spécifié par
l'utilisateur au travers de la touche Mode. Lors de la mise sous
tension, les notes MIDI sont composées d'un évenement MIDI Note On
quand on appuie sur une touche et d'un évenement MIDI Note Off quand on
relache la touche. Un appui sur la touche Mode conduit à la production
d'une note MIDI brève composée d'un évenement MIDI Note On suivi peu de
temps après d'un évenement MIDI Note Off, même si la touche du clavier
n'est pas relâchée.
Horloge de référence
Il aurait été
possible d'utiliser l'oscillateur interne 8 MHz du PIC mais pour des
questions de stabilité et de justesse j'ai préféré utiliser un quartz
externe de 12 MHz. Cette fréquence de base suffit pour jouer les notes
les plus aigues en mode audio local.
Sortie audio
La
ligne RC5 du PIC est configurée en sortie et c'est sur cette broche que
l'on récupère le signal BF de la note jouée en mode local (ligne
appelée AnaOut pour l'occasion). La sortie du PIC ne peut débiter qu'un
courant maximal de 25 mA, ce qui est bien insuffisant pour attaquer
directement un haut-parleur. Mais il est possible en revanche de
piloter directement un petit buzer piezo, dont la "consommation" est
bien plus faible. La broche RC5 peut également servir de sortie audio
au niveau ligne, en intercalant un pont diviseur résistif de rapport
1/10 environ (résistance série de 10 kO suivie d'une résistance
parallèle de 1 kO par exemple). Cela permet de ramener l'amplitude du
signal de 5 V à 500 mV, ce qui est plus compatible avec une sortie
de type ligne. Un condensateur de liaison peut éventuellement être
ajouté mais cela n'est pas obligatoire puisque la tension de sortie sur
la ligne RC5 est de 0 V au repos (quand aucune note n'est jouée en mode
audio local).
Alimentation
L'ensemble fonctionne sous
une tension d'alimentation régulée de +5 V. Il n'est pas impossible que
vous trouviez le schéma d'une telle
alimentation sur ce site...
Autre PIC possible ?
Oui,
on peut utiliser d'autres PICs pour disposer des mêmes fonctions. La
première version de cet orgue était basée sur un 16F628A, mais je ne
l'ai pas gardé car il fallait absolument disposer des deux boutons pour
descendre ou monter les octaves. J'ai bien essayé d'utiliser un clavier
matricé 4 x 4 touches mais se posait le problème de la gestion des
"touches enfoncées / relâchées" en mode "notes normales". J'aurais sans
doute pu fouiner plus loin, mais j'ai joué la simplicité en adoptant un
PIC doté de plus de lignes d'entrées / sortie. Finalement bien m'en a
pris car cela m'a permis de rajouter une sortie audio locale qui
n'était pas du tout prévue au départ. En résumé, si votre besoin se
résume à générer des notes MIDI "courtes" à chaque appui sur un
poussoir, vous pouvez parfaitement utiliser un 16F628A et sa matrice 4
x 4 de boutons poussoirs.
Enregistrement des notes jouées ?
Le
PIC dispose d'un espace mémoire (EEProm) que l'on pourrait mettre à
profit pour enregistrer une séquence de quelques notes. Je ne me suis
pas penché sur la façon de faire mais à vue de nez ce ne devrait pas
être trop difficile.
Utilisation de touches sensitives
Tel
que présenté ci-avant, l'instrument requiert des boutons poussoirs ou
touches clavier électromécaniques pour être utilisable. Et il faut
appuyer sur ces touches, ce qui peut causer des crampes en fin de
semaine. Et bien figurez-vous qu'il y a la possibilité d'ajouter
quelques composants bon marché pour obtenir un fonctionnement avec des
touches sensitives. Le schéma qui suit représente une extension
possible permettant de jouer avec l'instrument en effleurant simplement des
touches sensibles du bout des doigts.
On
exploite la
haute impédance d'entrée des portes logiques incluses dans les circuits
intégrés CD4011 (circuits U2 à U4) pour assurer la fonction de
"détection pose doigt". Pour ce faire, il suffit de faire contact
avec le bout du doigt entre les entrées des portes logiques et la
masse. Au repos, quand le doigt n'est pas posé, les entrées des portes
logiques sont portées à un potentiel positif de +5V au travers des
résistances de forte valeur R101 à R116 de 4,7 MO. Voir aussi page
Bases - Touches sensitives.
Les
sorties des portes logiques, qui sont câblées en inverseuses,
présentent donc des états logiques bas (pratiquement zéro volt) et de
fait ne font pas conduire les transistors inclus dans les circuits
ULN2803 qui font suite. Quand on pose le doigt entre une entrée de
porte et la masse, la sortie de la porte en question change d'état car
la résistance ohmique du bout du doigt que l'on pose est bien
inférieure à 4,7 MO et l'entrée voit donc un état logique plus "bas"
que "haut". La sortie de la porte qui passe à l'état logique haut
(pratiquement +5 V) fait conduire le transistor intégré dans le circuit
ULN2803 qui suit. Par exemple si on pose le doigt sur la touche TS_Mi3,
les deux entrées (broches 1 et 2) de la porte logique U3:A passent à
l'état logique bas, la sortie de cette même porte U3:A (broche 3) passe
à l'état logique haut et le transistor inclus dans U6 et dont la base
est raccordée à la patte 5B (broche 5, B comme
Base)
est rendu passant. De ce fait, on se retrouve avec un espace
emetteur-collecteur passant entre la masse (broche 9 de U6 / ULN2803)
et la sortie 5C (broche 14, C comme
Collecteur).
Et le résultat est identique à celui que l'on aurait eu en appuyant sur
le bouton poussoir SW5 / Mi3, la note Mi3 est jouée.
Remarques :- les CD4011 peuvent être échangés sans aucun problème par des CD4001 (vous pouvez même mixer les deux).
-
il n'est à priori pas obligatoire de relier les bornes COM (commun en
broche 10) des ULN2803 au +5 V, car les sorties ne sont pas raccordées
sur des charges inductives. J'ai préféré le faire, par habitude. Dans
tous les cas ça ne fait pas de mal.
- je n'ai pas jugé utile
d'insérer une résistance de faible valeur pour limiter le courant de
court-circuit des condensateurs d'entrées par les transistors des
ULN2803, je juge ce courant assez faible pour être sans risque pour les
transistors intégrés. Il est en effet de quelques centaines de mA sur
des pointes brêves et les transistors intégrés le supportent sans
crainte. Si vous jugez que le courant de décharge des condensateurs est
préjudiciable à la durée de vie des transistors (ce que je ne pense
pas) ou à celle des boutons poussoir (ce que je ne pense pas s'ils sont
de bonne qualité), alors vous pouvez insérer des résistances de valeur
comprise entre 10 et 100 ohms en série avec l'élement de commande
(bouton poussoir ou transistor).
Ah au fait, peut-être est-il utile de rappeler la structure interne du ULN2803...
ULN2803Prototype
Réalisé sur plaque d'expérimentation sans soudure.
Le
circuit n'a pas fonctionné parfaitement du premier coup. Ca allait bien
pour la partie audio locale (avec le petit buzzer visible sur la
quatrième photo), mais les notes MIDI étaient toujours
envoyées "complètes" (Note On et Note Off) quand on appuyait sur les
touches sans les relacher, quelque soit le mode choisi. J'ai cherché un
bon moment avant de trouver la faute : j'avais inséré une ligne de code
de débugage pour faire des tests dans un mode figé, et j'avais tout
bonnement omis de la retirer ensuite. C'est souvent des petites choses
comme ça qui vous amusent pendant quelques heures. Je n'ai pas monté
l'intégralité de la partie à touches sensitives, que j'ai déjà faite
plusieurs fois auparavant et je sais que ça fonctionne comme ça. Comme
les photos du prototype peuvent en attester, je n'ai pas posé de
condensateur sur la totalité des entrées. Je pensais que les "rebonds"
(plutôt les faux contacts) obligatoirement générés lors de la pose de
mes fils de tests poseraient des problèmes, mais en fait ils étaient
assez brefs (contacts établis assez rapidement) et le temps processeur
passé pour gérer le premier changement d'état constituait à lui seul un
anti-rebond logiciel de fortune. Attention, je ne dis pas là que les
condensateurs d'entrée peuvent être supprimés ! Vous noterez également
la présence de trois réseaux de résistances en ligne, bien pratique
pour économiser la place sur la plaque d'essai et sur le circuit
imprimé. Toutes les résistances intégrées n'étaient pas câblées, j'ai
pris ce que j'avais sous la main. Pour résumer, un circuit qui
fonctionne plutôt bien avec peu de moyens.
Logiciel PIC
L'archive zip dont le lien suit contient le source complet (MikroPascal
Pro
V3.8) et le fichier binaire compilé (*.hex).
Orgue
006 - PIC 18F2520 (03/10/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é en simple face. Cela m'a semblé plus simple que de ne pas
le réaliser en double face. Pour l'heure, vue 3D uniquement là pour
aperçu général.
J'ai cependant commencé un tracé pour une version sans touche sensitive et un tracé pour une version avec touches sensitives.
Clavier à touches sensitive
Il peut être réalisé de plusieurs façons. Vous pouvez utiliser des
punaises fixées sur une planche de bois fine, et souder un fil court
sur chaque pointe de punaise (les fils vont donc par le dessous et ne
sont pas visibles). Vous pouvez aussi graver un petit circuit imprimé
sur lequel sont dessinées les touches, à la taille désirée. Il peut
tout aussi bien s'agir de petits carrés que de formes approchant le
look de vraies touches, comme le montre le dessin suivant.
Ces exemples sont assez parlants je pense. La forme des touches du
clavier inférieur n'est pas une reproduction fidèle d'un vrai clavier,
l'idée est de reconnaitre visuellement les notes non altérées et celles
qui le sont, tout en limitant le risque d'en toucher deux adjaçantes en même
temps. Les trois dernières touches sensitives sont vraiment pleines et
on les localise bien à part des touches pour notes. Comme on peut le
lire sur les emballages de plats préparés, "suggestion de présentation".
Clavier à touches mécaniques
J'ai
entamé la réalisation d'un second prototype avec des boutons poussoirs
à souder sur CI. Les treize boutons des notes sont bien séparés des
trois boutons de "configuration".
Ce
prototype sera laissé entre les mains de mes enfants, c'est pourquoi
j'ai utilisé des poussoirs de bonne qualité et robustes.
Oui
je sais, les touches sensitives sont sensées être aussi robustes. Mais
il me semble aussi que les enfants aiment bien la sensation tactile et
le "clic" sonore lors de l'appui sur les touches.