On n'a jamais assez de mixers !

6-channel mixer

MIXER

Avant la description, le fonctionnement général est à voir ici :

{youtube}3pXlXnoABRk{/youtube}

 Description

flag fr

On n'a jamais assez de mixers !

Le schéma est très simple. La résistance R25 est un potentiomètre monté en façade pour le volume général, chaque voie est elle-même montée sur un potentiomètre 100k (R27).

Résultat

La façade est réalisée en aluminium d'épaisseur 1,6 mm... Voilà le module terminé, pour un peu moins de 11 €.

Et ça fonctionne très bien depuis plus d'un an déjà, sans aucun problème !

flag fr

We never have enough mixers !

The schematics is very simple. R25 is replaced by a 100k pot monted on the panel: it's the output's volume. Each channel goes through a 100k potentiometer (R27).

Result

The panel is made of aluminium (1.5 mm thick)... Here is the finished module, for a little less than 11 €.

And it works very well for over a year now, without any problem!

MIXER SCHEMA

Wiring diagram :

cablage mixer

MIXER FACADE

MIXER BOM

  • Clics : 9026

Le boitier - The case

flag fr

Je vois grand : ce sera un 18U * 197HP, soit 1182HP. Ce n'est pas une valeur courante (2x84 = 168HP l'est beaucoup plus) car je choisis de prendre des rails de 1 mètre, beaucoup moins chers que les rails vendus chez les spécialistes des synthés.

flag fr

I see big: it will be an 18U * 197HP, or 1182HP. This is not a standard value (2x84 = 168HP is much more standard) because I choose to buy 1000 mm rails, much cheaper than the rails sold in the synth shops.

Au commencement... In the beginning...

flag fr

...sont les mesures et un tas de planches de contreplaqué de 10 mm, pour un boitier de taille 102 cm x 82,4 cm * 17 cm de profondeur... plus quelques rails de 1 mètre.

  • 2 de 102 cm x 16 cm (dessus, dessous)
  • 2 de 80,4 cm x 16 cm (les côtés)
  • 1 de 102 cm x 82,4 cm (le fond)

flag fr

...there's only a bunch of plywood (10 mm i.e. 0.4"). The case will be 40.2" x 32.5" x  6.7"... With these boards, there's also a dozen of rails.

  • 2 boards are 40.2" x 6.3"
  • 2 are 31.7" x 6.3"
  • 1 is 40.2" x 32.5"

 

 DSC7550

 

flag frBon, allons-y, en commençant par l'arrivée électrique, alimentant 6 PSU pour 110 €. Je trace, je découpe et et je vérifie. Prise + interrupteur + fusible = je n'ai rien oublié. Je ne sais pas encore quelle décoration sera appliquée, mais tous les traits de tracés et les saletés de découpe vont disparaitre à la fin !

flag frWell, let's go, starting with the power supply, feeding 6 PSU for 110 €. I trace, I cut and I check. Plug + switch + fuse = I have not forgotten anything. I don't know which decoration will be choosen, but all the pencil lines and the dirt of cutting will disappear at the end!

 DSC7552

Assemblage - The assembly

 

flag fr

A partir de la structure rectangulaire, je commence la première rangée de rails. La hauteur est déterminée de manière à laisser environ 5 mm entre les façades des modules et le bord du boitier. La largeur est déterminée par... les modules ! Ensuite, les autres rangées sont construites de la même façon, jusqu'à la sixième rangée : 6 * 3U = 18U, le compte est bon !

Ensuite premières couches de peinture.

flag fr

After gluing the wood in a rectangular shape, I start the assembly of the first row of rails. I leave about 5 mm between the panels of the modules and the edge of the case. The width is determined by ... the modules! The other rows are built in the same way, up to the sixth row: 6 * 3U = 18U, the total is good!

Then first paint.

PS : the glasses are not part of the case...

P1400541b

P1400543b

 

Et voilà !P1400544b

flag fr

Il reste énormément à faire : les finitions du bois, la peinture, les bus d'alimentations... A ce propos, ils sont dessinés avec DipTrace, puis gravés chez PCBWay.com pour 45$ les 15

flag fr

There is still a lot of work: wood finishes, painting, the power supplies with busboards... These busboards are made with DipTrace, 45$ for 15 at PCBway.com

P1400545

P1400548

Les busboards - The busboards

flag fr

Pas de problème particulier, sauf qu'il y a 14 x 12 x 16 soudures, soit au total 2688 juste pour les connecteurs eurorack...Plus les leds et les condos...

flag fr

