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

ソフトウェアの話とは一旦離れて、今回は Arduino および Nucleo 用の「ムライシールド (仮称、未公認)」の話です。
「SparkFun」製の「MIDI シールド」と機能的にコンパチブルなモードと、ムライボックス・モードとを、ジャンパ・ポスト上のショート・プラグの差し替えで切り換えられるようにしてあります。
回路図を下に示します。 (2017 年 12 月 17 日追記: DPDT (双極双投) スイッチを使用して、プログラム時には UART TX 側も Arduino 側の回路から切り離して「ゴミ」が出力されないようにしました)

「SparkFun」製の「MIDI シールド」では、ディジタル・ピンに接続された 3 個のタクト・スイッチや、A/D 入力に接続された 2 個のボリウムがありますが、上の回路図では、それらは省略して MIDI 入出力部分のみを示しています。
出力端子はひとつしかないので、MIDI OUT 端子に出力したいポートの信号をジャンパで切り換えて選択します。
ポート 1、2、3 および 7 を選択できます。 上の図では「ポート 1」を選択した状態になっています。
いわゆる「デジタル・トランジスタ」(抵抗入りトランジスタ) 1 段で MIDI OUT をドライブしているので、信号を反転する必要があり、"OR" ゲートではなく "NOR" ゲートを使っています。
CMOS では入力が開放される可能性がある場合にはプルアップあるいはプルダウンが必要になりますが、そのための抵抗を省略するために NOR ゲートとして HCMOS ではなく (未使用入力は放置して構わない) LSTTL の 74LS02 を使っています。
「MURAI/NORM」と書かれているジャンパをオープンにすると、MIDI シールド互換の「普通」の MIDI シールド・モード、ジャンパをショートするとムライボックス・モードになります。
ノーマル・モード実現のために LS02 の入力を 2.2 kΩ でプルダウンしています。 (ノーマル・モードでは出力ポート選択ジャンパは「1」を選ぶ必要がある)
MIDI 入力側の「RUN/PROG」スイッチは、Arduino IDE からのプログラム書き込み時に MIDI IN が干渉しないように、プログラム時には MIDI IN 側の回路を切り離すものです。
スイッチを「PROG」側に倒してからプログラム書き込みを行い、次に「RUN」側に倒してから書き込まれたプログラムを実行させます。
MIDI IN 側回路は、本体側が 3.3V で動作する Nucleo の場合を考慮し、オープン・コレクタ出力として、5V / 3.3V 両対応としています。 ただし、Arduino 側 USB-シリアル出力に影響されるため、プログラムの実行時には Arduino 側のシリアル・インターフェースの UART RX 信号はアイドル状態になっている必要があります。
"OR" ゲート・コントロール出力は、もとの SparkFun のボードで外部から信号が入力される可能性のあるポートは避け、下のように 7 ビット分を割り当てています。

ムライボックス
ポート番号
Arduino
ピン番号
ATmega
ポート
1 D9 PB1
2 D10 PB2
3 D11 PB3
4 D12 PB4
5 D5 PD5
6 D6 PD6
7 D7 PD7

Arduino の D13 ピンに接続されている LED を MIDI 入力のインジケータとして利用しており、"OR" ゲート・コントロール用途には使っていません。
上の回路図では、NOR ゲート 4 個入りの 74LS02 を 1 個使って、ポート 1、2、3 および 7 の計 4 個のポートをサポートしていますが、74LS02 をもう 1 個増やせば、最大 7 ポートまでサポートできます。
秋月 C 基板上に組んだ「ムライシールド」の写真を示します。

MIDI 入出力部のみ実装してあり、タクト・スイッチおよびボリウムは実装していません。
このままでは変則的なピッチの Arduino コネクタには刺さりませんので、コネクタのピッチを 100 mil グリッドに載せるためだけの「ゲタ」のシールドを間に挟んで使用しています。