photo credit: Group Portrait via photopin (license)

マイコンモジュールの入出力を増やす技を身につけたので言わせてください

こんにちは、おひろです。

今日もReMINEの開発で得たノウハウについて書こうと思います。
しかもハードウェアなネタだよ!

ReMINEのウリはブロック状のコントロールパーツを自由に入れ替えて好きな構成のMIDIコントローラを作れることです。
これを作るにあたって以下の2つについてはまず実現したいと思いました。

  • ブロックパーツを差し込んだ時に自動でパーツの種類を認識する
  • パーツとアプリ内のパラメータを紐づけると、パーツを触った時に連動し操作することができる

そのためには「パーツの種類」と「パーツの現在値」をパーツから読み取らなければなりません。

一般的なマイコンモジュールにはだいたいアナログ入力がありますので、そこにつなげば実現できるイメージはありましたが、一つ問題がありました。

入力の数が全然足りない。

ReMINEでは全部で16個のブロックパーツを装着することができます。
パーツの種類と現在値を2つの入力端子を使って読み取るのですが、16個分で言うと32入力必要になります。
ReMINEで使用しているモジュールはBLE Nanoですが、アナログ入力はデフォルトで3つしかありません。
もう少し増やすこともできますが、32入力には全然足りません。
ただ、32入力を持つモジュールを少なくとも私は見たことがないので、BLE Nanoでなくても不可能、ということになります。

それを解決する方法の一つとして「マルチプレクサ」という電子部品があります。
これは簡単に言うとビデオセレクターです。
ビデオセレクターというのはこんなやつですね。

これだったら出力が1個、入力が3つなので、テレビの入力が1つしかなくてもスーファミとかプレステとかDVDとかつないで切り替えて使えるようになりますよね。
マルチプレクサはまさにそういう機能を持っています。

ビデオセレクターだと切り替えスイッチで入出力の組合せを変えますが、マルチプレクサでそれに相当するのはマルチプレクサのデジタル入力です。
デジタルなので入力するのは0か1です。0Vが0、電源と同じ電圧が1扱いです。
つまり、入力ビットによって切り替わるわけです。デジタル入力が3つあれば8通りの切り替えができますし、4つあれば16通りの切り替えができます。
例えば4ビットであれば0000を入れれば1番目の入力と出力がつながる、0001を入れれば2番目の入力と出力がつながる、といった感じです。

図にすると以下のようなイメージです。(ブロックパーツの数などは端折ってます)

maltiplexer

なので入力を増やす代わりにモジュール側には切り替え用のデジタル出力がないとダメなんですけどね。。
でもどのモジュールでもデジタル出力は最低でも4〜5個くらいはついていることが多いと思いますのでここがネックになることは少ないかと思います。

ReMINEでは16チャンネルのマルチプレクサを2つ使い、2入力を32入力に増やして入力不足を解消しました。ヤッタネ!

ハードウェア屋さんからすればすごいことでもないかもしれませんが、ソフト屋の私としてはテンション上がりました。
ですよね?ソフト屋のみんな!え?そんなこともない?

入力が足りなくてお困りの方、あまりいらっしゃらないとは思いますが、この記事がヒントになればこれ幸いです。

ではでは。

★★★ツイッターでも情報発信していきますのでフォローお願いします!★★★

Pocket