No problem, except that there are 14 x 12 x 16 weldings, a total of 2688 just for the eurorack connectors ... You have to add LEDs and capacities ...

P1400550

P1400551

Les rails - The rails

flag fr

J'achète les rails directement chez le fournisseur de Doepfer : Gie-Tec en Allemagne. La personne qui prend ma commande (danke Simone) est très efficace et je récupère 12 rails de 1 mètre avec bordure (type 1) pour 153,51 € port compris, soit 12,80 € le rail de 1 mètre ! Ils sont livrés rapidement, sans les écrous ni les vis d'extrémités. Celles-ci sont récupérées dans mon surplus, et pour les écrous M3, le prends sur eBay : 7,54 € les 500 écrous carrés M3 livraison incluse. En fait, il y en a 516 (tolérances !), ce qui correspond exactement à 12 * 43 écrous.

Bon, cela fait un certain temps passé à enfiler les écrous un par un dans les rails, mais je ne suis pas mécontent du résultat !

flag fr

I take my rails directly to the supplier of Doepfer: Gie-Tec in Germany. The person who takes my order (danke Simone) is very efficient and I receive 12 rails of 1 meter for € 153.51 including shipping, i.e. € 12.80 the rail of 1 meter! They are delivered quickly without the nuts or end screws. These are recovered in my surplus, and for the M3 nuts, I bought them on eBay: 7.54 € for 500 M3 square nuts. In fact, there were 516 nuts in the bag, wich is exactly 43 nuts per rail for 12 rails.

Well, it took me a long time to put the nuts one by one in the rails, but I'm not unhappy with the result!

P1400540b

P1400553b

P1400554b

Preque fini ! - Almost finished !

Quelques retouches de peintures et c'est bon. A few paintings and it's finished.

 DSC7828

 DSC7830

Et voilà !

Le bilan

Bois / wood 51,33 €
Bus board : Pcbway.com 43,52 €
Composants 5,18 €
PSU 105,53 €
Ecrous / nuts 7,63 €
Rails 153,51 €
Divers 20 €
TOTAL 386,70 €
  • Clics : 998

2019-12

Un visiteur du soir qui a l'air d'apprécier le son...

doepfer a100 10

2019-10

 

doepfer a100 09

2019-04

Mon nouveau boitier est terminé Il me fait gagner beaucoup de place ! Je revends mes boitiers Doepfer avec un petit pincement, ce sont eux qui m'ont lancés ...

doepfer a100 08

2018-12

Ré-organisation et ajout de l'Atom d'Antumbra J'ai de plus en plus également de modules DIY : octoCV, dual-4-switch, arpegiator...

doepfer a100 06

2018-10

Nouvelle installation, distings, varigate 4+, Ladik burst, Qu-bit Wave...

doepfer a100 06

2018-08

Nouvelle installation (avec Marbles !) dans une armoire dédiée. Quel confort !

doepfer a100 05

2018-04

MI Plaits turbine... Je viens d'apprendre l'arrivée de Marbles

doepfer a100 04

2018-03

Mes premiers modules sont fonctionnels. Je me limite aux fonctions de bases (mixage, multiple, certains filtres) pour le moment, le temps d'apprendre et de "maitriser" tout ça . J'ajoute une tuerie : MI Plaits ! Je suis obligé de prendre une deuxième case...

doepfer a100 03

 

2018-01

Voici où j'en suis... Pas de démo pour le moment, j'y travaille ;-)

doepfer a100 02

 

2017-08

Cela fait des années que j'y pensais, et je viens de franchir le pas, avec une base A-100 BS2 de chez Doepfer achetée d'occasion sur eBay (9U, 3 * 84 HP) :

doepfer a100

Je n'ai pas gardé cette configuration telle quelle bien longtemps ! Mon idée est de créer mes propres modules en me remettant au fer à souder que je n'avais pas touché depuis plus de 30 ans. En fait depuis que je me suis mis à écouter Tangerine Dream et compagnie ;-)

  • Clics : 523

Avant la description, le fonctionnement général est à voir ici :

{youtube}wbgVoboskgY{/youtube}

 

flag fr

Le circuit

A base d'atmega328 comme d'habitude, facile à programmer. 2 * 2 * 4 sorties pilotées par deux DG509 (analog switch 1:4) ayant une entrée/sortie en commun. Des potentiomètres permettent de choisir le nombre de voies (0 à 4, 0 signifiant qu'aucune sortie n'est active) et le mode (up, down, pendulum, random). Il y a deux entrées clock indépendantes et deux entrées reset. Un mode 1*8 permet d'avoir un switch bidirectionnel 1 commun <-> 8 sorties, avec les mêmes modes de fonctionnement, le potentiomètre de la voie 1 permettant alors de choisir entre 0 et 8 sorties.

