Afin de faire une modification simple et surtout réversible (pas de modification durable de l'ampli qui est toute de même un collector de 1992) j'ai choisi d'interfacer cette modification avec les entrées DIN du pédalier. Seules quelques soudures sont à faire sur la Prise DIN à l'intérieur de ampli pour récuérer les 3 fils de sélection de canaux, le 5V et la masse.

Pour éviter d'interférer avec son fonctionnement normal et permettre le forçage par le pédalier d'un autre canal que celui présélectionné par le GMajor, j'ai choisi d'uiliser un microcontrôleur qui va envoyer une impusion de 100 millisecondes lors du changement de canl, et repasser en tristate (haute iimpédance) à l'issue. Ainsi le micro n'est en sortie que pendant un temps très court et le pédalier du Marshall (ou la sélection de canaux par le panneau avant) reste fonctionnelle. On peut donc forcer le changement de canal bien après avoir choisi le programme sur le TC pour passer en solo par exemple.

Le micro contrôleur choisi est un AT Tiny85 (ou clone de Digistump) que l'on trouve sous forme de petite carte programmable en USB sur aliexpress pour moins de 2 euros. Sa très faible consommation  (une dizaine de milliampères) fait que l'on peut sans problème se brancher sur le 5V disponible dans l'amplli pour alimenter le processeur qui gère le midi.

Les 6 broches utiles de l'AT Tiny85 suffisent largement pour raccorder les 2 entrées pour le jack 6.35, et les 3 sorties pour la commutation de canaux. Attention toutefois, pour ne pas perturber l'émulation USB lors de la programmation, la carte doit être déconnectée des E/S du pédalier.

Les 2 sorties du Gmajor (disponibles sur la prise "Switch Out") permettent de gérer 4 états, mais nous n'en utiliserons ici que 3, car il n'y a que 3 canaux sur le Marshall :

  • 00 Aucun relais : canal 1
  • 01 Relais 1: Canal 2
  • 10 Relais 2: Canal 3
  • 11 Les 2 relais : ne fait rien, non supporté.

Pour le pas modifier la face arrière de l'ampli, c'est un jacks stéréo male qui est sorti du chassis à l'aide d'un cable d'une quarantaine de centimètres. Fixé au chassis par des colliers nylon pour éviter l'arrachement.. Il pourra trainer au font à l'arrière de l'amplli si inutilisé.

Pour remettre l'ampli en état d'origine, supprimer les colliers nylon, le cable, le jack et dessouder les 5 fils (ou1/out2/out2/Masse/+5) de la prise DIn et virer l'AT Tiny85. C'est donc totalement réversible et ne laisse aucun trou.

Voici le code, abondamment documenté. Il contient les indications pour le cablage.

////////////////////////////////////////////////////////////////////////////////////////////
// Adaptateur TC Electronics GMajor > Marshall 6110
////////////////////////////////////////////////////////////////////////////////////////////
// Permet d''utiliser les 2 sorties sur relais du TC pour piloter le cngt de canaux
// Aucun relais : canal 1
// Relais 1: Canal 2
// Relais 2: Canal 3
// Les 2 relais : ne fait rien, non supporté.
////////////////////////////////////////////////////////////////////////////////////////////
// Cablage
////////////////////////////////////////////////////////////////////////////////////////////
// En sortie du TC, Jack 6.35mm stéréo "Switch out"
// Il suffit de relier Tip à In1, Ring à In2, et le pullup intégré à l'arduino fait le reste.
// - Masse: GND
// - Tip: Relais 1
// - Ring: Relais 2
// Sur le marshall, prise DIN du pédalier
// - Pin 1 Ch3
// - Pin 2 Ch1
// - Pin 3 GND
// - Pin 4 NC
// - Pin 5 Ch2
// - Pin 6 +5V
////////////////////////////////////////////////////////////////////////////////////////////
// Target processor : ATTINY85 (Digistump clone).  Choose Digispark default 16.5Mhz as target board. Can be programmed with USB.
// Driver for windows : https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip
// Digistump addon for ATTINY85: https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json
// Pin 4 & 5 musb be left no connnected during prog for USB to works.
////////////////////////////////////////////////////////////////////////////////////////////
 
////////////////////////////////////////////////////////////////////////////////////////////
// I/O
////////////////////////////////////////////////////////////////////////////////////////////
// Sorties vers pédalier Marshall
////////////////////////////////////////////////////////////////////////////////////////////
// Pour arduino pro mini ou pro micro
const int Ch1 = 2;
const int Ch2 = 3;
const int Ch3 = 4;
 
////////////////////////////////////////////////////////////////////////////////////////////
// Entrées en provenance du G Major.
////////////////////////////////////////////////////////////////////////////////////////////
// Pour arduino pro mini ou pro micro
const int In1 = 5;
const int In2 = 6;
 
#define DELAYTIME 500
 
////////////////////////////////////////////////////////////////////////////////////////////
// Sauvegarde des états
////////////////////////////////////////////////////////////////////////////////////////////
int OldState = 0;       // State of inputs, old status
int CurrState = 0;      // State of inputs, current status
 
void setup ()
{
  Serial.begin(115200);
  Serial.println("TC Gmajor to Marshall 6101");
  // Astuce pour faire des sorties "tristate":
  // on écrit un zero sur la sortie, mais on met la broche en entrée jusqu'à ce qu'on en ait besoin
  // et la on la bascule en sortie le temps de la commutation.
  digitalWrite (Ch1, LOW) ;
  digitalWrite (Ch2, LOW) ;
  digitalWrite (Ch3, LOW) ;
  pinMode (Ch1, INPUT);
  pinMode (Ch2, INPUT);
  pinMode (Ch3, INPUT);
  pinMode (In1, INPUT_PULLUP);
  pinMode (In2, INPUT_PULLUP);
}
 
void Channel1() {
  pinMode (Ch1, OUTPUT) ;   // drive pin low
  Serial.println("> Channel 1");
  delay(DELAYTIME);         // Delay 100ms
  pinMode (Ch1, INPUT) ;    // hi-Z state
}
 
void Channel2() {
  Serial.println("> Channel 2");
  pinMode (Ch2, OUTPUT) ;   // drive pin low
  delay(DELAYTIME);         // Delay 100ms
  pinMode (Ch2, INPUT) ;    // hi-Z state
}
 
void Channel3() {
  Serial.println("> Channel 3");
  pinMode (Ch3, OUTPUT) ;   // drive pin low
  delay(DELAYTIME);               // Delay 100ms
  pinMode (Ch3, INPUT) ;    // hi-Z state
}
 
void loop () {
  CurrState = digitalRead (In1) + (digitalRead(In2) << 1);
  if (CurrState != OldState) {
    Serial.print("Current state : ");
    Serial.println(CurrState);
    Serial.print("Old state : ");
    Serial.println(OldState);
    OldState = CurrState;
    switch (CurrState) {
      case (3):   // Les 2 relais ne sont pas activés
        Channel1();
        break;
      case (2):   // 1er relais activé
        Channel2();
        break;
      case (1):   // 2e relais activé
        Channel3();
        break;
      case (0):   // les 2 relais sont activés : non supporté, ne fait rien.
        break;
      } // end switch
    } // end state changed
  }