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.
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".
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 ;)
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é |
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.
Réalisé selon implantation montrée plus loin.
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.
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.
Pas encore finalisé, mais si vous souhaitez jouer avec le logiciel qui m'a servi pour les tests, il suffit de me le demander ;)
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