2021年5月24日月曜日

Korg SQ-1のGate信号を拡張 GateEXの製作

Korg SQ-1のGate出力は2系統しかありません。自作のリズムマシンのKIK01と同期するためにGate信号を増やすモジュールを作りました。

ブロック図

SQ-1はSync信号が出ていますので、これを間引いてKIK01に入力するGate信号とします。シーケンスパターンの設定は簡単に8PのDIPスイッチで行います。ボタンを並べたりちゃんとしたユーザーインターフェースを作るのは骨の折れる仕事ですし、自作するよりもう1台SQ-1を購入して同期させたほうが安く済むかもしれません。

コントローラーとしてArduino Pro Miniを2個使用しました。

SQ-1のSync信号は5Vですが、Gate信号は10Vですので、間違ってSQ-1のGate出力をつないでも大丈夫なように入力に保護回路を入れています。

電源はArduino Pro Miniにもリニアレギュレータが載っていますが、あまり性能が良くないので別途7805を使った5V電源を載せています

回路図

外観

ケースはタカチPB-2です。最近このケースのサイズのバリエーションが増えたようですね。

背面の穴あけを左右逆に間違えてしまって、背面のパーツの配置は間に合わせです。

Korg SQ-1と接続

9V電源で、電源電流は35mA~38mA程度です。

Arduinoのスケッチ GateSequncer_01


//
// Gate Sequencer
//   Sync-in -> Gate sequence
//
// 2021.04.27
//

#include <MsTimer2.h>

#define PIN_SYNC_IN      (2)
#define PIN_GATE_OUT     (12)
#define PIN_GATE_LED     (11)
#define PIN_PULSE_WIDTH  (A0)

#define CNT_N            (8)

byte sequence[CNT_N] = {0};
int cnt = 0;
int pulseWidth = 20;

void gateOff()
{
  digitalWrite(PIN_GATE_OUT, LOW);
  digitalWrite(PIN_GATE_LED, LOW);
}

void step()
{
  digitalWrite(PIN_GATE_OUT, sequence[cnt]);
  digitalWrite(PIN_GATE_LED, sequence[cnt]);

  cnt++;
  if (cnt >= CNT_N) {
    cnt = 0;
  }

  MsTimer2::set(pulseWidth, gateOff);
  MsTimer2::start();
}

void setup() {
  pinMode(PIN_SYNC_IN, INPUT);
  pinMode(PIN_GATE_OUT, OUTPUT);
  pinMode(PIN_GATE_LED, OUTPUT);

  // DIP switch
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(PIN_SYNC_IN), step, RISING);
}

void loop() {
  // Read DIP switch
  sequence[0] = !digitalRead(3);
  sequence[1] = !digitalRead(4);
  sequence[2] = !digitalRead(5);
  sequence[3] = !digitalRead(6);
  sequence[4] = !digitalRead(7);
  sequence[5] = !digitalRead(8);
  sequence[6] = !digitalRead(9);
  sequence[7] = !digitalRead(10);

  // Read pulse width
  pulseWidth = analogRead(PIN_PULSE_WIDTH) / 10;  // 0~102 ms
}

Sync信号の受信はハードウェア割り込みで行っています。出力Gate信号をオフにするタイミングを取るためにMsTimer2を利用しています。

Arduinoには2枚とも同じスケッチを書き込みます。

出力例

C1:Gate1 C2:Gate2

メモ:


電源の入れ方によって、2枚のArduinoのシーケンスの開始がずれる場合があります。RSTボタンを押して同時にリセットをかけると同期します。起動時に同期させる仕組みを入れたほうが良いと思います。

0 件のコメント:

コメントを投稿