Electronique > RéalisationsProduction sonore > Boîte à bruits 003c

Dernière mise à jour : 21/01/2024

Présentation

La présente réalisation permet de produire des sons et bruits sur 9 canaux de tonalité (tone) et 3 canaux de bruit (noise).
   
boitabruit_003c_pcb_3d_front  boitabruit_003cb_pcb_3d_front
 
Le circuit est basé sur un microcontrôleur PIC et trois générateurs de son SN76489. Les réglages sonores peuvent se faire de façon locale avec 5 potentiomètres ou à distance grâce à une entrée MIDI.

   

Avertissement

A ce jour (21/01/2024), les neuf générateurs de tonalité sont fonctionnels, mais l'interface MIDI et les entrées de commande ne le sont pas encore. Le prototype est encore en phase de développement.

   

Schéma

Une pincée de commandes numériques et un petit mélangeur audio analogique, pour une production sonore dont il reste à prouver l'utilité.
   
boitabruit_003c
   
Présentation du SN76489

Le circuit intégré SN76489 est composé de 3 générateurs de tonalité (Tone Generator #1 à #3) et d'un générateur de bruit (Noise Generator). Tous les signaux sont mélangés en interne (Analog Summer) avant d'être mis à disposition sur une broche unique "Audio Output".

   
sn76489_block-diagram_001a
   

Contrairement à ses "ancêtres" SN76477 ou SN76488 qui réclamaient un certain nombre de composants périphériques, le SN76489 réclame des commandes numériques pour savoir quel type de sons il doit produire (en fréquence et en amplitude). Ces commandes numériques doivent être appliquées sur les entrées de données D0 à D7 (bus 8 bits) et validées par la broche WE (Write Enable). La broche CE (Chip Enable) doit être active pour que les commandes appliquées soient prises en compte.

Si dans des anciens jeux vidéo un seul composant de ce type était jugé suffisant, ma folie des grandeurs m'a poussé à tripler le nombre de sources audio, en utilisant trois SN76489. Entre nous - et vous l'aurez probablement compris - c'est plus un jeu qu'un défi ;)

 
Pilotage de l'ensemble

