鍵盤天国

鍵盤天国

PR

カレンダー

プロフィール

Nori@T'sLAB

Nori@T'sLAB

キーワードサーチ

▼キーワード検索

バックナンバー

December , 2024
November , 2024
October , 2024
September , 2024
August , 2024

お気に入りブログ

未だ暗い。 New! HABANDさん

師走12月 New! Toshiya Abeさん

子どものお仕事は『… New! りとみしゃんさん

EWI USBをMIDIキーボ… hanewoさん

まもなく••• ごろぞ〜太!さん

October 25, 2015
XML
カテゴリ: 音楽
以前紹介した某研究室時代に作ったMIDIコントローラ『ピッチベンドペダル』のプログラム改変作業を行っております.

当初の目的では7segLEDの実装やオグジュアリFootSWの実装等,ハードどころかケースから見直しな内容をまとめていたのですが,やはり忙しくて手が出せませんでした.
夏の3Bsライブの時に,使いたかったのに使えなかった"MIDIチャンネル固定"と言う仕様を変更する事に注力してなるべく工数をかけずに改変できる内容に変更してリスタートを切る事にしました.
MIDI Pedal
それでも,ハードウェアは追加しなければならず意外と重い…
って事で,次いつ使うかもわからないコントローラですが早速プログラムの見直しから始めました.


メインICにはA/D変換入力ポートが5ポートあるPIC16F88と言うマイコンを使用しています.
(以前,PIC16F84と書いていましたがA/D変換入っていないモデルでしたね…ごめんなさい)
既に,ペダルとして1ポート使用しているので残り4ポート.
フットコントローラ拡張用に2ポートは予約しているので,残りの2ポートで今回は16進タイプの"DIPロータリースイッチ"と言う実装部品のパラメータを読むことにしました.
151025_sw
ピンが5本あるのですが,1ピンが入力で残り4ピンが出力になります.
要するに2進数で以下のように1が上がると対応する出力ポートがHiになると言うスイッチです.
SW位置(16進) 2進表記 8pin 4pin 2pin 1pin
0x00
0b0000 Low Low Low Low
0x01
0b0001 Low Low Low Hi
0x02
0b0010 Low Low Hi Low
0x03
0b0011 Low Low Hi Hi
0x04
0b0100 Low Hi Low Low
0x05
0b0101 Low Hi Low Hi
0x06
0b0110 Low Hi Hi Low
0x07
0b0111 Low Hi Hi Hi
0x08
0b1000 Hi Low Low Low
0x09
0b1001 Hi Low Low Hi
0x0a
0b1010 Hi Low Hi Low
0x0b
0b1011 Hi Low Hi Hi
0x0c
0b1100 Hi Hi Low Low
0x0d
0b1101 Hi Hi Low Hi
0x0e
0b1110 Hi Hi Hi Low
0x0f
0b1111 Hi Hi Hi Hi
このままだと,2進でHi/Lowが決まる為,4フラグ分を受けられる入力ポートが必要になってしまいます.
Hi/Lowの判定なのでRB0~3の4ポート分を使う事もできますが回路側で少し工夫するとこれをA/D入力1ポート化する事が可能です.
150703_pict01
以前も,紹介した上記の回路図ですね.
抵抗で各フラグ(スイッチ:8,4,2,1ポート)を各ビット毎に重みをもたせて1ポートで5V電圧を制御出来るようにして,受けた電圧を16等分する事でスイッチの位置を検出するという方法です.

これによりコントロールツマミ1つでMIDIチャンネル16ch分を変更できかつ,ポート数も節約出来ると言うわけです.
ま,1024分解能のA/Dポートを使って16分解能に分圧しなおすと言う,なんとももったいない手法ではあるのですが入力ポートを4つ犠牲にするよりはプログラムもシンプルになりますし賢いかなと思い採用しました.