Cliquez pour le schéma.

Résultat

Le PCB : Double face assez simple. Les composants passifs sont tous de récup ce qui donne un cout de revient très faible.

Consommation environ 35 mA sur +12V, 5 mA sur -12V, ça fonctionne très bien !

flag fr

The circuit

Atmega328 based as usual, for it's very easy to program. 2 * 2 * 4 outputs controlled by two DG509s (analog switch 1: 4) having an input / output in common. Potentiometers let you choose the number of channels (0 to 4) and the mode (up, down, pendulum, random). There are two independent clock inputs and two reset inputs. A 1 * 8 mode allows you to have a common bidirectional switch 1 <-> 8 outputs, with the same modes of operation. The left pot allows you to choose from 0 to 8 active outputs.

Schematics

Result

The PCB: 2 simple layers.The passive components are all second hands. This gives a very low cost.

Consumption about 35 mA on + 12V, 5 mA on -12V, it works very well!

DualQuadSwitchimplant

 

DualQuadSwitchFacade

 

BOM

BOM switch

 

Code

Le code est divisé en trois sections :

main :
/*

   DualQuadSwitch

   2018-2020 LC

   -------------------------------------------------------
  D0: port D bit 0
  D1: port D bit 1
  D2: port D bit 2   CLK 0   sur interruptions
  D3: port D bit 3   CLK 1
  D4: port D bit 4   RST 0
  D5: port D bit 5   RST 1
  D6: port D bit 6
  D7: port D bit 7   MODE GENERAL (2*4 / 1*8)

  D8: port B bit 0    A0-0   1er DG509 adressé avec 2 bits
  D9: port B bit 1    A0-1
  D10: port B bit 2   A1-0   2ème
  D11: port B bit 3   A1-1
  D12: port B bit 4   EN0    EN = 1 pour compter, 0 pour OFF
  D13: port B bit 5   EN1

  A0: port C bit 0
  A1: port C bit 1
  A2: port C bit 2   MODE 0 (up, down, etc.)
  A3: port C bit 3   nbrePas 0 (0 à 4 ou 0 à 8 suivant le mode général)
  A4: port C bit 4   MODE 1
  A5: port C bit 5   nbrePas 1
*/

// pin en entrées
#define pinINTERRUPT0 2
#define pinINTERRUPT1 3
#define pinRESET0     4
#define pinRESET1     5
#define pinGENERAL    7
// de D9 à D13 : gestion des 2 DG509

// pins des potards
#define potSTEP0  2
#define potMODE0  3
#define potSTEP1  4
#define potMODE1  5

// modes de fonctionnement
#define modeUP    0
#define modeDOWN  1
#define modePEND  2
#define modeRND   3

struct {
  unsigned long lastInterrupt;
  byte mode, aMode;
  byte nbrePas, aNbrePas, nbrePas8, aNbrePas8;
  int compteur, compteurPendulum;
  boolean reset, on;
  volatile boolean clockInInterrupt;
} voie[2];

// variables pour la lecture régulière des potards et des interrupteurs
unsigned long dateLecture;
byte compteurPotard;

boolean mode8, aMode8;

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  
  pinMode(pinRESET0, INPUT_PULLUP);
  pinMode(pinRESET1, INPUT_PULLUP);

  pinMode(pinGENERAL, INPUT_PULLUP);
  
  for (int i = 0; i < 2; i++) {
    voie[i].clockInInterrupt = false;
    voie[i].compteur = 0;
    voie[i].compteurPendulum = 0;
    voie[i].reset = false;
  }
  
  initLecturePanel();
  majVoie();
  initInterrupt();
}


void loop() {
  lecturePanel();
  if (mode8) {
    majReset(0);
    if (voie[0].clockInInterrupt == true) {
      voie[0].clockInInterrupt = false;
      majSortie8();
    }
  } else {
    for (int i = 0; i < 2; i++) {
      majReset(i);
      if (voie[i].clockInInterrupt == true) {
        voie[i].clockInInterrupt = false;
        majSortie(i);
      }
    }
  }
}
entrées/sorties :
/*

   gestion des pin

*/
// si reset sur une voie : on remet le compteur à 0 (1ere position)
void majReset(int laVoie) {
  if (voie[laVoie].reset == true) {
    voie[laVoie].compteur = 0;
    majVoie();
  }
}