Comme le SN76489 réclame des commandes numériques (informatiques), j'ai décidé d'utiliser un microcontrôleur pour le "séquencer". Les signaux analogiques ou numériques présents sur les lignes RA0 à RA5 du PIC sont les commandes utilisateur qui dictent le mode de fonctionnement du générateur sonore (ou qui en d'autres termes permettent de décider le type de signaux sonores que les SN76489 doivent délivrer).

Si toutes les entrées analogiques Cde1 à Cde5 sont à 0 V, le générateur de sons est désactivé (aucun son)
Si au moins une des entrées analogique Cde1 à Cde5 présente une tension supérieure à 50 mV, le générateur de sons est activé. Dans ce cas, les son délivré dépend de la tension appliquée sur les entrées analogiques Cde1 à Cde5

Si l'entrée Cde6 est à 0V, les données MIDI entrantes sont ignorées.
Si l'entrée Cde6 est à +5V, les données MIDI entrantes sont prises en considérations.
 

Cde6 (RA5)
MIDI
Cde5 (RA4)
An4
Cde4 (RA3)
An3
Cde3 (RA2)
An2
Cde2 (RA1)
An1
Cde1
(RA0)
An0
Description
0 0 0 0 0 0 Générateur désactivé, MIDI désactivé
0 0-5V 0-5V 0-5V 0-5V 0-5V Générateur activé si au moins une entrée Anx > 50 mV, MIDI désactivé
5V 0 0 0 0 0 Générateur désactivé, MIDI activé
5V 0-5V 0-5V 0-5V 0-5V 0-5V Générateur activé si au moins une entrée Anx > 50 mV, MIDI activé
x 5V 5V 5V 5V 5V Mode aléatoire, MIDI désactivé
   
Gestion MIDI
Le texte qui suit décrit le mode de fonctionnement de cette boite à bruits 003c à partir de données MIDI entrantes. Ce mode de fonctionnement peut bien sûr évoluer, puisque l'objectif final n'est pas figé dans le roc.

Conversion Note MIDI => Fréquence
La note MIDI de référence utilisée pour le calcul de la fréquence à laquelle doit travailler un générateur sonore est celle qui correspond au LA3 (note numéro 69 dans la norme MIDI).
   
boitabruit_003c_disp_midi_rx_069-la3
   
Ainsi, pour chaque note MIDI reçue, le calcul mathématique suivant est effectué par rapport à cette note de base :
Freq = 440 * pow(2, (NoteIdx-69) / 12)
   
Polyphonie
Le circuit possédant 9 générateurs distincts, il sera possible de jouer 9 notes simultanément. J'ai choisi de façon tout à fait arbitraire d'associer un canal MIDI différent pour chacun des 3 blocs générateur de son. Un quatrième canal MIDI est dédié aux générateurs de bruit.

Si les sorties des SN76489 sont mélangées comme je l'ai fait sur mon prototype, alors tous les sons auront la même forme (le même timbre), quelque soit le canal MIDI utilisé. Si en revanche les sorties des SN76489 sont traitées (filtrées, modulées, etc) de manière séparée, il sera possible d'avoir des sonorités différentes pour chaque bloc de 3 générateurs. Bien entendu, les possibilités resteront dans tous les cas bien inférieures à ce qu'on peut faire avec un synthétiseur maison construit sur la base d'un microcontrôleur dernier cri. Le but ici est rappelons-le, de s'amuser et non de jouer à la concurence.

   
Ecran LCD
A l'heure qu'il est, je ne sais pas encore ce que je lui ferai afficher... Au minimum, il permet de s'assurer que le PIC démarre bien.
 
Mélange et amplification des signaux BF
Les sources audio délivrées par chacun des SN76489 sont mélangées par de simples résistances (R1 à R3) et le résultat (AMix) est envoyé à un amplificateur audio intégré de faible puissance, le LM386 (U5).
 
Alimentation
Une alimentation de 9 V (valeur exacte non critique) est requise pour l'amplificateur de puissance et une tension de 5 V est réclamée par les circuits logiques (microcontrôleur PIC et générateurs de son SN76489). Pour le 5 V "logique", on reste dans le traditionnel facile : un régulateur de tension de type LM7805 (U101) convient parfaitement.

 

Prototype (SN76489)

Réalisé selon implantation montrée plus loin.

   
boitabruit_003c_proto_rm_001a boitabruit_003c_proto_rm_001b boitabruit_003c_proto_rm_001c boitabruit_003c_proto_rm_001cb 
   
Sur ce prototype, j'ai oublié d'implanter le connecteur ICSP sur le PCB, qui me permet de programmer le PIC sans avoir à le retirer de la carte. Pas grave, j'ai caché le connecteur côté soudures et ajouté quelques fils. La correction est apportée sur le dessin du PCB mis à disposition.

A l'origine, j'avais prévu un quartz de 12 MHz (visible sur la première photo ci-devant) avec activation de la PLLx4 dans le PIC pour disposer d'une horloge interne de 48 MHz (12 MHz pour Fosc/4). Je comptais utiliser les interruptions d'un module Timer du PIC pour délivrer le signal d'horloge aux SN76489, mais malheureusement cette façon de faire n'a pas donné de bons résultats. Elle accaparait trop de ressources processeur (oui, une seule ligne de code, mais répétée rapidement et inlassablement), ne laissant plus assez de temps pour les autres routines (notamment affichage LCD et gestion MIDI). J'ai donc remplacé le quartz de 12 MHz qui monopolise les deux broches OSC1 et OSC2 du PIC par un oscillateur externe de 16 MHz qui ne monopolise que la broche OSC1. 


boitabruit_003c_proto_rm_001d boitabruit_003c_proto_rm_001e

Le PIC peut ainsi être configuré en mode EC (External Clock) sans PLL et délivrer ainsi sur sa broche OSC2 un signal d'horloge de 4 MHz (Osc/4) parfaitement adapté aux SN76489. A noter qu'en procédant ainsi, j'ai dû effectuer un pontage entre les broches OSC2 et RC5, cette dernière ligne ayant été reconfigurée en entrée pour éviter tout dégât irreversible (l'opération m'a semblé plus simple que celle consistant à couper une piste sur le circuit imprimé pour isoler RC5). Avec l'oscillateur externe et le signal de 4 MHz fourni par le PIC sans routine logicielle particulière, je dispose maintenant de toutes les ressources nécessaires pour le reste.

J'avoue avoir passé pas mal de temps pour comprendre comment étaient organisés les registres du SN76489 qui permettent de déterminer la fréquence et le niveau des sons produits. Pour le bus de données 8 bits (D0..D7), le fabriquant TI indique dans son datasheet que D0 est le bit de poids fort (MSB) et que D7 est le bit de poids faible (LSB), ce qui est perturbant pour un esprit tel que le mien (généralement, D7 correspond au bit de poids fort et D0 au bit de poids faible). Comme je ne suis pas du genre à abandonner facilement, j'ai persisté jusqu'à obtenir un son pour chacun des 9 générateurs de tonalité. Mission accomplie !

Remarque : j'ai éprouvé quelques difficultés avec le PIC 18F47K40, mal implémenté dans mon outil de développement. Pour cette raison, j'ai basculé temporairement vers le 18F46K22 qui heureusement possède le même brochage. 

Le système n'est pas encore totalement opérationnel. La partie matérielle est terminée et validée, mais il reste à finaliser le logiciel du PIC.

   

Circuit imprimé (PCB)

Circuit imprimé réalisé en double face.
   
boitabruit_003c_pcb_components_overlay  boitabruit_003c_pcb_components_top
PCB du 03/12/2022
   
Dessin du PCB (03/12/2022)
   
Une version 003cb verra probablement le jour, dans laquelle le quartz de 12 MHz sera remplacé par un oscillateur externe de 16 MHz.
   
boitabruit_003cb_pcb_components_top
PCB (non terminé) du 20/01/2024

   

Logiciel du PIC

Pas encore finalisé, mais si vous souhaitez jouer avec le logiciel qui m'a servi pour les tests, il suffit de me le demander ;)

   

Historique

21/01/2024
- Avancées notables dans le développement du logiciel du PIC (qui pour autant n'a toujours pas de but précis).
- Remplacement du quartz 12 MHz par un oscillateur intégré à quartz de 16 MHz.
- Ajout photos prototype désormais fonctionnel (dans les grandes lignes).

04/12/2022
- Ajout photo prototype (pas encore fonctionnel).
- Mise à disposition du dessin du PCB.

27/11/2022
- Première mise à disposition