Suite à ce sujet : http://www.homecinema-fr.com/forum/diy-filtrage-equalisation/dspiy-domotiyque-t30055295.html je me lance dans un nouveau projet : Utiliser une carte à base de atmega 2560 (arduino méga pour l'instant) en tant que master dans une installation multi dspiy, dans le but de faire du 5.1 en analogique. L'idée de départ c'était de connecter le dspiy au réseau ethernet pour pouvoir le commander depuis un ordi, un smartphone, ou de l'intégrer dans une installation domotique. Mais je me suis rendu compte de tout ce qu'on pouvait faire en plus, grâce au système de multi-dspiy, comme par exemple rajouter des entrées, ou un module bluetooth, ce qui permet de faire un préampli hyper complet. Je me suis donc fixé un cahier des charges :
Entrées audio :
- 5 entrées TOSLINK
- 2 entrées COAXIALES
- 1 entrée 5.1 analogiques
- 1 entrée analogique LINE
- 1 entrée analogique PHONO
- Bluetooth A2DP
Sorties audio :
- 18 sorties analogiques (6 par DSPIY)
I/O :
- Ethernet
- Un encodeur rotatif
- 8 boutons poussoirs
- 8 LEDS
- 4 sorties triggers programmables indépendamment
- 3 ports USB pour la programmation des DSPIY
- Ecran OLED 3,12’’
Voici le block diagram du système :