void majSortie(int laVoie) {
  int ns;
  if (voie[laVoie].on) {
    if (voie[laVoie].nbrePas == 1) {
      voie[laVoie].compteur = 0;
    } else {
      switch (voie[laVoie].mode) {
        case modeUP:
          voie[laVoie].compteur++;
          if (voie[laVoie].compteur >= voie[laVoie].nbrePas) {
            voie[laVoie].compteur = 0;
          }
          break;

        case modeDOWN:
          voie[laVoie].compteur--;
          if (voie[laVoie].compteur < 0) {
            voie[laVoie].compteur = voie[laVoie].nbrePas - 1;
          }
          break;

        case modePEND:
          ns = 2 * (voie[laVoie].nbrePas - 1);
          voie[laVoie].compteurPendulum = (voie[laVoie].compteurPendulum + 1) % ns;
          if (voie[laVoie].compteurPendulum < voie[laVoie].nbrePas) {
            voie[laVoie].compteur = voie[laVoie].compteurPendulum;
          } else {
            voie[laVoie].compteur = ns - voie[laVoie].compteurPendulum;
          }
          break;

        case modeRND:
          voie[laVoie].compteur = random(voie[laVoie].nbrePas);
          break;

      }
    }
  }
  majVoie();
}

void majSortie8() {
  int ns;
  if (voie[0].on) {
    if (voie[0].nbrePas == 1) {
      voie[0].compteur = 1;
    } else {
      switch (voie[0].mode) {
        case modeUP:
          voie[0].compteur = (voie[0].compteur + 1) % voie[0].nbrePas;
          break;

        case modeDOWN:
          voie[0].compteur--;
          if (voie[0].compteur < 0) {
            voie[0].compteur = voie[0].nbrePas - 1;
          }
          break;

        case modePEND:
          ns = 2 * (voie[0].nbrePas - 1);
          voie[0].compteurPendulum = (voie[0].compteurPendulum + 1) % ns;
          if (voie[0].compteurPendulum < voie[0].nbrePas) {
            voie[0].compteur = voie[0].compteurPendulum;
          } else {
            voie[0].compteur = ns - voie[0].compteurPendulum;
          }
          break;

        case modeRND:
          voie[0].compteur = random(voie[0].nbrePas);
          break;
      }
    }
    majVoie();
  }
}



void majVoie() {
  // on n'a qu'une voie de 8 inter
  if (mode8) {
    if (voie[0].on) {
      if (voie[0].compteur < 4) {
        // premier DG509 ON et deuxième OFF
        PORTB = (PORTB & B11011100) | B00010000 | voie[0].compteur;
      } else {
        // premier DG509 OFF et deuxième ON
        PORTB = (PORTB & B11100011) | B00100000 | ((voie[0].compteur - 4) << 2);
      }
    } else {
      // les deux voies OFF
      PORTB = PORTB & B11001111;
    }
  } else {
    // mode 2 * 4 voies indépendantes
    if (voie[0].on) {
      // 1er DG509, EN = PORT B bit n°4 et l'adresse sur bits 0 et 1
      // il faut mettre à 0 les 2 bits avant de les lever
      PORTB = (PORTB & B11111100) | B00010000 | voie[0].compteur;
    } else {
      // 1er DG509, EN = PORT B bit n°4
      PORTB = PORTB & B11101111;
    }

    if (voie[1].on) {
      // 2eme DG509, EN = PORT B bit n°5 et l'adresse sur bits 2 et 3
      PORTB = (PORTB & B11110011) | B00100000 | (voie[1].compteur << 2);
    } else {
      // 2eme DG509, EN = PORT B bit n°5
      PORTB = PORTB & B11011111;
    }
  }
}

