赤外線でつながる協調ユニット (Ir/I2C Connect Cooperation Unit) 【ACTスコアの記述方法】   制作・著作:オークボ電子機巧   twitter:https://twitter.com/karakuriokubo   ホームページ:https://www.facebook.com/KarakuriOkubo この文書では 協調ユニットで使用する ACTスコアの記述方法について説明します。 ■前提事項 ・ACTスコアのソースは C言語で記述されています。 ・ACTスコアの実体は EEPROMに格納された Act構造体の配列です。 ・Act構造体(Struct_Act)は agent_lib.hで定義(宣言)されています。 ■ACTスコアの構成 〇スコア全体の構成 次のように BEGIN_OF_SCORE で始まり,END_OF_SCORE で終わります。 BEGIN_OF_SCORE と END_OF_SCORE のあいだに,個々の ACTを記述していきます。 区切りのカンマを忘れないように注意してください。 Act EEMEM act_score_A[] = { BEGIN_OF_SCORE //【スコア開始】 , ACT-1 , ACT-2 , ACT-n , END_OF_SCORE //【スコア終端】 }; ※備考 ・BEGIN_OF_SCORE は必ずデータの先頭にひとつだけ記述してください。 ・スコアの途中に END_OF_SCORE を記述したら,そこが終端になります。 ・複数の END_OF_SCORE を記述したら,最初に現われたところが終端になります。 〇個々のACTの構成 次の5つのフィールドで構成されます。{ ACT , PARAM , RHYTHM , CTRL , STEPS } フィールド同士はカンマで区切ります。各フィールドは 8bitの値です。 ACTごとにカッコ{}でくくります。ACT同士はカンマで区切ります。 ※備考 ・RHYTHM はスコアにのみ記載される情報であり,伝播はされません;発信マスタのみ参照して従います。 ・RHYTHM 以外のデータは,転送フレームに載って伝播します。 *ACTの例@ 出力パタンの記述(通常の出力) , { 0b00101010 , NO_DELAY , 16 , USUAL_ACT , NO_ATTEN } この例の意味, ACTフィールド: 出力ビットパタンそのものを記述します。 この例では,00101010というビットパタンを指定しています。 PARAMフィールド: 遅延処理を行なうときに,遅延パラメータを指定します。 NO_DELAY のときは遅延を設けず,ACT出力と同時にすぐにIR発信することを指示します。 RHYTHMフィールド: 次のACT実行までの間(ま)を指示します。 この例では タイマ周期の 16サイクル待ってから,次のACTを処理します。 CTRLフィールド: 各種制御ビットを記述します。 USUAL_ACT のときは特殊な制御は行なわず,すなおにビットパタンを出力してそのままにします。 STEPSフィールド: 伝播範囲を指示します。 NO_ATTEN のときは「減衰なし」です。つまり 無限に伝播します。 数値(0~16)を記述すると,その数だけユニットを経由したら伝播停止します。0はそれ以上伝播しません。 *ACTの例A 出力パタンの記述(波紋) , { 0b00101010 , 0x40 , 16 , RIPPLE_BIT , NO_ATTEN } この例の意味, ACT,RHYTHM,STEPSフィールド: 例@と同じ PARAMフィールド: 遅延処理を行なうときに,遅延パラメータを指定します。 上位4bitで波紋クリアのタイミングを指定,下位4bitでIR発信のタイミングを指定します。 この例では タイマ周期の 4サイクル待ってから波紋クリアを行ないます。 CTRLフィールド: RIPPLE_BIT を指定した場合,遅延パラメータのタイミングで出力を自動的にクリアします。(これを【波紋】と呼びます) 遅延パラメータが0の場合は,IR発信完了と同時に 出力を自動的にクリアします。 *ACTの例B コマンドの記述 , { CMD_TEMPO , TEMPO_64MS , 0 , CMD_BIT , SPREAD_0 } ※ACT & PARAM は,コマンドのときは コマンドコード & パラメータ として使用されます ACTフィールド: これがコマンドコードになります。 この例では,CMD_TEMPOコマンドを指定しています。これによりタイマ周期を設定しています。 PARAMフィールド: これがコマンドパラメータになります。 この例では,タイマ周期を 64MSに設定しています。 RHYTHMフィールド: 次のACT実行までの間(ま)を指示します。 コマンドの場合は,0を与えて次々と処理させます。 CTRLフィールド: 各種制御ビットを記述します。 CMD_BIT を指定して,コマンドであることを示します。 STEPSフィールド: 伝播範囲を指示します。 SPREAD_0 というのは0です。つまり,それ以上伝播しません。 コマンドは 発信マスタのふるまいを設定するのが主な用途なので,それ以上伝播する必要がありません。 もし伝播させたい場合は,例@の説明のとおり伝播範囲を与えます。 ■制御ビット一覧 CTRLフィールドで指定できる制御ビットの一覧です。 制御ビットは独立したビットであり,並列に(論理和)記述することもできます。→ 例: RIPPLE_BIT | ATTEN_BIT ・USUAL_ACT : 通常の出力 ・CMD_BIT : コマンド ・RIPPLE_BIT : 波紋 ・ATTEN_BIT : 減衰(*1) ・FORCE_BIT : フォース: 同一ACTを受容させる場合などに使う(下記*2) ・BOUNDS_BITS : 境界演算(2bit) 伝播限界(STEPSで指定した伝播範囲)での挙動を指示します 00:演算なし / 01:パタン凍結 / 10:フォース反転 / 11:出力パタン反転 ・VRIPPLE_BIT : 仮想波紋(出力を保持したまま内部的な状態のみ波紋処理する) ・DIS_I2C : I2C転送無効;必ず IR送信で伝播する(*3) (*1)暗黙の減衰について 減衰を有効にするには CTRLコードに ATTEN_BIT を明示する必要がありますが, STEPSフィールドに NO_ATTEN(実体は0xFF)以外を記述した場合は, プログラムで自動的に ATTEN_BIT=ON としてフレーム生成します【暗黙の減衰】 逆に, NO_ATTEN(実体は0xFF) と記述した場合は,プログラムで自動的に ATTEN_BIT=OFF としてフレーム生成します。 これにより,スコア記述の煩雑さを解消できます。(STEPS さえ記述すれば,ATTEN_BIT を記述する必要はありません) (*2)フォース FORCE_BIT の用途について 全く同じフレームを生成しても処理されません。(実行もIR発信もされません) 仮に同じフレームを発信したとしても,受信側で同一内容(重複)と判定されて受容されません。 ただし意図的に同一内容のACTを連続して生成・許容させたい場合には,FORCE_BIT を反転して与えます。 (*3)I2C転送無効 DIS_I2C について 特に指示がなければ,ユニットはまず I2C転送を試みます。 物理的にI2C接続されてなかったり,障害によりI2C転送できなかった場合に,自動的にIR発信に切替えます。 DIS_I2C は最初から I2C転送ではなく,IR発信を行なうよう指示するものです。 ■コマンドリファレンス ・CMD_CHG_SCORE : CMD.スコアの切替;複数のスコアを切替え ・CMD_NEXT_ACT : CMD.次ACTの設定;ループ制御に用いる ・CMD_TEMPO : CMD.スコアの基本テンポ(タイマー周期) ・CMD_ENABLE : CMD.コマンド活性;コマンドを有効/無効にする ・CMD_SAFETY_STOP : CMD.安全停止モード設定(一定時間 次ACTの生成・受信がなければ強制リセットするモード) ・CMD_FINISH_MODE : CMD.終了モード設定;スコア終端でのユニットの挙動を定義します *終了モードとして以下のパラメータを指定できます: FIN_INIT : 状態の初期化;ACTクリアして,ユニット初期状態に復帰;このACTクリアは伝播します FIN_HOLD : 状態の保持;STOPスイッチ押下時の状態を保持して停止,もう一度スイッチ押下で FIN_INITの処理を行なう FIN_NONE : なにもしない;ACT放置し,ユニット初期状態に復帰 FIN_RESET: リセット終了;このリセット動作はコマンドとして伝播します ・CMD_IR_RECEIVER : CMD.IR受信の有効化/無効化 ・CMD_RHYTHM_SOURCE : CMD.リズムソース設定;ACTスコアを読み進めるトリガを指定します *リズムソースとして以下のパラメータを指定できます: INTERNAL1: 内部トリガ(タイマー) EXTERNAL1: 外部トリガ(スイッチ)=ユニットの STARTスイッチ EXTERNAL3: 受信トリガ;他ユニットからのフレーム受信をトリガとする 以上