Modérateurs: Modération Forum DIY, Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 14 invités

DSPIY + Atmega 2560

Message » 18 Juin 2015 21:56

Bonjour,
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 :


Image

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
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 19 Juin 2015 22:35

j'avais raté cette bifurcation du sujet domotique ;)
Tout ça m'a l'air bien réfléchi. yapluka. :)
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 20 Juin 2015 13:58

Ouais j'ai essayé de définir un cahier des charges fixe pour pas partir dans tous les sens :oops: Après si tout ça marche bien je suis partant pour ajouter deux-trois trucs auxquels j'aurai pas pensé !
Mais bon, comme tu dis maintenant.. Yapluka :wink: J'espère finir le gros du code dans le week-end, ou début de semaine prochaine, pour pouvoir prototyper tout ça sur une breadboard. Je vais bientôt acheter l'écran (NHD-3.12-25664UMB3) et le module bluetooth (RN-52, celui dont parlait Thierry à un moment)
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 26 Juin 2015 15:36

Bonjour,
J'ai pas mal avancé sur le code, il me reste un soucis avec les interrupts des Pcf8574 mais je me demande si c'est pas les chips qui ont un soucis : je les avais acheté en lot sur ebay, et j'en ai eu quelques un qui marchaient pas du tout, et la l'interrupts fait des trucs assez bizarres.. à voir.
Je vais commander l'écran, le module bluetooth d'ici la fin de la semaine, plus quelques composants.
J'ai un peu réfléchi à la partie alimentation également. Thierry m'a conseillé, d'après ses tests, d'isoler l'alimentations des dspiy car il a eu du bruit sinon. Du coup je pense partir sur le LT8301 de linear technology et un transfo d'isolement de wurth elektronik. J'ai commandé quelques samples, je ferai des essais asap. Avec une alimentation de 24V, on a 5v et >1A en sortie du transfo. Le dspiy c'est environ 500mA. Thierry m'a conseillé 1A, surtout si j'ai la carte 1452. Ce qui est pas mal avec l'alimentation 24V c'est que ça permet d'alimenter une carte prepre RIAA genre le pacific.
En amont du LT8301, je sais pas encore trop quoi mettre. Externe/interne, linear/découpage.. Découpage j'ai un peu peur de polluer tout le préampli, et donc limiter l’intérêt de l'isolation..
La puce a aussi une pin Enable, ce qui permet de mettre en standby l'alimentation, donc éteindre complètement les dspiy pour limiter leur consommation. La consommation de la puce en standby c'est ~1mA il me semble d'après la datasheet.
Des avis, conseils ?
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 27 Juin 2015 16:20

Je me demande s'il faut pas également isoler l'I2S entre le module bluetooth et le dspiy, pour bien séparer tout ce qui concerne la logique etc et la partie audio ?
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 27 Juin 2015 18:03

Misu a écrit:Je me demande s'il faut pas également isoler l'I2S entre le module bluetooth et le dspiy, pour bien séparer tout ce qui concerne la logique etc et la partie audio ?

inutile a mon avis.
ce qui gene avec l'usb ou l'i2s c'est la connexion entre le 0V de la source et celui du DSPiy. Ca ramène le bruit de la source dans le dspiy et inversement ce qui peut etre gênant et perdre en rapport S/B.
bluetooth il n'y a pas d'autre appareil branché et pour la carte ce sera ton alim interne qui ne sera pas bruitée qui est déjà celle de l'arduino et liée au dspiy.
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 27 Juin 2015 18:12

Ben à priori je pars sur des alimentations isolés, même entre l'atmega et les dspiy. Donc si j'isole pas l'i2s je pers cette isolation, non ? Après est-ce que ça vaut vraiment le coup d'isoler l'atmega et le dspiy, ça je ne sais pas..
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 27 Juin 2015 18:29

Misu a écrit:Ben à priori je pars sur des alimentations isolés, même entre l'atmega et les dspiy. Donc si j'isole pas l'i2s je pers cette isolation, non ? Après est-ce que ça vaut vraiment le coup d'isoler l'atmega et le dspiy, ça je ne sais pas..

Comme on me faisait remarquer, isoler l'alim sert surtout a controler là ou les 0V se rejoignent ;)

Il y a eu des discussions a ce propos sur le sujet RPi + Dspiy. Ca doit bien ressembler.
diy-filtrage-equalisation/rpi-dspiy-t30060695.html
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 27 Juin 2015 19:12