void lecturePanel() {
  unsigned long tempo = millis();
  voie[0].reset = (digitalRead(pinRESET0) == LOW);   // c'est un pullup...
  voie[1].reset = (digitalRead(pinRESET1) == LOW);

  if (tempo - dateLecture > 50) {
    dateLecture = tempo;

    compteurPotard ++;
    if (compteurPotard > 4) {
      compteurPotard = 0;
    }
    switch (compteurPotard) {
      case 0:
        // le mode de la voie 0
        voie[0].mode = analogRead(potMODE0) >> 8;
        if (voie[0].mode != voie[0].aMode) {
          voie[0].aMode = voie[0].mode;
          majVoie();
        }
        break;
      case 1:
        // le mode de la voie 1
        voie[1].mode = analogRead(potMODE1) >> 8;
        if (voie[1].mode != voie[1].aMode) {
          voie[1].aMode = voie[1].mode;
          majVoie();
        }
        break;
      case 2:
        // le nbre de pas de la voie 0
        if (mode8) {
          voie[0].nbrePas = analogRead(potSTEP0) / 114;
          voie[1].on = false;
        } else {
          voie[0].nbrePas = analogRead(potSTEP0) / 205;
        }
        voie[0].on = voie[0].nbrePas > 0 ? true : false;
        if (voie[0].nbrePas != voie[0].aNbrePas) {
          voie[0].aNbrePas = voie[0].nbrePas;
          if (voie[0].compteur >= voie[0].nbrePas) {
            voie[0].compteur = voie[0].nbrePas - 1;
          }
          majVoie();
        }
        break;
      case 3:
        // le nbre de pas de la voie 1
        if (mode8) {
          voie[1].on = false;
        } else {
          voie[1].nbrePas = analogRead(potSTEP1) / 205;
          voie[1].on = voie[1].nbrePas > 0 ? true : false;
          if (voie[1].nbrePas != voie[1].aNbrePas) {
            voie[1].aNbrePas = voie[1].nbrePas;
            if (voie[1].compteur >= voie[1].nbrePas) {
              voie[1].compteur = voie[1].nbrePas - 1;
            }
            majVoie();
          }
        }
        break;
      case 4:
        // le pot de sélection entre "1x8" et "2x4"
        mode8 = (digitalRead(pinGENERAL) == LOW);
        if (mode8 != aMode8) {
          aMode8 = mode8;
          majVoie();
        }
        break;
    }
  }
}

void initLecturePanel() {
  compteurPotard = 0;
  voie[0].mode = analogRead(potMODE0) >> 8;
  voie[1].mode = analogRead(potMODE1) >> 8;

  mode8 = (digitalRead(pinGENERAL) == HIGH);

  if (mode8) {
    voie[0].nbrePas = analogRead(potSTEP0) / 114;
    voie[0].on = voie[0].nbrePas > 0 ? true : false;
    voie[1].nbrePas = analogRead(potSTEP1) / 205;
    voie[1].on = false;
  } else {
    voie[0].nbrePas = analogRead(potSTEP0) / 205;
    voie[0].on = voie[0].nbrePas > 0 ? true : false;
    voie[1].nbrePas = analogRead(potSTEP1) / 205;
    voie[1].on = voie[1].nbrePas > 0 ? true : false;
  }
}
interruptions :
void initInterrupt() {
  // broches UNO
  pinMode(pinINTERRUPT0, INPUT_PULLUP);
  pinMode(pinINTERRUPT1, INPUT_PULLUP);

  attachInterrupt(0, clockIn0, FALLING);    //    attention : gate inverseuse
  attachInterrupt(1, clockIn1, FALLING);

}

// front montant sur la broche D2 = CLOCK IN 0
void clockIn0() {
  unsigned long tempo = millis();
  // antirebonds basic si appui sur le BP plutôt que jack
  if (tempo - voie[0].lastInterrupt > 10) {
    voie[0].lastInterrupt = tempo;
    voie[0].clockInInterrupt = true;
  }
}

// front montant sur la broche D3 = CLOCK IN 1
void clockIn1() {
  if (!mode8) {
    unsigned long tempo = millis();
    if (tempo - voie[1].lastInterrupt > 10) {
      voie[1].lastInterrupt = tempo;
      voie[1].clockInInterrupt = true;
    }
  }
}
  • Clics : 9607
Modèle Largeur Conso Coût de revient
YouTube

n°8 : Dual Trigger to Gate to Trigger

07 ttgtt

6 hp

+12V : 25 mA

-12V : 2 mA

12,44 € TTGTT

n°7 : Quad Delay

07 ttgtt
10 hp   14,49 € Quad Delay

n°6 : dual quad-switch

06 switch
20 hp

+12V : 35 mA

-12V : 5 mA

21,44 € Dual quad switch

n°5 : quad logic

04 LFO
10 hp   13,62 €  Quad logic

n°4 : quad LFO

04 LFO

12 hp

+12V : 22 mA

-12V : 12 mA

12,76 €

Quad LFO

n°3 : quad Attenuverter

03 attenuverter

10 hp

+12V : 2 mA

-12V : 2 mA

10,37 €

Attenuverter

Fonctionnement

n°2 : quad Crossfader

02 crossfader

10 hp

+12V :

-12V :

13,49 € Quad Crossfader

n°1 : Mixer 6 voies

01 mixer

10 hp

+12V : 1 mA

-12V : 1 mA

10,89 € Mixer

Le boitier

00 case

18U * 197 hp

=1182 hp

  386 €  

synthé modulaire

  • Clics : 2898

Page 1 sur 3