チャンネルデバイダーのVR制御(製作編1)

f:id:torusanada98:20180722025621j:plain

製作編1

ケースの設計は一部残っていますが、製作に入ります。

ケース設計と加工

フロントパネルおよびボトムシャーシの設計は終わっていませんが、残りは製作しながら現物合わせで設計を進めることにします。正直なところ部品の干渉具合を確認しながらでないと、問題を起こしてしまいそうです。前回、リアパネルのみ詳細設計を行い、タカチ電機工業の加工サービスをお願いする事にしました。

f:id:torusanada98:20180722025644j:plain

具体的には、HP内の「お引き合いフォーム」に必要事項を記入し、CADデータを添付して見積もりの依頼をおこないました。フォーム内の通信欄へ以下のコメントを記入しています。

・加工はリアパネル1枚のみ

・お取り引きはマルツオンライン様経由

7/16(祝月)に発信し、マルツオンラインのご担当者様から見積もりが7/18(水)夕方に届きました。加工付きケース(送料税込み)で26,767円でした。私の予想よりも5,000円くらい高かったですが、そのお見積もりで進めるように返信しています。今回の反省点は、パネルコネクタの形状に合わせて複雑な形状の穴を指定しましたが、コネクタ自体で、抜いた穴が隠れるため、もっと単純な形状にすべきでした。

f:id:torusanada98:20180722025725j:plain

左がオスで右がメスです。ハウジングの違いはロック機構の有無のみです。参考に図面を再掲載します。

f:id:torusanada98:20180722025811p:plain

タカチの加工サービスは、リピート時5%割引となりますが、連絡いただいたメールには、今回採用したケースUS-320LHが9月で廃版予定で、リピートに関しての注意が記載されていました。今のところリピートは考えていませんが、親切な対応だと感じました。

表示基板製作

上記ケースのカスタム対応は、穴加工の場合、受注後5日発送となります、現時点、到着待ちなのでケースがなくても部品干渉確認が可能(不要)?な基板から製作を行っていきます。表示基板は、他に構成が考えられないため、構想編10で仮組した仕様で製作を進めます。表示モジュールの取り付け用スタッドを金属製のものから樹脂タイプに変更します。モジュールのパターンと干渉するための対応です。

f:id:torusanada98:20180722025906j:plain

あわせて樹脂スタッド長を2mmのばして、表示モジュールが正面パネル面に近づくように変更しました。

f:id:torusanada98:20180722030002j:plain

最後に、基板端子台を取り付けて表示モジュールへ配線します。設計編1で説明したとおり、I2C用端子台を2極から3極へ変更しています。

f:id:torusanada98:20180722031120j:plain

なかなかいい感じに仕上がりました。早く正面パネルに取り付けて表示具合を見てみたいとおもいます。

arduino UNO用シールド基板製作

次はarduino UNOへ配線するためのシールド基板の製作です。この構成も他の方法が考えられない為、構想編で検討したとおり基板端子台のみを実装したシールド基板を段積み接続する事とします。シールド仕様のユニバーサル基板に段積みするためのピンソケットを取り付けます。必要なものは、6P, 8P, 10Pの3種類です。ピンソケットのモールドは溶けやすいのでハンダ付けは手早く行います。基板端子台をシールド基板に取り付けようとしたところ、端子がささりません。仕方がないので以前購入したミニサイズドリルセットとピンバイスで基板の穴を広げました。

f:id:torusanada98:20180722030138j:plain

ノギスで基板端子台の足の径を測定したところ、1mmだったので1mmのドリルで取り付ける部分の穴を広げました。この状態でもまだ刺さりません。私のドリルセットは1mm以下は0.05mm刻みで揃っていますが、1mm以上は0.2mm刻みで、ワンサイズ大きいものは1.2mmでした。この径では緩すぎますが、ハンダで固定する事としました。全ての基板端子台を仮止めしてマイコン基板との干渉を確認します。表示基板用の3極の端子台の足がarduino UNOに実装されたポストと干渉していました。

f:id:torusanada98:20180722030219j:plain

仕方がないので、3極の基板端子台の実装位置を1列基板中心側にずらして干渉を回避しました。端子台だけですが、シールド基板への実装が完了しました。