Justement, si le dspiy et l'atmega sont isolés, sauf pour la connexion I2S, leur gnd se rejoindre au niveau de la connexion. Et ça me parait risqué, non ?
J'étais déjà tombé sur ce fil, je vais regarder ça tranquillement
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 27 Juin 2015 21:22

oui moi aussi ca me gene.
je fais un dessin pour mieux se rendre compte.

Image

Si t'isoles rien, une jolie boucle 1-2-3.
En analogique, ca choque. En numérique, parait que ça risque de faire du jitter. Perso jamais pu le mesurer ni le voir, mais admettons.

Si t'isole le chemin 2, les 0V s'équilibrent seulement par l'I2S ce qui est le pire. Les trigger ne comptent pas puisque isolés.
Donc faut isoler l'I2S (chemin 3) aussi. Ca fait un peu usine a gaz.

Perso, si je devais isoler, je n'isolerai que l'I2S et laisserai le 0V commun entre DSPiy(s) et Atmega.

Mais je parierai que si les 0V étaient communs partout, y compris sur le trigger, les déséquilibres éventuels de 0V (parasites) auraient plein de moyens de s'équilibrer et ne pollueraient pas nécessairement l'I2S plus que ça.
Ma logique c'est soit 0 point de contact (tout isolé), soit 1 seul contact bien choisi (éviter l'I2S qui est critique), soit plein de points de contacts, pour que l'équilibre des plans de masse se fasse au plus près.
Dernière édition par alkasar le 28 Juin 2015 15:43, édité 1 fois.
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 28 Juin 2015 14:40

L'I2S est prit directement sur le module bluetooth, donc la boucle est un peu plus grande, mais ça doit pas changer grand chose. Après isoler l'alim c'est vraiment pas compliqué avec le tl8301 : le chip, le transfo et 2/3capa/diode. Isoler l'I2S ça a l'air un peu plus délicat, je vais regarder ça. Dans tous les cas, il me faut un dcdc converteur pour le 5v de l'atmega
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 28 Juin 2015 19:39

Je cherche un régulateur 3V3 pour le module bluetooth, l'écran et l'µc. Je suis bien tenté de mettre le même que ceux du dspiy mais je me demande si c'est bien nécessaire des régul de compét comme ceux la. L'écran consomme 250mA au max, le module bluetooth environ 50mA. L'µC je sais pas trop pour l'instant. S'il pouvait avoir une pin Enable ça serait top. Il y a aussi le LP2985, c'est celui utilisé sur la carte arduino Méga. Des idées/avis ?
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 28 Juin 2015 21:15

Les TPS du DSPiy ont été choisis spécialement pour la partie analogique. Par simplicité et réduction du nb de références, Thierry a mis le même pour la partie digitale.
Ils sont super, overkill pour ton besoin mais si tu peux te permettre le prix et que tu sais les souder car ils sont petits, yapa de raison.
Le LP2985 semble limité a 250mA, un peu juste.

Un régulateur fixe 3V3 LDO low-noise fera l'affaire. je n'en connais pas particulièrement. Le spécialiste c'est Tazz28 ;)
outil de sélection ici http://www.ti.com/ldo
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 29 Juin 2015 14:09

Super ton lien, je regarde ça ce soir :bravo:
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline

Message » 29 Juin 2015 14:48

Petit changement au niveau du block diagram : Les sorties aux n'existent plus sur le dspiyII. On peut utiliser la led pour visualiser le signal. Elle sort en PWM, dont on peut rentrer tout ça dans l'µC. Par contre elle n'est pas dispo si on met la carte additionnelle. On peut aussi utiliser l'auto-standby et la sortie trigger pour mettre en standby le système lorsqu'il n'y a plus de signal. Un peu moins flexible et pas de vumètre mais ça devrait marcher.
Pour les 2 autres dspiy, ils n'utilisent que les entrés analogiques. On peut donc imaginer un détecteur de signal, avec simplement un aop en comparateur. Ca permettrait d'allumer les DSPIYII_2/3 seulement en présence d'un signal multi-canals, et de les éteindre au bout d'un certain délai dès qu'on repasse en stéréo. Un peu comme le détecteur de signal d'Alkasar seulement la gestion du delai etc serait géré par l'µC.
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • offline


Retourner vers Filtrage actif, Equalisation et Processeurs

 
  • Articles en relation
    Dernier message