DCC簡易コントローラについて補足
ここでは、主としてInputUnit3装置とBasicUnit装置の機能の紹介、組み立て時のトラブルシューティング解説をおこないます。
1:システム構成
今まで紹介した回路図を並べて、システム構成例を図1と図2に示します。DC5V電源をBasicUnitへ接続します。他のすべての周辺装置(InputUnit1,2,3, BDxUnit, 7segLEDdisplayUnit)はBasicUnitから給電されるので、電源は不要です。電源を入れるときの機器接続状態やSW操作により、以下のように、動作モードが切り替わります。

写真1:北米Nゲージレイアウト用のDCC簡易コントローラ製作例

写真2:写真1のコントローラの表側。制御盤上のLEDで在線状態がモニターでき、さらに、押しボタンSWでルート切り替え(ポイント切り替えと信号機制御)が一括操作できる。このLEDによる在線検知機能は、(本機とは独立に動作する)DCC簡易モニター装置(別ページで紹介済、写真の上に見えている小さな基板)を使っている。
1-0フラットケーブル:
本機の機器間は16芯ないし20芯のフラット(リボン)ケーブルで接続します。これらは「バスライン」となっており、3つ以上の機器を接続するときは、ケーブルの途中にコネクターを増設して接続します(図0)。

図0:簡単のためここで芯数は少なめに描いてますが、実際には16ないし20芯ケーブルを使います。
1-1ノーマルモード

図1:ノーマルモード時のシステム構成の例
図1は通常の状態(ノーマルモード)です。この図において、在線検知回路BDxUnitは4つだけ接続しています。すでに述べたとおりカスケード接続(BasicUnit側から一段目は一つ、二段目は2つ、三段目は4つ、四段目は8つの枝分け方式)により最大15個(=1+2+4+8)まで接続可能です。
InputUnit3は二つ接続していますが、同様にして増設可能です。InputUnit1、InputUnit2はこれらInputUnit3に習って接続してください。InputUnit1,2,3の混在も可能です。ただし、InputUnit1、InputUnit2へは7segLEDdisplayUnit用の青いケーブルは接続不要です。
DCCコマンドステーションからレールへの給電ライン(RailA、RailB)の途中でBasicUnitを経由するようにします。DCCコマンドステーションからはLoconetも接続します。
BasicUnitのRA1端子(つまりSW-1)は、表示したいアドレス(アクセサリーデコーダのとき入力1(SW-off)または在線検知アドレスのとき入力0(SW-on))を選択します。
1-2ノーマルモード、スローモードについて補足:
このモードで電源を入れると、InputUnit3のすべてPIC16F877AのLEDは一時的(0.3秒程度)に点灯し、すぐに消灯します。そうならない場合は他のモードになっています。
このモードとするために、BasicUnitのPIC16F877AのRC2端子は1となっています。InputUnit3のPIC16F877AのRA4端子は1となっています。
スロー(動作)モードや代表アドレス表示モードとしたい場合は、ノーマルモードの機器接続状態において、InputUnit3のPIC16F877AのSW1-1(RC0端子)とSW1-8(RC7)を同時押し(前者の場合)、またはSW1-7(RC6)とSW1-8(RC7)を同時押し(後者の場合)ながら電源を入れます。なお、後者の場合はその直後に8つの登録された代表アドレス(ただし、767を引いた数値となることに注意。未登録なら256になる。)を順次表示して、そのまま前者のモードになります。
1-3レジストモード:(DCCコマンドステーションを用いてInputUnit2や3にルート設定を登録する状態)