f:id:torusanada98:20180722030313j:plain

arduino UNOに装着するとこんな感じになります。

f:id:torusanada98:20180722030615j:plain

次回は端子台とピンソケット間の配線を行い、完成した表示基板の動作確認を行います。

 

つづく(製作編2)

チャンネルデバイダーのVR制御(設計編2)

f:id:torusanada98:20180718072151j:plain

設計編2

各基板の回路設計が終わったのでシャーシの設計を行います。

ATTユニットのケース加工

構想編11でざっとシャーシへの基板実装の検討をおこないましたが、今回のケース製作の難易度は比較的高いです。ポイントは以下のとおりです。

1)基板、トランス等実装部品が多く、それらを部品間の干渉なく実装する

2)リアパネルにXLRパネルコネクタを12個実装する

3)正面パネルの表示部の加工

2項と3項は努力でなんとかするしかないので、まずは1項の検討を行います。

シャーシ加工

選定したケースはタカチ電機工業のUS-320LHです。バランスヘッドフォンアンプの製作で使ったケースです。外形はW320xH84xD230です。最初にボトムシャーシに部品実装できるフットプリントを明確にします。このケース下図のとおり、フロントパネル、リアパネルともに取り付け用のフランジが12mmがあり、この範囲への部品取り付けはできません。

f:id:torusanada98:20180718072212p:plain

さらにフロントパネルは、ボトムシャーシ端から5mm奥に入った位置に固定されます。従って、ケースの奥行き230mmに対してボトムシャーシの部品取り付けが可能な奥行き長は以下となります。

230 - 12 x 2 - 5 = 201 mm

部品実装が可能は幅は、フランジを含めたパネルの幅となるので、316mmです。

f:id:torusanada98:20180718072245p:plain

下記の部品は、316x201mmの範囲に配置する必要があります。

・ATT基板3枚(95x72mm)

・バッファアンプ基板1枚(95x72mm)

・電源基板1枚(95x72mm)

arduino UNO基板1枚(約68.6x53.3mm)

トロイダルトランス2個(W65xD65xH34mm)

構想編11で確認を行ったように、まずは標準基板8枚を実装可能エリアに並べてみました。

f:id:torusanada98:20180718072324p:plain

このうち3枚を削除し、1枚をサイズの小さいarduinoUNO基板に置き換え、トロイダルトランス2個を搭載します。部品の干渉要素としては、リアパネルのXLRパネルコネクタ、ヒューズホルダ、ACインレットとフロントパネルの表示基板、SW4個です。一応搭載部品を並べることができたので、後は実装時になんとかしたいとおもいます。

リアパネル加工

ケース加工のポイントでも上げたとおり、リアパネルにはXLRパネルコネクタを12個取り付ける必要があります。今まで、パネルコネクタを一番多く取り付けた機器はチャンネルデバイダの6個です。この加工を行った際にこれ以上は一度に加工できないと真におもいました。という事で、今回はタカチ電機工業の加工サービスを利用する事にします。A級モノラルBTLアンプ製作の際に1度利用した事があります。その時は、パネル厚が4mmと厚く加工に自信がなかったために利用しました。久しぶりの利用なので、スムーズに進むか心配です。利用上の注意点は以下のとおりです。

・タカチ電機の製品使用が前提で1点から受付可能

・個人利用の場合は、販売代理店経由での決済

・CAD(DXF/DWG)データ利用の場合は加工費5%オフ

図面作成

まずはいつも利用させてもらっているAR CADで加工図面を作成します。XLRパネルコネクタの取り付け穴は特殊なので図面作成はそれなりに大変でした。12個分コピペ対応し、さらにヒューズホルダとACインレット取り付け用の穴も作成しました。

f:id:torusanada98:20180718072403p:plain

完成した図面を、CADソフトのエクスポート機能を使ってDXFデータに変換します。見た目には、それなりに見えますが加工データとして見るといくつもエラーが発生していないか心配です。見積もり用のフォームに添付して送付し、現在結果待ちの状況です。ケースの標準価格が8,340円ですが、加工費はどの程度になるでしょうか?次回はケースの加工の状況によって作業を決めたいとおもいます。

 