尚,前回改変作業を行おうとしてSDCCと言うコンパイラの最新版を使ったらエラーの嵐で諦めたと言ったかと思いますが,結局解析半ばで面倒になりコンパイラのバージョンを大学時代に使っていたものに替えました.
(最新バージョン辺りはマイナー改変だらけで使用したPICにはほとんど関係ないアップデートでしたので…)
プログラムの誤記入等が原因ではないのであっさりコンパイルできました(あれ1か月近く悩んだんだんですけどね--;)
151025_prog
実は,後になってプログラムを見直した時に発覚したのですが,大学時代のプログラムにはセンター付近のマスクがなかった様なんです.
どうりで,振動だけでも変動検出するわけですね.
内部の可変抵抗は別にセンタークリックがある部品ではありませんでしたから1/1024(マイコンのA/D変換の分解能)の動きでスグに検出していたみたいなんです.
ついでなので,その辺も見直してマイナー改変しました.

難しい事を考えるつもりはなかったのでプログラム上128分解能に除算(繰上整数化)している為,1/128(8/1024)以下の動きは無意味と言う事で,1/128以上の動きがあったときだけパラメータを読みに行くように変更しただけです.
重力の都合で下方向が多少読み取りやすいため,演算で判定位置を少しずらしています.
本来なら1024分解あるんで,センター付近を少し多めに切り捨てて,上方と下方で余った数を128分解するのが望ましいのですが演算がややこしくなる気がしたのでやめました(リアルに朝飯前だったし)
この対策で緩和しなかったら諦めて面倒な演算をやる事にして今回は保留しました.

それでも,変数やif文が多少増えてしまいました.
ま,プログラム領域的には節約する必要は全然ないレベルですので特に何も考えずにバンバン記述してます.
『え?元プログラマー失格?』なんとでも言ってください<( ̄ー ̄)>


回路は,ポートを増やすだけではあるのですが,ド素人だった大学時代の基板は見るに堪えないので作り直すことにします.
サンハヤト辺りの両面タイプ汎用基板に部品を実装するつもりです.
部品領域や排熱の問題が生じる(と,言っても電流はほとんど食わないのですが)と嫌なので電源ICを使うかは迷ってはいますが,流石に電源電圧を分圧して検出を行う回路ではあるのでDC/DC組み込む羽目になるかとは思います.
基板はiModelaで作れる規模なので削り出しのプリント基板なんていうのもスマートで乙なんですが立ち上げが面倒で…結局,買っておきながら未だに使えず仕舞いですね.
粉塵&騒音対策用にケースまで作ったのに(T_T)モッタイナイ
151025_um01
懸念事項としてはメカ変更ですね.
元々,拡張性なんてものは全く考えてなかったケースなので部品数点でも増えると場所の確保が難しいです.
一応,基板の位置さえ考えればツマミ類を数点増やすことくらいなら何とかなりそうです.
しかし,問題は今回増やす16進ディップロータリースイッチが基板直付けタイプしか入手できなかったので部品の高さに合わせて基板設置位置を調整しないといけない点なんです.
タカチ製メタルケースを使用しているのですが,基板をどのように設置するかが課題になりそうです.

以前は,MIDIコネクタ(壊れたYAMAHA V2から取り外した基板直付けタイプ)を基板固定兼用として基板ごとケースにねじ止めしていました.
しかし,メンテナンスの度に取り外しが面倒だったため,今回はI/O部分をコネクタ化して分離する事にしていますので基板を浮かせるためには別途固定方法を考えなければなりません.

アルミケースの下からネジで固定できればスペーサ(高ナット)も使えるのですが,生憎コントローラ自体の背が高いのでこれ以上底上げすると座って演奏する時に膝がスタンドに当ってコントロール性が悪くなるんです.

溶接できれば一番ですが資格も工具も持ち合わせていませんので…
皿ネジでもザグリが入れられるほど厚いケースでもないですし薄平ネジだったら何とかなるかもしれませんが,ゴム足の高さが1.5mmだから圧がかかってゴムが潰れた時に床を傷つけちゃうかも?(ネジに1mm程度のゴム貼る?)
ま,最悪は馬パテで高ナットを固定するって言う力技もあるにはありますけどね.

メカの勉強,どこかではしないといけないのかなぁなんて少し考えてみたり…
いや,これ以上の器用貧乏は御免です.
フリーの2D-CAD止まりで十分(苦笑


今日は,プログラムができたので一旦クローズド.
次回はいつになるかわかりませんけど回路を作り直したいと思います!





お気に入りの記事を「いいね!」で応援しよう

最終更新日  October 25, 2015 10:11:07 AM
コメント(0) | コメントを書く
[音楽] カテゴリの最新記事


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: