28.Loconetを利用したポイントスイッチの作成

  

Ver2.00として一部不具合の修正版を公開しました。詳しくは下記ソース記載部分参照

はじめに

   複数のボードが集まる運転会では、Rail&CoのTrainControler5.8を使用してポイントを
   切り替えていましたが、あるとき突然エラーになって起動できなくなってしました。
   バージョンアップで対応しようかとも悩んだのですが、PCの扱いも大変なので、路線配線図を
   印刷してポイントの番号が判るように工夫したりしましたが、やはり、簡単に切り替えたいと
   思い、スイッチでコントロールできないか考えていました。
   当初は、デコーダとマシンの間に回路を設け、リモートコントロールできないかも考えましたが
   DCC(デジタル・コマンド・コントロール)館というサイトに、スイッチの操作をLoconet経由で
   切り替える作例があったのでこの方法でできないか考えてみました。
   このサイトでの記事はAVRマイコンでの作成でしたので、PICマイコンを始めたばかりの私で
   は、参考することもできず、結果的に、PICマイコンで1から作ることにしました。


   その前に、Loconetってどうなってるか、コマンドってどうなっているか、そこから調べることが
   必要になりました。
   そこで大変参考になったのが「桂庵へようこそ」のサイトにあるLoconet規格の
   翻訳版です。(大変参考になります。桂庵さんに感謝です m(_ _)m )

   理論は判ったもののどうやって実際のコマンドを確認するのかという壁にもぶち当たりました。
   Loconetは16600bpsとシリアル通信の設定にないボーレートなので簡単にパソコンでは読み
   取れないことも判明。私のPCでは、PCMCIAのカードスロットにRS-232C用のカードを入れて
   MS-100経由で接続していましたが、これでは上手くボーレートの設定ができませんでした。
   そこで、FT232を使用したUSB・RS232C変換モジュールを使用すれば使用できそうなことが
   判ったので早速購入して試してみたところ、結果OKでLoconetのコマンドを傍受できました。

   コマンドのモニターは、フリーのシリアルデバッグツールを使用しました。
    
    
    通信速度を16600bpsに設定できました。(見にくいですが画面右下に表示されています)
  