つづく(製作編1)

チャンネルデバイダーのVR制御(設計編1)

f:id:torusanada98:20180715134451j:plain

設計編1

アッテネータユニットの構想が終わったので設計を完成させます。

アッテネータユニット仕様

設計を完成させる前にアッテネータ仕様を再度整理します。

・バランス3wayマルチアンプ対応12チャンネルアッテネータ

・全9ステップ(-∞~-6dB)

・入力レベル調整機能なし

・出力バッファー搭載

・アッテネータ切り替え時ミューティング機能

・減衰量dB表示

arduino UNOをつかったマイコン制御

それでは各基板ごとの回路を順次フィックスしていきます。

マイコン基板

arduino UNOに端子台を実装したシールド基板を搭載します。回路図は以下のとおりです。

f:id:torusanada98:20180715134512p:plain

電源は12Vで、arduino UNOのDCジャックから供給します。シールドに搭載する端子台は、key入力用の2極の端子台3個と表示基板制御用I2C出力用3極端子台、リレー制御出力用5極端子台です。デバッグ環境を残すために、組み込み用として新たにarduino UNOを1個購入しました。(アイキャッチ写真参照)これで運用中のユニットびソフト変更の対応も問題ありません。

表示基板

構想編10にてほぼ組み立ててしまいましたが、そこからの変更点はI2C入力用端子台をGNDラインを追加して2極から3極に変更しました。回路図は以下となります。

f:id:torusanada98:20180715134553p:plain

アッテネータ基板

片チャンネル分ですが、構想編11で回路図をすでに掲載済みです。ミュートおよびATT倍率リレー駆動用のダーリントンシンクドライバTD62003APは、7回路入りですが、4回路のみの使用となります。改めて回路図を掲載します。

f:id:torusanada98:20180717124728p:plain

バッファ基板

これも構想編10にて回路図を掲載済みです。変更点は+/-12V電源入力用の3極の端子台を2個(左右独立)追加しています。この基板上にはオペアンプが12回路必要となりますが、2回路入りのMUSES01を6個で対応したいと考えています。秋月電子価格で、1個3,500円もします。これだけで14,000円のコストがかかります。ん~どうしよう。回路図を改めて掲載します。

f:id:torusanada98:20180715134715p:plain

電源基板

電源基板はいままで検討してこなかったので、まずは要求仕様を整理します。

・リレー駆動用12V電源(225mA)

・aruduino UNO駆動用12V電源(約25mA)

・ロジックIC&7セグモジュール駆動用5V電源(約20mA)

・R-chバッファアンプ駆動用+/-12V電源(約60mA)

・L-chバッファアンプ駆動用+/-12V電源(約60mA)

まずは筐体へ全基板を納める事を優先し、全ての電源を三端子レギュレータで構成する事とします。ディスクリート電源化は、完成後の楽しみとしてとっておきたいとおもいます。トランスは、考えましたが今までの製作で使ってきた12V/2回路出力のトロイダルトランスを2個搭載する事にします。1つをバッファアンプ用電源専用として、それ以外を、もう1つのトランスで対応します。2次巻き線の電流容量は500mAなので、1つの巻き線でリレーを駆動し、それ以外の制御系を残りの巻き線で対応する事にします。回路図を起こしてみます。最初はバッファアンプ用の+/-12V電源です。

f:id:torusanada98:20180717072425p:plain

L/R独立電源とします。安定化電源の性能改善で確認した、三端子レギュレータ出力の電解コンデンサの弊害を考慮して、出力には小容量のコンデンサのみとしています。また、GNDはA-GNDとして制御回路とは分離させています。次は制御回路用の電源です。

f:id:torusanada98:20180717072506p:plain

バッファ用電源とは、トランスを含めて完全に独立させています。消費電力の観点から、リレー用電源を専用としています。一番消費電力の大きいリレー回路の三端子レギュレータの消費電力を試算してみます。ショットキーバリアダイオードのVFを0.5として計算します。

(12 x 1.41 - 0.5 x 2 - 12) x 0.225 = 0.88 W

NJM12xxFAのデータシートの消費電力vs環境温度のグラフを参照します。