図2:InputUnit3をレジストモードとした場合のシステム構成
図2はInpitUnit3をレジストモード(DCCコマンドステーションをもちいてルート設定を登録する状態)にした場合です。この図には示していませんが、在線検知回路BDxUnitへは接続したままでも何ら問題ありません。念のため、レジストモードを持たないInputUnit1,2,3への接続は外します。そして、レジストモードとしたいInputUnit3へはレジストモード用のコネクタへ接続します。InputUnit3回路の右側のPIC16F877A(図中の赤い四角)がレジストモードに対応しています。
1-4レジストモードについて補足
このモードとしたい場合は、図2の機器接続状態において、レジストモードとしたいInputUnit3のPIC16F877AのSW1-2(RC1端子)を押しながら電源を入れます。このときInputUnit3のLEDが二回点滅します。ちなみに、点滅の仕方の微妙な違いにより、そのPIC16F877Aに書き込まれたプログラム?????tst2.asmと?????tst5.asmの違いを表しています。
このモードとするには、BasicUnitのPIC16F877AのRC2端子は0となっています。InputUnit3のPIC16F877AのRA4端子は0となっています。
もし、SW1-2を押さずに電源を入れると、レジストモードに入らずに、InputUnit3は無反応な状態(LED消灯、すべてのSWは無反応)になります。電源を切り、配線を確かめてください。
2:動作時の「仕掛け」について
ここでは、参考のため、本機がどのように動作するかを概説します。
2-1BDxUnitの在線検知機能:
在線検知機能はBDxUnitをBasicUnitへ(直接または他のBDxUnit経由で)接続しなれば動作しません。接続されたBDxUnitは在線検知アドレスとその在線状態をBasicUnitへ同期シリアル通信にて送信します。BasicUnitはそれら在線状態の変化(差分情報)だけをLoconetへ流します。なお、列車のレール短絡事故などによりDCCコマンドステーションが一時的に機能停止し復旧すると、BasicUnitはすべての在線情報をLoconetへ再送信するようにしています。
2-2InputUnit1,2,3によるアクセサリーデコーダ基本操作
当然のことながら、InputUnit1,2,3に並ぶ押しボタンSWを操作すると、そこに登録してあるDCCアクセサリーデコーダが反応(つまり、ポイントや信号機などが切り替わり)します。ルート機能も同様です。
このときInpuutUnit1,2,3とBasicUnit間は次のようにパラレル通信します。InputUnit1,2,3はRB0---RB7端子とRA2,3端子にDCCアドレス(10ビットの使用により001-999)を出力した状態でThrown/Closed命令をRE0,1端子に出力します。BasicUnitはRD0---RD7端子とRC0,1端子、そしてRC4,5端子で受信します。つまり、BasicUnitは、まずRC4またはRC5が0になるのを読み取ってThrown/Closed命令を受け取り、そのときのRD0—7とRC0,1の状態を読み取って、DCCアドレスを認識します。
2-3 InputUnit1,2,3のSW同時押しへの対策:
SW同時押しは誤作動の原因になります。この対策として、本機は最初に押されたSWにのみ反応して動作します。ルート機能などは一連のシーケンス動作に時間がかかりますが、この間、InputUnit3はLEDが点灯したままとなり、動作中を表示します。InputUnit2のLEDは待機中に点灯し、動作中は消灯するというInputUnit3とは反対な動作パターンになります。InputUnit1にはそのようなモニターLEDは装備していません。
このSW同時押し対策の仕掛けですが、まず、動作中のInputUnit1,3のRA1端子が0出力します。つぎに、これをすべてのInputUnit1,3はRA0端子で受信し、その後のSW操作をすべて無視するようにしています。ちなみに、InputUnit2はこのときRA2に出力しRA3で受信します。
2-4 その他:
7SegLEDdisplayUnitはBasicUnitのRB0—7に出力される信号のうち、RE0,1,2に1が出力されるタイミングだけに反応して、3桁アドレスとして表示するようにしています。RE0,1,2とRC3はそのうちどれか一つに循環的に1が出力されるようになっていて、RC3=1のとき7SegLEDdisplayUnitはBasicUnitのRB0—7出力を無視します。逆に、InputUnit3はBasicUnitのRC3=1のときのRB0—7出力を受信して、770以上のアドレスによるDCCコマンドステーション等からの遠隔操作を起動します。
ちなみに、あるInputUnit3からBasicUnitに対し、770以上のアドレスをThrown/Closed命令として送信すると、BasicUnitのLoconet出力部が持つ「ループエコーバック機能(自身の送信内容を自分に返す)」により、他のInputUnit3のルート機能を起動することができます。つまり、BasicUnitをLoconetへ接続しなくても起動できます。
3:組み立て時のトラブルシューティング(動作確認方法)
組み立て後は、以下の動作確認をしてください。
3-1:BasicUnitとLoconet接続の確認
BasicUnitは電源を入れると同時にLoconetに対し、DCCコマンドステーションの電源を入れる(DCCレールパワーON)ようにしてあります。そのため電源を入れる前に、DCCコマンドステーションの電源をOffにしておけば、電源を入れた瞬間にDCCレールパワーONになります。これにより、BasicUnitとLoconet間の接続状態が正常かどうかがわかります。ただし、このときBasicUnitのRA2(SW3)がOffになっていることが必要です。つまり、SW3をON/OFFすることによっても、DCCコマンドステーションのDCCレールパワー状態をON/OFFできます。
3−2:在線検知機能の動作確認
まず、BDxUnitの単体としての動作確認はBDxUnit基板上のLEDでおこないます。これにより第一センサー(RA0の入力)状態が確認できます。第二以降のセンサー回路の動作確認はRA1からRA7端子にテスターを当てて電圧を確認してください。ちなみに、在線時に0になり、不在時は1になります。
在線検知機能に関するBasicUnit側の動作確認には7SegLEDdisplayUnit(またはLoconet経由で自動運転ソフト等をインストールしたパソコン)が必要です。なお、BDxUnitを一つもBasicUnitへ接続しない状態では、BasicUnitの在線検知機能は動作しません。
BasicUnitの電源を入れたときに、接続されているBDxUnitのすべての在線情報がBasicUnitを経由してLoconetへ一括送信されます。これはBasicUnitのSW1をON(0入力、つまりGND接地)しておいて電源を入れると、7SegLEDdisplayUnitに在線アドレスと在線情報(小数点の点灯=在線)が順次(高速)表示されることで動作確認できます。
3-3:InputUnit1,2,3によるアクセサリーデコーダの制御
InputUnit1,2,3のしていることは単純なので、これら基板の単体(BasicUnitは不要)で、テスターにて動作確認できます。基板上のいずれかの押しボタンSW1-1からSW1-8 の一つを押すと、それに対応したDCCアクセサリーデコーダのアドレス(ルート機能なら複数個のアドレス)が、RB0---RB7端子とRA2,3端子に(10ビットの使用により十進数アドレス001-999を二進数)として出力し、そしてThrown/Closed命令がRE0,1端子として出力されます。つまり、RE0,1端子のいずれかがThrown/Closedに応じて命令出力時に0になります。ただし、待機状態ではRB0---RB7端子とRA2,3端子、RE0,1端子はすべて1になっているはずです。
InputUnit3は電源を入れたときに、LEDが一時的に点灯し、すぐに消灯するはずです。これによりノーマルモードに入ったことがわかります。
InputUnit3に登録されたルート設定内容はスロー動作モードや代表アドレス表示モードにより確認することができます(上述の1-2を参照)。
3-2:InputUnit3のレジストモード
InputUnit3は(SW1-2を押しながら)電源を入れたときに、LEDが一時的に点滅し、やがて点灯状態を維持するはずです。
これによりレジストモードに入ったことがわかります。DCCアドレスを書き込むたびに、LEDは点滅し、再び点灯状態になります。レジストモードが終了(999cを入力または14個アドレスを入力後)すると、高速点滅を繰り返します。
以上。