DCCのパケットの取得はできたのでポイントデコーダを作りたいと思います。
- マイコンからポイントを駆動させる
- DCCパケットからアクセサリデコーダへの命令を取得する
- 上記2つをくっつける
という手順で進めます。
1.マイコンからポイントを駆動させる
今回はTOMIXのポイントを駆動する方法を考えたいと思います。TOMIXのポイントは端子が2つしか無く、電気を流す向きによってポイントの方向が切り替わります。さらに、電気を流すのは切り替える瞬間の数ミリ秒だけです。
市販のポイントボックスではこの作業を箱の中で機械的に行っていますが、マイコンで制御するには半導体でこの作業をする必要があります。
ということで、まずはどれ位の電圧電流がいるかを調べます。ポイントボックスではパワーパックの電源なので約12Vを流してるものと考えられます。という事でDCCのレール電流を整流したものの電圧を測ると13Vちょいだったので、直接ポイントにつないでみました(もちろん瞬間だけです)。と、ちゃんとポイントが切り替わりました。ちなみに5Vでは無理です。ということで、この電源を半導体でON.OFFする事にします。
最初はトランジスタでやろうと思ったのですが、必要な電流がなかなか出ず駆動できませんでした。
そこで写真のような、前に製作してあったMOSFETによるHブリッジ回路を利用しました。これはマイコンからモーターを駆動するために作ったものです。
(この基板にモーター2つ分入っています)
まず制御端子を手動でON、OFFしてみるとうまくポイントも切り替わったのでマイコンに接続し、動作確認をするとマイコンからポイントの駆動ができました。
以前にこれでモーターを回したことがあるので当然ですが。
2.アクセサリデコーダへの命令を取得する
一バイト目が0x80から0xBFではじまるパケットがアクセサリデコーダです。
以下の情報は試行錯誤の末自分が納得した結果です。正しくない可能性もあります。
パケットの説明をみると、最後のエラー訂正バイトを除き、2バイトで構成されており、
10AAAAAA 1AAACDDD
Aはアドレスビット(正2バイト目の情報が上位ビット)、Cはコントロールビット、Dはデータ
このような構成になっています。
そこで、ポイント1を操作してパケットを見てみるとThrownで、0x81 0xf8。Closedで、0x81 0xf9。が受信されました。
データを並び替えると、二進数で アドレスが111000001 コントロールが1 データが000(Thrown),001(Closed)。
ポイント2の場合、
アドレスが111000001 コントロールが1 データが010(Thrown),011(Closed)。
ポイント3の場合、
アドレスが111000001 コントロールが1 データが100(Thrown),101(Closed)。
ポイント4の場合、
アドレスが111000001 コントロールが1 データが110(Thrown),111(Closed)。
ポイント5の場合、
アドレスが111000010 コントロールが1 データが000(Thrown),001(Closed)。
ポイント6の場合、
アドレスが111000010 コントロールが1 データが010(Thrown),011(Closed)。
どうやら、ポイント番号4つごとにアドレスが一個振り当てられているようで、データ部の3ビットで各ポイントの方向を指示するようです。
それと、
ポイント番号252の場合が、
アドレスが111111111 コントロールが1 データが110(Thrown),111(Closed)。
ポイント番号253の場合が、
アドレスが110000000 コントロールが1 データが000(Thrown),001(Closed)。
である事を考えると、アドレスの上位3バイトはビット反転していると思われます。
ちなみに、パソコンでJMRIからポイントを切り替えるとコントロールビットが1のパケットのすぐ後にコントロールビットが0のパケットが出力されます。
これでパケットからポイント番号と方向の情報がわかりました。
3.コマンドとポイント駆動を接続
以上の結果を踏まえてポイント駆動実験回路を組みました。
本当はトランジスタ回路をいろいろ試したり、ポイント番号がわかるまで試行錯誤したのですが、書く方が大変なのでそこは説明しません。
これでうまく動作させることができました。
最終的にAVRのEEPROMにデコーダアドレスを保存したり、ボタンを押した後のポイント操作でアドレス変更機能をつけたりしてみました。
最後に動作実験のビデオを載せておきます。