f:id:torusanada98:20180715135017p:plain

グラフからヒートシンクがなくとも1.5Wくらいは消費させても問題ないようです。念のため、小型のヒートシンクを付ける事にします。他の三端子レギュレータは0.3W以下の消費電力なのでヒートシンク無しとします。次回は、ケース発注のために、トランスおよび基板のケース実装を検討します。

 

つづく(設計編2)

チャンネルデバイダーのVR制御(構想編11)

f:id:torusanada98:20180711072224j:plain

構想編11

今までの製作で経験してこなかった部分の製作目処がたったので、ユニット全体の構成について検討します。

アッテネータユニットの基本構成

具体的な検討に入る前にユニットの基本仕様を整理します。

1)バランス3wayステレオ用のため、全12チャンネル構成

2)アッテネータユニットへの入力レベルは各チャンネルで同一レベル

3)出力にバッファを搭載して次段の入力抵抗の影響を排除

後は、今までの構想編で検討してきた結果を適用します。特に3項は今までのこだわりを捨てることになり、相当考えましたがアッテネータユニットの使い勝手を考えたらバッファ搭載せざる得ないとの結論に達しました。この要求を前提に回路および基板の構成を検討します。

アッテネータユニット回路と基板構成

基板構成の検討の前に、回路を明確にします。といっても、いままで掲載したアッテネータ回路の後段にバッファを接続するだけです。

f:id:torusanada98:20180711072244p:plain

この回路ですが、バランス用なので2倍、さらに3wayなので3倍、ステレオで2倍となり、合計12系統必要となります。電源は、バッファ用の+/-12V電源とリレーおよびarduino UNO用の+12V電源、ロジックICと表示モジュール用の+5V電源が必要となります。さらにマイコン基板の搭載が必要です。電源とマイコン基板はそれぞれ1枚づつとして、残りアッテネータ回路の基板割りを考えてみます。3way用を各1枚の基板に納めるとした場合、出力段のバッファ用の電源の配線が各基板に必要となります。左右独立電源とした場合、12セットの電源の配線が必要となり現実的ではありません。これを回避するために終段用のバッファを1枚の基板の納める事を検討してみます。この場合、電源の配線は少なくてすみますが、信号用の3極の端子台が合計で12個必要となります。

f:id:torusanada98:20180711072338p:plain

どっちもあまり変わらない気がしてきましたが、リレーを搭載する基板の実装面積を考えると、バッファ基板を独立させる方針で検討を進めてみます。

アッテネータ基板

Lo/Mid/High用に各1枚を割り当てます。リレーの接点仕様は2cなので、1個のリレーでHotとcoldの制御を行います。各チャンネル6個のリレーが必要なので、各基板にはステレオ用として倍の12個のリレーの搭載が必要です。リレー制御用のロジックICも、この基板に搭載する事にします。この基板上の回路は以下のようになります。

f:id:torusanada98:20180717125140p:plain

制御用の信号ラインは、入出力に2セット搭載して、3つの基板をデイジーチェーン型に接続する事とします。実際にこんなに部品実装ができるかの確認の為に、基板に部品を並べてみました。なんとか実装はできそうです。(アイキャッチ写真参照)

マイコン基板

電源は+12Vを2.1mmのDCジャックから供給します。Key入力およびI2C制御線、ポート出力は、シールド仕様のユニバーサル基板を使って端子台のみを実装したシールド基板を製作して、arduino UNOに段積みしたいとおもいます。両脇にピンソケットが実装されるため、端子台の向きを内向き(配線を内側から引き出し)に実装する必要があります。

f:id:torusanada98:20180711072443j:plain

ケースの選定

電源基板を1枚で構成するとして、搭載する基板は6枚となります。これ以外に電源トランスが必要となり、ケースの選定が難しくなってきます。最近使ったケースの中で1番大きなものは、バランス用ヘッドフォンアンプで使ったタカチUS-320LHです。サイズは、W320xH84xD230です。このシャーシに何枚の基板を実装できるかをバランスヘッドフォンアンプ内部に基板を並べて確認してみました。

f:id:torusanada98:20180711072522j:plain

