Le circuit intégré SAB0600, qui n'est pas vraiment récent, permet de réaliser facilement un gong à trois tons (Ding
Dung Dong) avec une décroissance progressive du
volume (voir page générateur
gong 001). Ce circuit est difficile à trouver de nos jours et
je me suis demandé s'il n'y avait pas un moyen de le "remplacer" par un
composant plus moderne. Un PIC, par exemple...
Comme je ne suis pas
très doué, j'ai essayé plusieurs méthodes et plusieurs montages. Le
dernier - qui malheureusement est le plus "complexe" - est celui qui
donne le résultat sonore le plus satisfaisant.
Principe de fonctionnement
Avant
de penser clônage, il faut déjà savoir quoi clôner. Le SAB0600 comporte
une circuiterie logique interne qui fonctionne ainsi :
Un
oscillateur basse fréquence produit un signal d'horloge général dont la
fréquence peut être comprise entre 5 kHz et 40 kHz (ça peut être plus
large mais sans trop d'intérêt comme on le verra plus loin). Fixons par
exemple la fréquence de l'horloge de base à 13,2 kHz.
Trois circuit diviseurs vont recevoir l'un après l'autre
cette horloge de base, avec un recouvrement dans le temps.
- Le premier diviseur divise le signal de l'horloge de base
par 20, ce qui donne une
fréquence de note de 660 Hz (Mi4, Ding).
- Le second diviseur divise le signal de l'horloge de base par
24, ce qui donne une
fréquence de note de 550 Hz (Do4, Dung).
- Le troisième diviseur divise le signal de l'horloge de base
par 30, ce qui donne une
fréquence de note de 440 Hz (La3, Dong).
Comme on peut le constater, la valeur de 13,2 kHz donnée à l'horloge de
base n'était pas liée au hasard ;-)
Trois
circuits atténuateur permettent de donner l'effet de décroissance à
chacune des notes produites. Dans le circuit SAB0600 original, cette
fonction est assurée par des générateurs d'enveloppe constitués par des
convertisseurs numériques analogique 4 bits, qui peuvent restituer 16
niveaux d'amplitude différents. Les paliers de décroissance ne
s'entendent que très peu quand les notes s'éteignent rapidement, mais
on les entend très nettement quand la vitesse de décroissance est
longue (fréquence de l'horloge de base réduite). La vidéo
YouTube que j'ai faite avec le SAB0600 en fonctionnement le
met très bien en évidence.
Voilà,
sachant cela, il nous faut produire ces trois notes avec une
décroissance aussi "naturelle" que possible. Et je vais vous avouer un
secret, je n'ai pas toujours respecté les fréquences énoncées ci-avant.
Mais après tout quelle importance puisque le SAB0600 ne le fait pas non
plus systématiquement ! L'important est bien de respecter les intervales entre tons, non ?
Pensées premières...
Pour
quelle solution opter
? Produire les trois notes de base avec un PIC n'est pas insurmontable,
mais il faut aussi les faire décroitre. Pour cela deux solutions : soit
attribuer les trois signaux générés à des broches séparées et
les
mélanger ensuite, soit faire le mélange en interne, et n'utiliser au
final qu'une seule broche de sortie. L'exercice de mélange interne me
plait bien car il me semble à priori moins simple. Je suis donc parti avec
l'idée de délivrer un signal PWM qui contient toutes les notes
décroissantes, avec tout de même un petit filtre passe-bas pour ne pas
être trop embêté par la fréquence même du signal PWM qui transporte
tout le monde. Dans un premier temps j'ai cherché quel type de PIC
utiliser. Un circuit en boîtier à 8 broches me semblait sympa, autant
garder la
forme d'origine du SAB0600. Un circuit avec oscillateur interne c'est
mieux, et
de préférence à 8 MHz, voire plus (32 MHz n'est plus du luxe). Et s'il
n'est pas cher, on a tout compris. Un circuit qu'on trouve facilement
: on ne peut pas dire de quoi sera fait demain, mais le code logiciel devrait
normalement pouvoir être adapté à un autre modèle "du futur" sans
problème. Mon choix s'est d'abord porté sur un 12F683. Mes
premiers tests ont consisté à produire les trois notes de base à partir
de l'oscillateur interne 8 MHz. Sans les mélanger de façon logicielle
et en les sortant sur trois broches séparées pour les mixer à l'aide de
simples résistances de 47 kO, après filtrage passe-bas sommaire avec un
couple 1 kO / 100 nF pour chaque sortie. En faisant comme ça et avec
des taux de division d'un signal obtenu avec interruption Timer0 avec
préchargement à $F0, j'obtiens des fréquences de sortie plus
basses que celles données en exemple ci-avant (sans conséquence grave).
Schéma 001 - avec PIC 12F683
Un petit PIC 12F683, quelques résistances et quelques condensateurs.
Schéma
non définitif avec sorties séparées
La
première note sort sur la broche GP0 (Out_1) et est sommairement
filtrée par le réseau R1/C1, la seconde note sort sur la broche GP4
(Out_2) et est filtrée par le réseau R2/C2 et en toute logique
la
troisième note sort sur la broche GP5 (Out_3) pour
être filtrée
par R3/C3. La sommation des trois notes est réalisée grâce aux trois
résistances R4 à R6. La sortie est représentée sous forme de HP, mais
soyez assurés que si on branche directement un HP à cet endroit on
n'entendra pas grand chose.
Schéma 002b - avec PIC 12F683 (deuxième version) et 16F1705
Même
schéma que précédement mais avec code légèrement différent, sans
intérêt. Essayé également avec un 16F1705 mais là encore, pas mieux.
Schéma 002c - avec PIC 12F1822
Même
principe de base, on délivre 3 tonalités avec les mêmes intervales que
précédement, mais avec cette fois un petit circuit d'enveloppe qui
donne un semblant de décroissance après délivrance de la troisième
tonalité.
Au
démarrage, la broche RA4 du PIC est placée à l'état logique bas, ce qui
provoque la saturation du transistor Q3. Ce dernier étant saturé, le
condensateur C2 est court-circuité et le transistor Q1 délivre sur sur
émetteur une tension proche de +5 V (montage en collecteur commun /
suiveur de tension). Quand la troisième tonalité est délivrée
(sur
la broche RA2), la sortie RA4 est placée à l'état haut ce qui bloque
Q3. Le condensateur C2 se charge alors et on observe une chute de
tension progressive (et exponentielle) sur la base de Q1, chute de
tension qui se répercute sur l'émetteur de Q1. Le haut-parleur HP1 voit
ainsi à ses borne un mélange de signaux rectangulaire qui baisse
progressivement en amplitude, jusqu'à 0 V. Le résultat sonore obtenu
par cette astuce est proche du son obtenu avec le
SAB0600,
mais ce n'est pas encore exactement ce que je veux.
Schéma 002d - avec PIC 16F628A
Résultat sonore plus convaincant, mais au prix d'un nombre de composants nettement plus
élevé.
Dans
ce montage, le PIC se contente de délivrer les tonalités, les autres
composants se chargent de leur décroissance. Comme le PIC 12F1822 à 8
broches ne comporte pas assez de lignes d'E/S pouvant être configurées
en sortie, je me suis rabattu sur un bon vieux 16F628A. Trois de ses
broches délivrent les trois tons (OutA, OutB et OutC), tandis que trois
autres (DecA, DecB et DecC) commandent les circuits d'enveloppe qui
provoquent la décroissance progressive du volume sonore. Je me suis
rendu compte, tout à fait par hasard, qu'on pouvait adopter d'autres
facteurs de divisions pour aboutir aux mêmes intervales : - division par 10 au lieu de 20 - division par 12 au lieu de 24 - division par 15 au lieu de 30 Cela
permet de multiplier par deux l'intervale de temps entre deux
interruptions du Timer du PIC et de laisser plus de temps libre au
processeur.
Echantillons sonores
Je n'obtiens pas le son désiré avec le PIC 12F683 car la
méthode employé (variation du rapport cyclique de 50% à 0%)
occasionne dans le temps un changement de timbre trop marqué (normal,
les variations de rapport cyclique occasionnent une modification du
contenu spectral).
Son produit par le montage avec PIC 12F683 - Ne me convient pas.
Si je n'utilise pas de signal PWM mais seulement les trois notes de
base (les unes après les autres, avec ou sans chevauchement), pas de
signal parasite en fond et pas de décroissance du tout. Mais ça
commence à se rapprocher du son du SAB0600 :
Son produit par le montage avec PIC 12F1822 - Mieux mais pas "parfait".
On peut, j'en suis sûr, faire beaucoup mieux...
Son produit par le montage avec PIC 16F628A - Pas trop mal, non ?.
Bis repetita : on peut, j'en suis sûr, faire encore mieux...
Logiciel du PIC
Programmes source et fichiers compilés dans l'archive zip ci-après. Gene_gong_002 - (20/09/2015)
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page PIC
- Sources.