プログラムの開発

  PICマイコンは、ポートの数から、PIC12F873Aを使用します。
  秋月電子で400円ぐらいとチョット高価です。 
  開発ツールは、MicroChip社のMPLAB IDE v8.36です。
 
 プログラム仕様
  ピンアサイン
    Loconet通信をするため、PICに搭載されているUSARTモードを使用します。
    ボーレートの設定については、PIC12F873Aのデータシートに計算式があります。
 
   ・ポートA〜Cまで3つあり、Cポートは主に通信用 Bポートを設定スイッチの入力ポート
    としました。
    ポートBは8バイト(8個)の入力が可能であるが、順番になるもののポイント番号を
    割り当て可能とします。

    RB0〜RB7 スイッチ入力8本(PullUP)
    RC7 RX(受信)(Loconet上の送信有無確認)
    RC6 TX(送信)
    RC5 (未使用)
    RC4 BUSY信号(LED) (LOCONETにデータ有 もしくは 送信待機中)ほとんど点灯しません。
       セットアップモードではEEPROM書き込み後にLED点滅
    RC3 セットアップモード用入力 1のときオフセットアドレスをEEPROMに書き込み  

  動作
   ・ポートBの8本のポートにスイッチを付け、そのOn-OffでLoconetのスイッチコマンドを出力します。

   初回起動時
    1.EEPROMの書き込み
      DIPスイッチを用いスイッチを全てOFF(ポートはPullupしているので全てHigh)にして
      RC3(14番ピン)をHighにして電源投入します。
      プログラムをセットアップモードにしてEEPROMのアドレス00hに値00hが書き込みます。
      書き込み終了時はLEDを点滅させ終了したことをわかるようにします。
    2.起動
      RC3(14番ピン)をLowにして電源投入すれば、ポートBのRB0からスイッチ0(ポイント番号1)
      になり、スイッチ7(ポイント番号8)まで対応し、切り替えによってコマンドを出力します。
    3.スイッチ8以上に対応するの場合
      セットアップモードでアドレスのオフセット(加算値)をあらかじめ登録できます。
     
      例:スイッチ49(ポイント番号50)の場合は、49を設定します。16進で31Hになるので
        ビットにすると00110001になり、上位ビットがRB7なので ビット1の部分をスイッチ
        ON(ポートはLOW)にしてRC3(14番ピン)をHighにして電源投入すると31HがEEPROM
        に書き込まれます。
        RB0のスイッチはスイッチ49(ポイント番号50)になります。

    Loconetポイント切り替えコマンドは以下の通りでこのコマンドを出力する
      B0 02 10 5D
      B0 02 30 7D
        ↑ ↑ ↑
        │ │ チェック用(コマンドを全てXORするとFFになるための値)
        │ 10がt 30がc
        ポイント番号-1(02の場合ポイント番号03)

 プログラムソース      pointsw110.asm
 ビルドしたHEXファイル  pointsw110.hex

 2015/01/20 
  以下の不具合を修正して Ver2.00としました

   1.ポイント番号が128までしか設定できなかった問題の対応
      V110までは、ポイント番号が128まであったのをポイント番号256まで対応
      ディップスイッチの関係上 設定は0〜248 (00H〜F8H)までとなります
   2.EEPROM読み出しで正しく読み取りができない問題の対応(バグ対応)
      オフセットのアドレスを登録しても、EEPROMから正しく読み込まれない場合があるバグの対応
   3.スイッチによってはチャタリングで複数回コマンドを連投してしまう問題の対応


 プログラムソース      pointsw200.asm
 ビルドしたHEXファイル  pointsw200.hex


回路を作成

回路図
    回路図はこちら (pdfファイルです)
部品リスト

名称 品名 数量
PIC PIC16F873A 1
3端子レギュレータ 7805 1
トランジスタ 2SC1815 2
ダイオード 1N4148 1
LED 適宜 1
抵抗アレイ 10kΩX8(コモンタイプ9ピン) 1
抵抗 1/8w 100Ω 1
680Ω 3
4.7kΩ 2
10kΩ 2
47kΩ 1
セラロック 20MHz 1
積層セラミックコンデンサー 0.1μF 2
電解コンデンサー 100μF 25V 1
100μF 10V 1
10μF 16V 1
モジュラーコネクタ6極6芯 サンハヤトCK-17 1
ICソケット 28ピン 1
ショートピン 2連 1
DIPスイッチ 8連 1
コネクタ 10連 1
スイッチ ON/OFFできるもの MAX 8
ケース 適宜