かなり強引な確認ですが、無理をすれば8枚並べられそうです。2枚分のスペースにトランスが配置できればなんとか納められそうです。だいたいのあたりがつけられたので、次回は具体的な設計を行います。

 

つづく(設計編1)

チャンネルデバイダーのVR制御(構想編10)

f:id:torusanada98:20180707200507j:plain

構想編10

ボリューム制御のソフトコーディング&デバッグが一通り終わったので、ソースの整理と表示モジュールの取り付け方法の検討を行います。

ソースの整理

前回の記事の冒頭でも書きましたが、ソースを勢いで書いてきたため、整理が必要な状況です。一通り実装が終わったので整理を行います。具体的に行う作業は以下のとおりです。

1)使用していない関数の削除

ネット上に掲載されていた7セグ表示用のサンプル関数をそのままコピペした部分があり、一部使用しない関数がありました。その関数を削除します。

2)コメントの追加

その場の勢いで変数名を決めたため、後から見て何の変数かわからなくなりそうな部分が多々ありました。ソースのメンテナンス性を考慮してコメントを追加します。

3)変数の型見直し

最初はグローバル変数の確保にほぼ全て「int」型を指定していました。状態変数やフラグなのどは、「byte」で事足りるので変更しました。上記ソースの整理の結果、使用メモリは以下のとおり削減できました。

f:id:torusanada98:20180707200530p:plain

1項はコンパイラが判断して不要な関数のメモリ展開を行わないためか、リソースの使用量に変化はありませんでした。3項はRAMだけでなくフラッシュメモリの使用量の圧縮ができました。コメントはこんな感じで追加しています。

f:id:torusanada98:20180707200612p:plain

英語表記の方が格好いいですが、後でわからなくなってしまったら意味がないので日本語で記述しました。

表示の取り付け検討

まだ構想編ですが、表示の取り付け方法について検討してみます。デバッグ時の写真のとおり、7セグ表示モジュールをそのままむき出し状態で取り付けると格好悪い為、なにかいいものがないかと思いながら近所のスーパービバホーム店内を巡ってみました。使えそうなものがありました。スモークの入ったアクリルパネルです。

f:id:torusanada98:20180707200647j:plain

正式名称は、アクリルサンデーEXのブルースモークタイプです。厚みが2mmで全光線透過率は19%となっています。加工方法は別途検討するとして、表示に被せるとこんな感じになります。

f:id:torusanada98:20180707200721j:plain

なかなかいい感じではないでしょうか?せっかくなので、表示モジュールの正面パネルへの取り付け方法についても検討します。7セグの表示モジュールには、4カ所に取り付け用に穴が開いています。

f:id:torusanada98:20180707200807j:plain

このうち対角の2カ所を使って、配線引き出しおよび正面パネル固定用の基板に取り付けます。丁度いい大きさの基板がなかったので、標準基板をカットして準備しました。

f:id:torusanada98:20180707200846j:plain

固定用基板にスタット取り付け用の穴を開けて、正面パネル取り付け用のスタッドを取り付けます。表示モジュールへの配線は電源(5VとGND)およびI2C用ライン2本(SCLとSDA)なのでそれぞれ配線用の2極の端子台2個を取り付けて完成です。

f:id:torusanada98:20180707200950j:plain

表示モジュールの配線は、電源およびI2C用のスルーホールが取り付け用の穴の脇にありますが、それぞれ2ペアあり、取り付け穴として使わない方を使用して、ネジとの干渉を防止する予定です。また、現状は表示モジュール取り付け用のスタッドは金属ですが、表示モジュールの基板パターンと干渉するため、本番用に樹脂スタッドを準備する予定です。

f:id:torusanada98:20180707201031j:plain

現状は取り付け用スタットのトップと表示モジュールの正面間のクリアランスを3mm取っていますが、実際に取り付けてみて表示が奥すぎる場合は、スタッドの長さを短くして表示モジュールの位置を調整する予定です。後は、アクリル板の加工(カットと取り付け用の穴開け)および、正面パネルの角穴をいかにきれいに開けるかがポイントです。正面パネルの角穴については、加工性の良い黒のシートを上から被せて、カット部の仕上げを隠す工夫を検討したいと考えています。次回はユニット内の基板の構成について検討します。

 