Communication entre les DSPIY et l’atmega :
Le dspiy à la possibilité de faire du multi-dspiy. Cela revient à chainer des dspiy en utilisant le système de maître/esclave. Nous parlerons ici que dans le cas qui nous intéresse, c’est-à-dire pour un signal multicanal purement analogique. Chaque DSPIY (esclave ou maître) recevra un signal audio correspondant à un ou deux canaux analogiques : les frontales, la centrale, les surrounds et éventuellement le signal LFE. Dans le cas d’un signal analogique stéréo, ou numérique, seul un DSPIY travaillera, les autres seront en standby. Dans le cas du multi-dspiy «classique» le dspiy master reçoit/affiches les données via son interface (boutons, encodeur, écran, télécommande..) et les transmet aux esclaves via sa sortie trigger. Les données sont transmises selon le protocole infra-rouge SONY. Dans notre cas, l’Atmega jouera le rôle du master, mais n’interviendra dans le traitement du signal. Les avantages d’utiliser l’Atmega sont son grand nombre d’I/O, et la possibilité d’ajouter une interface Ethernet afin de contrôler et configurer le préamplificateur à distance. La programmation du DSP n’est pas envisagée.
L’Atmega dispose de plusieurs entrées analogiques, et le dspiy dispose d’une sortie analogique auxiliaire. Cela permettra d’avoir un renseignement sur la présence de signal ou non, et éventuellement d’un vumètre comme cela est déjà le cas avec le DSPIY.
Le système de preset du préamplificateur :
Tout comme le dspiy, le préamplificateur dispose d’un système de preset, mais simplifié, car ceux-ci interviendront juste au niveau de l’interface, et des entrées/sorties. Le nombre de preset n’est pour l’instant pas limité, mais comme celui-ci sera principalement lié aux sources, il sera probablement fixé à 12 (11 entrées disponibles). Chaque preset aura plusieurs paramètres associés :
- le format d’entrée (toslink/coaxial/I2S/analogique)
- l’entrée associée
- un numéro
- un nom à afficher sur l’écran
- les triggers out à activer
- Dspiy 1_2 on /off
Contrairement au dspiy, l’encodeur, l’écran les boutons poussoirs et les leds seront assignés d’offices.
BP_0 = standby/On associé à la led_0
Bp_1 à 5 associé à led_1 à 5 sélectionne respectivement le preset 1 à 5
Bp_6 = preset suivant
Led_6 allumé si preset >5
L’encodeur s’occupe de la gestion du volume, et son bouton poussoir associé s’occupe du Mute/unMute
Communication via l’Ethernet
Il est possible d’envoyer des commandes au préamplificateur à travers le bus Ethernet. La communication se fait par simple chaîne de caractère. Voici la liste des chaîne de caractère que le préamplificateur est capable d’interpréter à ce jour :
- o ; ce caractère fait basculer le préamplificateur en standby ou le réveille.
- gXXXX ; cette chaîne permet de configurer un preset. Sa composition sera détaillée dans un paragraphe dédié.
- vXXX ; XXX désignent ici trois chiffres dont le nombre formé doit être compris entre 0 et 110. Cette chaîne permet de changer le volume
- bXX ; XX désignent 2 chiffres dont le nombre formé doit être compris entre 0 et 50. La chaine permet de changer la balance, avec 25 comme valeur centrale.
- m ; ce caractère fait basculer le préamplificateur en mute/unmute
- cXXX ; XXX désignent trois chiffres dont le nombre formé doit être compris entre 0 et 100. Cette chaîne permet de modifier le contraste de l’écran.
- pXX ; XX désignent deux chiffrent dont le nombre doit être contenu entre 0 et 12. Cette chaine permet de sélectionner un préset.
Cette liste est susceptible d’être modifiée. La syntaxe est de matière générale la suivant : un caractère de type lettre, qui indiquera au processeur sur quelle partie on veut intervenir (volume, balance..) suivit d’un nombre, indiquant la nouvelle valeur. La chaine « o ; » et « m ; » ne sont pas suivit de nombre car les fonctions auxquelles ils réfèrent sont de type booléennes (ON/OFF ou MUTE/UNMUTE). La syntaxe de la chaine de configuration de preset est différente. La chaîne de caractère se finit obligatoirement par le caractère « ; » qui indique à l’Atmega 2560 la fin de la chaîne de caractère.
Création de preset
La création de preset se fait via le réseau Ethernet.
Chaque preset peut être configuré d’une manière totalement indépendante. Ils ont chacun 6 options à renseigner :
- le format d’entrée (toslink/coaxial/I2S/analogique)
- l’entrée associée
- un numéro
- un nom à afficher sur l’écran
- les triggers out à activer
- Dspiy 1_2 on /off
Le tout formera une chaîne de caractère, qui sera envoyé au préamplificateur via le réseau. La chaine aura la forme suivante :
gXX :X :X :X :XX :X :XXXXXXXXXXXX ;
Par ordre d’apparition :
g indique au préamplificateur que nous allons créer un nouveau preset
XX nombre compris entre 1 et 12, indique le numéro de preset
X indique le format d’entrée :
1 --> Toslink
2 --> coaxial
3 --> Analogique
4 -- > I2S
X indique l’entrée sélectionnée : de 1 à 5 si toslink, 1 ou 2 pour coaxial, 1 à 3 pour analogique et enfin seulement 1 pour I2S.
XX indique les trigger à activer. 0001 en binaire active le trigg_1 ce qui correspond à 1 en décimal. 1000 active le trigg_4, ce qui correspond à 8 en décimal. Ainsi de suite, si on veut activer le trigger 3 et 4 il faut envoyer 1100 soit 12 en décimal. 1111, 15 en décimal active tous les triggers, et 0000, 0 en décimal les éteint tous. Ce système est du au fait que la communication entre le µC et la carte trigger se fait par I2C.
X indique s’il faut allumer les DSPIY 2 & 3. Si la valeur est 1, seul le DSPIY 2 sera allumé. Si c’est 2 alors seul le DSPIY3 sera allumé. Si la valeur est 3 alors les deux dspiy seront allumés.
XXXXXXXXXXXX est une chaîne de 12 caractères maximums. Cette chaine renseigne sur le nom du preset qui sera affiché sur l’écran.
Voila pour l'instant ou j'en suis. La manière donc je communique avec l'ethernet va surement en faire sourire beaucoup, mais je ne connais rien dans ce domaine, et c'est la manière la plus simple que j'ai trouvé pour pouvoir communiquer avec le préampli sans avoir de restrictions au niveau du soft. Pour l'instant j'ai juste un script python qui envoie quelque des caractères au préampli.
Niveau code, j'ai à peu près toute la structure du programme. J'ai partiellement intégré les boutons, les leds, l'encodeurs et les relais. J'ai le code pour communiquer avec les dspiy mais j'ai pas encore pu le tester. Niveau code, le plus gros sera l'intégration de l'écran, la partie sur la détection du signal et la commande du module bluetooth. Il y a toute la partie niveau pc aussi, mais la je ne sais pas du tout encore sur quoi partir.
Niveau hardware, je vais d'abord tout prototyper, après j'aimerai faire un joli pcb, et intégrer ça dans un boitier hifi2000 2U, tout ça dans le style de l'UGS, mais on en est encore loin.
Voila voila, je suis ouvert à toute critique/suggestions/conseils/etc..
Louis