2015/08/01 ダイオードの型番が間違っていましたので訂正しました。誤:1S2069→ 正:1N4148

   Loconetポート
     電話用の6極6芯用のコネクタを使用します。このコネクタのピッチは2.54mm間隔でないので
     プリント基板で作成するか、アダプタの基板が必要です。今回の作例ではサンハヤトのコネクタ
     付き変換基板を使用しました。
     

  ブレッドボードとポイントデコーダの作成で回路自身の動作は実証できたので回路に従って
  PCBEでプリントパターンを作成して感光基板で回路基板を作成しました。
  大量に作成しないので、穴あき基板でもよかったかもしれません。
  この回路のプリントパターン (PCBEで作成) pointsw_master.pcb 

  部品の実装

   
     プリントパターン(ハンダ面)
     
      部品実装面  

      
      作成した基板
      手持ちの部品の都合で680Ωの抵抗だけ1/4Wなので結果的に立てて配置することに
      (注意:写真のトランジスタの向きは間違っていますので注意してください)

      
      タカチのケース(LC135HN)に入れてみました(写真は加工中)
      基板取り付け穴があるのでこの寸法に合わせて設計すれば良かったと後悔。
      プリント基板データ使う方は、適宜変更して使ってください。
      特にコネクタを使うので、抜き差しをする場合に基板がキチンと固定されていたほうが
      良いです。
      こういう場合はタカチから取り付けボスがあるのでそれを利用すると良いでしょう。
      ASR型貼り付けボスが使えます。

      上の蓋にスイッチが来るので部品の高さには注意が必要です。

  【参考】スイッチコネクタの配線例
    
     コネクタは+5Vを加えていますが、2回路2接点とスイッチを用いるとスイッチ切り替え時に
     LEDを点灯させることができます。
     実際のポイントの動きに連動しませんがスイッチ側で開通方向を表示するなどの応用がで
     きます。

   パネル部分の作成

     
     PCで操作パネル部分を作成しました。
     電器量販店でプリンタで作成できるステッカー用の用紙がありましたので使ってみることに
     しました。ペイントブラシで画を作成し印刷しました。 スイッチの穴は、5mmのポンチで穴をあけ
     現物あわせでケースにスイッチの穴を開けました。
    
     現物あわせでスイッチ用に5mmの穴をあけました。 
     スイッチの端子が基板の部品に当らないように注意してください。
     作成方法によっては、電池ケース付き(9V 006P用)を利用しても便利かも・・・

     
     パネルシートを貼り付け、スイッチを取り付けました。

   

 セットアップ方法
   言葉で判りにくいので写真つきでセットアップモードの使い方を解説します。

   ここではポイント番号51(スイッチ番号50)から開始するようにします。

   まず基板上のPICの14番ピン付近にあるジャンパーピンをショートピンでショートします。
   続いて、DIPスイッチに開始するスイッチ番号をビットにしてDIPスイッチを指定します。
   ここでポイント番号51(スイッチ番号50)から開始させたいので、DIPSWに開始番号を
   セットします。
   スイッチ番号50は、16進数にすると32hになります。
   これをビットに表現すると 00110010にりますので、ビットが1の場合はDIPSWをOn方向にし、
   電源を投入します。
   
   電源投入後、EEPROMへ開始番号の書き込みが終わったらLEDが点滅します。
   点滅したら完了なので、ショートピンを抜いて、電源を切り、DIPSWを全てOFF側にして
   電源を再投入してください。
   以降はDIPSWの1番がスイッチ番号50で 8番がスイッチ番号57になります。

   


  実際にKATO D101と繋いで動作テスト
    
  D101とLoconet経由で接続し、ポイントマシンが動作をしてくれたので一安心です。
  コマンドもちゃんと出ています。(上図赤枠内のコマンド)

  ソースにもコメントとして記載しておりますが、データ衝突時の送信待ちならびに再送
  処理は省略しております。
  DCCの運転会にて6時間ほどLoconetに接続して使用しましたが、パケット(コマンド)の衝突に
  よる問題は確認されていません。
   ただ、Loconet上にデータの多い環境で動作確認していないのでしばらく経過観察です。
  個人・少人数での運転会であれば使用可能と思います。

例:スイッチにLEDを併用した場合の作例です。(2011/12/25追加)
  LEDはスイッチに連動し、実際のポイント位置を示すものでありませんが
  こうやって光るのもかっこいいですよ。
   

製作にあたり以下のサイトを参考にしております。
 この場を借りてお礼申し上げます。

   DCC(デジタル・コマンド・コントロール)館 
    ポイントの省配線システム(ポイント制御パネル)LocoPointを作るも参照ください
    今回のポイントスイッチ作成にあたり参考にさせていただきました。ありがとうございます。

   桂庵へようこそ
     のサイトにあるLoconet規格の翻訳版は大変参考になります。

ご注意:製作・改造に関し、万一損害が生じても当方では責任を持ちませんのでご自身の責任の範囲でお願いします。


Copyright (c) 名古屋電鉄 http://nagoden.la.coocan.jp/