つづく(構想編11)

チャンネルデバイダーのVR制御(構想編9)

f:id:torusanada98:20180704072504j:plain

構想編9

リレー制御ブロックのソフト仕様が固まったので、コーディン、デバッグを行います。

コーディング

いきおいでソースをつくってきたのでだんだん心配な状況になってきています。変数名を適当に決めたうえに、何の変数かのコメントもいれず、不必要なサイズのメモリ確保をしている等、記憶が鮮明なうちに見直しすべき状況となってきています。リレー制御ブロックを組み込めば一通りの処理がコーディングされる事になるので、その後でソースの整理をしたいとおもいます。前回決めたソフト仕様に従ってコーディングを進めます。詳細なフローができあがっているのでコーディングはさほど大変ではありませんでした。

デバッグ環境準備

リレー制御のソフトの動作が簡単に目視できるように、4つのポートにLEDを接続します。構想編3に掲載したarduino UNOの仕様を見ると、1つのポートから最大20mAでポート合計で100mAまで電流を供給できるとされています。準備したLEDは標準電流20mAの赤のLEDですが、秋月の販売ページを見ると3mA程度の電流でも十分発光すると説明がありました。このコメントを信じて、電流制限抵抗を1kΩとしました。デバッグ環境はこのようになりました。

f:id:torusanada98:20180704072533j:plain

リレー制御デバッグ

まず最初に、リレーの状態が所定の設定になることを確認します。作成したスケッチをコンパイルし、細かな記述ミスを修正します。確認コンパイルがとおったところで、バイナリを基板に送ってデバッグ開始です。

f:id:torusanada98:20180704072619j:plain

写真のとおり、PB1/0はオン状態で、ATT倍率制御もできていません。唯一、ミュートリレー制御はできているようです。ソースを見直したところ、ATT倍率設定用のポート制御処理がまるまる入っていませんでした。処理を入れたところ、ATT倍率制御は動作するようになりました。残りは下位の2ビットの制御です。ソースを見直してもおかしなところが見あたりません。そう言えばこの2ビットはシリアル系のポートと共用されている事を思い出しました。

f:id:torusanada98:20180704072700j:plain

使用する為の設定が必要なのではと思い当たりネット検索したところ、この2ポートは使うべきではない事がわかりました。PCと接続しているUSB制御に使用されているとの事で、無理すれば使えない事はありませんが、他のポートが空いているのであれば他を使うべきとの事でした。急遽この制御用の4ポートPB0~PB3をPB8~PB11へ移動させました。回路は以下のとおりとなります。

f:id:torusanada98:20180704072957p:plain

ソースのポート設定を変更し、デバッグ基板のジャンパ配線を変更して早々にデバッグの再開です。この変更で基本的な制御はできるようになりました。

f:id:torusanada98:20180704072743j:plain

細かな修正点としては、音量最大時(ATTstate=8)にUpボタンを押した時に、減衰量設定は変わりませんが、リレー制御(ミュート処理)が起動していました。この条件時はリレー制御リクエストを除外して対策しました。減衰量切り替え時のミュート制御ですが、ミュートディレイ時間を現状は100msとしているため、LEDの点滅で正しく動作しているように見えます。念のためポケットオシロでタイミングの確認をしました。

f:id:torusanada98:20180704072820j:plain

PB11(muteB)とPB8の信号をモニタします。減衰量をきりかえてタイミングの確認を行いました。

f:id:torusanada98:20180704072907p:plain

減衰量切り替え前後それぞれ100ms間、ミュートがかかっている事が確認できました。あわせて単純なミュート動作のタイミングも確認しました。どちらも問題ありません。最後に1点気になった事は、マイコンの初期化までの間、PB8に電圧がかかっている点です。ミュートおよび倍率のリレー設定は問題ないので、実用上は問題ありませんが、原因を確認しておきたいため、ネット検索してみました。直接この点に言及した書き込みが見あたらない為、回路図を確認してみます。

f:id:torusanada98:20180704073602p:plain

