Controle de 55 digipots + 64 commutateur + 7 DAC

Bonjour à toutes et à tous. Je suis un nouveau dans le monde arduino. Depuis deux ans je tente avec mon petit frère de fabriquer un synthétiseur analogique entièrement piloté par midi.

Après plusieurs mois de réflexion ont en est venu a la conclusion que pour piloté notre "machine" nous devrions apprendre à programmer les Arduinos et/ou les Teensys.

Je m'explique, afin de pouvoir piloter le synthétiseur nous comptons :

1-Remplacer les potentiomètres analogiques par des numériques ( il en a 54 ...) par SPI

2-Utiliser des D.A.C ( il y en a 6 ou 7 ) par SPI ( notamment pour le midi/CV )

3-Remplacer les commutateurs analogiques par des commutateurs numériques ( il en a 64 ...)

Comme ont est "TRES" motivé ont a déjà pas mal avancé.On a fait des recherches et on a trouvé pas mal de tutos sur le sujet sur le net. Grâce a ces précieuses aides on a déjà pu tout tester, et au final tout fonctionne comme ont l'espéré... Question puissance, on partirait sur un arduino due ou un Teensy 3.6.

Enfin tout fonctionne....Non pas vraiment car piloté par midi 2 D.A.C, ou 2 digipots, ou 2 paire de commutateurs logique, c'est pas vraiment pareil qu'en piloter une cinquantaine.

Et c'est pour cela que je sollicite vos conseil. J'ai plusieurs question et vos avis nous serait vraiment précieux. Alors commençons dans l'ordre.

1- Afin de contrôler les commutateurs logique ( MAX333) indépendamment l'un de l'autre, il nous faut 64 sorties digital. A cet effet on compte utiliser une cascade de 74h595 ( registre de décalage ). Soit un total de 8x 74h595. L'idée étant de pouvoir 64 sorties logique.

2- Afin de contrôler les digipots, eux aussi indépendamment l'un de l'autre on souhaite utiliser le SPI. La sélection ( CS ) serait assurer par une seconde cascade (ou une expansion de la première utilisé pour les commutateurs) de 8x 74h595 .

3- Pour contrôler les 7 D.A.C on souhaite utiliser le SPI pour des raisons de rapidité.

*Est-ce que tel qu'on imagine le circuit c'est possible où on va droit dans un mur ?

*Est-il possible d'avoir 2 cascade de 8x 74h595 ou est-ce qu'il vaut mieux qu'on ai qu'une seul cascade de 16x 74h595 ?

*Est-ce qu'il vaut mieux utiliser le SPI pour l'ensemble DAC, cascade de 74h595, et digipots ?

*Ou est-ce qu'il vaut mieux contrôler les 74h595 en Serial, et les DAC / Digipots en SPI ?

*A vrai dire nous sommes inquiet vis-a-vis de la latence de l'ensemble ( d'où l’idée d'utiliser un arduino/ teensy 32bits), cela étant est-ce que ça serait perceptible à l'oreille humaine ?

Enfin voilà, si vous avez des conseil, avis, on en serait vraiment enchanté .

Merci encore !

Bonsoir
Votre projet est ambitieux et intéressant. Si vous avez peur de la latence du SPI, choisissez un ESP32 : son SPI peut monter à 80 MHz

A priori notre choix se porterait sur un teensy 3.6 car il possède 3 sorties SPI.

Une de ces 3 sorties contrôlerait les DAC.

La seconde contrôlerait les Switch Logic par l'intermédiaire de deux groupes de 4 registres de décalage. ( Librairie ShiftoutX )

Et la troisième contrôlerait les digipots via 4 démultiplexeur cd4067. ( Librairie mcp41hvx ).

Un ESP32 pourrait aussi convenir d'un après les spécifications.

On aimerait bien utiliser un Arduino due car il y a une grosse communauté bien active. Mais le problème c'est qu'il n'y a qu'un seul port SPI .

Pour info, sur la carte DUE, il y a le header SPI ( au-dessus du logo DUE) qui fournit un bus SPI qui permet évidemment de raccorder plusieurs esclaves SPI, PLUS 2 bus SPI sur les USART0 et USART1.

A noter qu'il y a une bibliothèque TurboSpi qui fonctionne sur le header SPI en exploitant le DMA SPI (soit jusqu'à Mck/2 = 42 MHz quand la carte est réglée sur 84 MHz).

C'est une super nouvelle que tu m'annonces ! Je pensais qu'il n'y avait qu'un seul port SPI.

Est-il possible de contrôler les 3 ports SPI séparément ?

En faites je souhaite pouvoir utiliser plusieurs port SPI car je craint que la charge soit trop lourde ( 7 DAC + 55 digipots + 10 Shift R ). Cependant les modules ne seront pas utilisé tous en même temps.

Les 3 bus se programment séparément.

Il te faudra programmer directement les registres car la bibliothèque SPI (donc celle utilisable sur le SPI header uniquement) n'exploite probablement pas toutes les possiblités de multiplexage possibles pour les Slaves, et les bus SPI des USART0 et USART1 ne peuvent donc pas utiliser cette bibliothèque. Toutefois, le protocole SPI est l'un des plus simples, c'est donc assez facile.

Je te conseille donc de lire le chapitre SPI du datasheet du SAM3X (le microcontrôleur principal de la carte), ainsi que celui sur le mode SPI du chapitre USART et de poser tes questions ensuite.

Il faudra aussi trouver une stratégie pour raccorder de multiples Slaves identiques.

Il y a une courbe d'apprentissage avec ce microcontrôleur qui prend un peu de temps, mais il en est de même avec tous les autres.