シンセ・アンプラグド RSSフィード

2017-12-17

ムライボックス (12) --- ソフトウェア (4)

ソフトウェアの話の続きです。

  • MIDI IN から入力される MIDI ストリームを UART RX から 1 バイト読む
  • MIDI チャネル番号書き換え、ビットマスク・パターン読み出しなどの処理
  • マスク・パターンの出力、および MIDI バイトを UART TX に出力

という処理の流れでは、UART RX から 1 バイト読み、UART TX に 1 バイト出力という繰り返しなので、単位時間当たりの出力量は入力量と同じで、増えも減りもしません。

ただし、UART の非同期式 (asynchronous) あるいは調歩同期式 (start-stop synchronous) と呼ばれる通信方式では、送信側と受信側で独立なタイミングの基準を使用しているので、それらの間の相対的な周波数誤差により問題が発生する可能性があります。

続きを読む

2017-12-12

ムライボックス (11) --- CLC

Microchip 社の 8 ビット PIC の最近の品種 (PIC16F1… で始まる 4 桁あるいは 5 桁型番) には、CLC (Configurable Logic Cell) と呼ばれる小規模な PLD (Programmable Logic Device) が含まれているものがあります。

代表的な品種としては、「全部入り」(full-featured) の

  • PIC16F18325 (14 ピン、秋月価格で単価 100 円)
  • PIC16F18313 (8 ピン、秋月価格で単価 75 円)

などがあります。

PIC16F18325 には 4 個、PIC16F18131 には 2 個の CLC が含まれているので、これを利用すれば外付けの OR ゲートなしに 4 ポート / 2 ポートのムライボックスを実現できます。

続きを読む

2017-12-10

ムライボックス (10) --- ムライシールド (2)

STMicroelectronics Nucleo シリーズ (より正確には Nucleo64 シリーズ) では、ST 独自の「Morpho」コネクタのほかに Arduino Uno R3 互換の Arduino コネクタを持ち、Arduino 用シールドが利用できます。

しかし、デフォルトではコネクタのピン D0、D1 にはシリアル入出力信号は接続されておらず、STM32 MCU の USART2 入出力と、ST LINK/V2-1 側の USB シリアル入出力がハンダブリッジを介して「直結」されています。

これは本当に「直結」で、Arduino の回路のように USB シリアル出力 - UART RX 間に 1 kΩ の抵抗が挿入されておらず、MIDI シールドのように外部から UART RX に信号を突っ込む応用には不向きです。

そのため、ムライボックス・プログラムでは別の UART (USART1) を MIDI 入出力用に利用し、デフォルトではオープンになっている D0, D1 端子に配線を追加することにしました。

その接続図を下に示します。

続きを読む

2017-12-08

ムライボックス (9) --- ムライシールド (1)

ソフトウェアの話とは一旦離れて、今回は Arduino および Nucleo 用の「ムライシールド (仮称、未公認)」の話です。

「SparkFun」製の「MIDI シールド」と機能的にコンパチブルなモードと、ムライボックス・モードとを、ジャンパ・ポスト上のショート・プラグの差し替えで切り換えられるようにしてあります。

回路図を下に示します。 (2017 年 12 月 17 日追記: DPDT (双極双投) スイッチを使用して、プログラム時には UART TX 側も Arduino 側の回路から切り離して「ゴミ」が出力されないようにしました)

続きを読む

2017-12-05

ムライボックス (8) --- ソフトウェア (3)

C 言語で記述したプログラムの断片を示しながら、もう少し具体的な処理の説明をします。

まず、処理で使う変数です。

  uint16_t r_mask;  // "running" bit mask

  uint8_t  c;       // MIDI byte from MIDI-IN
  uint8_t  midi_ch; // MIDI ch / sys msg type
  uint16_t bm;      // mask bitmap for "OR" gate

変数「r_mask」は、「ランニング」ビットマスク・パターンで、永続的に有効な値を保持する必要があります。

グローバル変数」あるいは (スコープとしての意味ではなく) 記憶クラスとしての「static」属性を宣言した変数とします。

その他の変数は、関数が実行されている間だけ有効な「ローカル変数」で構いません。

続きを読む

2017-12-03

ムライボックス (7) --- ソフトウェア (2)

ステータス・バイトの値が 0xF0 〜 0xFF の範囲の MIDI メッセージはまとめて「システム・メッセージ」と呼ばれ、「システム・リアルタイム・メッセージ」、「システム・コモン・メッセージ」、および「システム・エクスクルーシブ・メッセージ」と呼ばれる 3 つのタイプのメッセージから構成されています。

システム・メッセージには「MIDI チャネル」の概念はなく、システム全体、デバイス全体に対して影響を与えるような「ブロードキャスト」の性格を持つメッセージとなっています。

システム・リアルタイム・メッセージは、ステータス・バイトが 0xF8 〜 0xFF の範囲に割り付けられており、ステータス・バイトのみの 1 バイト構成でシステムの「タイミング」や「同期」を制御します。

例えば 0xF8 が「タイミング・クロック」で、0xFA / 0xFB / 0xFC がそれぞれ、「スタート」 / 「コンティニュー」 / 「ストップ」となっています。

続きを読む

2017-12-01

ムライボックス (6) --- ソフトウェア (1)

今回からソフトウェアの話に入ります。

「ムライボックス」の特徴である「MIDI チャネル番号の書き換え」という点で、MIDI メッセージの、

  • チャネル・ボイス・メッセージおよびチャネル・モード・メッセージ
    (0x80 〜 0xEF)
  • システム・コモン・メッセージおよびシステム・リアルタイム・メッセージ
    (0xF0 〜 0xFF)

については区別する必要があります。

チャネル・メッセージにはステータス・バイト中にチャネル番号を指定するフィールドを持ち、チャネル番号書き換えの対象になります。

一方、システム・メッセージにはチャネルの概念はなく、「ブロードキャスト・メッセージ」の性格を持ち、チャネル番号書き換えの対象にはなりません。

続きを読む