PB8はマイコンの周辺LSIに直結されているため、このLSIの仕様と考えざるえません。最後に、早押しの確認もしてみましたが、異常動作もしませんでした。これで制御ソフトは一通り完成です。次回はソフトを含めた制御システムの整理と今後の方針を再検討します。

 

つづく(構想編10)

チャンネルデバイダーのVR制御(構想編8)

f:id:torusanada98:20180701090916j:plain

構想編8

リレー制御ブロックの基本回路を決めたので、それ用のリレー制御ソフト仕様を検討します。

ソフトの構造

現状のソフトはアイドル状態(state0)の先頭で表示処理を行っています。Up/Downボタンが押されると、SW確定時にチェンジリクエストフラグを立てて、表示処理内で表示変更を行っています。当初は、この処理にリレー制御を追加しようと考えましたが、減衰量切り替え前後のミュート処理を考慮して、メインループ中にリレー制御をキー処理とは独立に組み込む事としました。この実装によりキー処理とリレー処理が非同期となるので、うまく実装ができれば良好な操作性が実現できます。

f:id:torusanada98:20180701090936p:plain

ポート制御

リレー制御にはPB0~PB3を使用します。減衰=∞時は全て'L'なので、ポートの設定はPull-Up無しとして、外付け抵抗によりPull-downする事にします。

f:id:torusanada98:20180701091014p:plain

Relay[]配列には、各ATTstateに対応した4bitの数値を設定しているので各bitをそのまま各ポートに出力します。リレーの動作時間のばらつきにより、切り替え時に不定な状態が発生するので、ポート切り替えの前にミュートをかけてから切り替えを行いその後解除する処理を追加します。この処理は減衰量切り替え時のみに必要なので、単純なミュートのオンオフ切り替えでは必要ありません。このリレー制御の状態遷移用にRstate状態変数を設定し、Rstate=0は、無処理とし、リレー制御が必要となった時点でRstate=1として処理を進める事とします。

リレー制御リクエス

繰返しの説明となりますが、ここで言うリレー制御とは、ミュート処理が必要な減衰量切り替えの事で、単純なミュートのオンオフ制御は対象外とします。リレー制御要求はRstate=1とする事で処理をスタートします。キーの連続押しで、リレー制御が途中まで実行されていても、減衰量切り替えが必要となった場合はRstate=1として、かまわずリレー制御を再スターとさせます。Rstate=1とする条件を整理します。

①Upボタン(sw1)確定時。但し、ATTstateが0→1の場合を除く

②Downボタン(sw2)確定時。但し、ATTstateが1→0の場合を除く

f:id:torusanada98:20180703054252p:plain

f:id:torusanada98:20180703093744p:plain

リレー制御

Rstate=1では、ミュートオンしてミュートディレイタイマーを初期化し、Rstate=2とします。Rstate=2では、ミュートディレイタイマを監視し、タイムアップしたらATTリレーを設定変更し、ミュートディレイタイマーを再度初期化してRstate=3とします。Rstate=3では、ミュートディレイタイマーを監視し、タイムアップしたらミュートオフし、Rstate=0としてリレー制御を終了します。言葉でかくとわかりにくいので上記をフロー化します。一部、ミュートディレイタイマを無視して処理を進める条件を追加しています。ミュートディレイタイマーは、とりあえず100msとし、後で調整します。

f:id:torusanada98:20180701091217p:plain

ミュートボタンとの競合

リレー制御の途中にミュートボタンが押された場合の処理について整理します。

1)リレー制御中のミュートオン

リレー制御状態にかまわずミュートオンしmute=1とします。リレー制御はそのまま続行し、最後のミュートオフを行わずに終了します。この判断はmute=1またはATTstate=0でおこないます。

2)リレー制御中のミュートオフ

リレー制御中(Rstate!=0)の場合は、ミュートフラグのみ切り替えて(mute=0)ミュートオフの制御は行いません。リレー制御は続行して、その最後でミュートオフします。言葉で書くと単純ですが、はたして意図どうりに実装ができるでしょうか?これでリレー制御ブロック用のソフト仕様がかたまりました。次回は実際にコーディングし、デバッグを行います。

f:id:torusanada98:20180703093926p:plain

 

つづく(構想編9)