36.車輌アドレス番号表示機の作成

はじめに

   メンバーが多数集まるDCCの運転会では、時に同じ形式の車輌が走行する
   ことがあります。
   DCCでは、各車輌(動力車)単位にデコーダを搭載し、その車輌ごとにアドレス
   (番号)を付与していますが、時に、あの駅の3番ホームに止まっている車輌は
   誰の?何番?なんてことが発生してしています。そこで、7セグLEDを用いた車
   輌アドレス番号表示機を作ってまみました。作例では4線の終端駅での使用例
   としています。

   尚、この製作に当たっては、車輌検出のために、別途Digitrax社のBDL168とRX4
   が必要となり、これがないと機能しません。
   まずは、このBDL168とRX4を使用したTransponding機能から説明します。 
 

1.BDL168トランスポンディング機能

  BDL168は車輌を電気的に検出するためのユニットであり、最大16個のセクション
  を検出できます。
  下記にあるように、DS1〜DS16がセクションで、電気的に検出できる区間です。
  これらセクションを4つ単位でまとめているのがゾーンになります。
  ZoneAはDS1〜DS4までを管理しており、ZoneBはDS5〜DS8を管理します。
  
  Transponding機能は、RX1という検出器で電線の中を流れる信号からアドレス
  番号を検出するもので、4つが1セットになったRX4をBDL168に接続して使
  用します。

  写真は、アルミケースにBDL168とRX4を実装したものです。
  

  電気的な配線の例を以下に示しますが、ここで最も注意しないといけないのが
  RX4の穴に通すリード線の通し方です。(私はこの通し方を逆にしていたため
  うまく検出されず気づくまでに時間がかかりました)

  
2.表示の仕組み

  車輌は、Digitrax社のTranspoing対応のデコーダであることが必要で、デコーダの
  CV値を(CV61を2に)設定する必要があります。
   
  上記の配線例で、区切られたギャップ区間上に車輌が入り、アドレスを検出すると
  BDL168は、Loconet上に検出したことを示すコマンドが流れます。
  このコマンドを利用して、今回作成した車輌アドレス番号表示機で表示させます。

3.仕様
  1.表示方法
     7セグメントLEDを使用してダイナミック点灯方式とします。
     アドレスを表示する4桁の7セグLEDと複数使用した場合の識別が可能なよ
     うに個別識別(番線)番号を表示するように、1桁の7セグLEDを使用します。

  2.仕様PIC
     I/Oのピン数、USART機能からすでに使用しているPIC16F873Aとします。

  3.Loconetとの通信
    USARTモードを使用し、Loconetとは受信のみとします。
    将来の拡張性を考え、送信はユニット間での送受信ができるように考慮します。
    USARTは以下の設定とします。
       Mode : Asyncronous transfer mode only
       Speed: 16K bps(12h 20Mhz)
       Bit : startx1 datax8 stopx1
       ※Loconetはボーレート16600bpsと特殊です。ここでは設定値から16447bps
        にしています。

  4.PIC16F873A ピンアサイン
      RB0〜RB6   7セグLED a〜g
      RC0 7セグLED 1ブロック目 コモン制御
      RC1 7セグLED 4連左1ブロック目 コモン制御 
      RC2 7セグLED 4連左2ブロック目 コモン制御
      RC3 7セグLED 4連左3ブロック目 コモン制御
      RC4 7セグLED 4連左4ブロック目 コモン制御
      RC5  状態表示用 LED
      RC6 TX(送信)(未使用)
      RC7 RX(受信)

  5.対象(ターゲット)の設定機能
    複数のBDL168から送られるコマンドから、目的のボードおよびゾーン、セクショ
    ンにより正しくコマンドが受信できるように、ターゲットとなるBDL168のアドレス、
    ゾーン、セクションをEEPROMに保持します。
    これらは、セットアップモードで変更可能とし、スロットルのスイッチで設定可能
    とします。

    5-1.BDL168ボードアドレス
      どのBDL168からのコマンドを受け取るかの指定ができます。アドレスは
      1〜255の範囲で指定します。 0を指定した場合はボードアドレスは無視
      してコマンドを受信します。

    5-2.Zone番号
       BDL168のどのゾーンからのコマンドを受け取るかの指定ができます。
       Zone番号は A=01 B=03 C=05 D=07 E=09 F=11 G=13 H=15と指定します。
       (BDL168からのコマンドは上記値を-1した値であるが、0を設定値として
        使いたいため+1していします)
       00を指定した場合はZoneを無視してコマンドを受信します。

    5-3.Section番号
       BDL168のどのセクションがON/OFFしたかのコマンドでどのセクションoff
       で表示解除をするかを指定します。 
       基本、Transpondingでアドレスを検知しているセクションを指定します。
       BDL168で車輌が離線してOFFのコマンドを遅延して送信することが出来、
       BDL168のOpSwの37をC(Slow Detection Section OFF timing)に設定する
       と約5秒遅延してコマンドを受け取ることができます。
        Section番号は1〜16を指定します。

    5-4.番線番号
       7セグLED4桁以外に1桁設け、番線番号やユニット識別のための識別
       文字を表示させます。
       表示できるのは、プログラム内にあるテーブル定義した48文字となり、
       0〜47で指定します。

  6.コマンド受信と動作
    ギャップで区切られた区間で車輌を検出した場合、BDL168は、Transponding
    のコマンドとセクションOn/Offのコマンドを送出します。このコマンドを受信して、
    表示機が表示したいBDL168のアドレス、ゾーンの信号を7セグLEDに表示さ
    せます。
    コマンドは、下記7に記載していますが、n=1 Absent(検出) n=0 Present(未検
    出)で表示On/Offをさせようかと試みましたが、テストした状況ではAbsent(検出)
    を含んだコマンドの直後に Present(未検出)のコマンドが出たりして安定しな
    い為、Absent(検出) のコマンドのみを表示用の受信とし、区間から車輌が離
    れた場合、SectionOn/Offの Off側のコマンドで表示解除することとします。

  7.BDL168のコマンド

   7-1.LoconetのBDL168からくるTransPondingのコマンド
      先頭が0xD0で始まる6バイトのコマンド
      D0 aa bb cc dd ee
        aa  = 0 0 n A7 A6 A5 A4 A3
        bb  = 0 A2 A1 A0 Z3 Z2 Z1 Z0
             n=1 Absent(検出) n=0 Present(未検出)
             A7〜A0 BDL168のアドレス
             Z3〜Z0 ゾーン番号
        cc  = 下位7ビットが車輌アドレスの上位アドレス
            (2桁アドレスの場合は0x7D)
        dd  = 下位7ビットが車輌アドレスの下位アドレス
            上位アドレス+下位アドレスの並びでビットから10進数に変換する
            と車輌アドレスになる
             2桁アドレスの場合は 下位アドレスのみ10進数に変換
        ee  = check SUM

   7-2.LoconetのBDL168からくるSection On/Off のコマンド
      先頭が0xB2で始まる4バイトのコマンド    
      B2 aa bb cc
       aa  = 0 A7 A6 A5  A4 S3 S2 S1
        bb  = 0 n S0 L A3 A2 A1 A0
            n=1 常時1
            L=1 検出  L=0 未検出
            A7〜A0 BDL168のアドレス
            S3〜S0 セクション番号(0~
       cc =  check SUM;

4.プログラムの開発

   開発ツールは、MicroChip社のMPLAB IDE v8.92です。
 
   ASMファイル  addrdisp01.asm   2015/04/19 Ver1.10
   HEXファイル  addrdisp01.HEX  2015/04/19 Ver1.10

5.回路図

    回路図はこちら (pdfファイルです)

6.部品リスト

名称  回路表記 品名 数量
PIC  Q1 PIC16F873A 1
トランジスタアレイ  Q2 TD62083AFNG 1
ダイオード  D1 1N4148 1
定電流ダイオード18mA   R8-R14 E-183  7
青色7セグLED カソードコモン   OSL10561-LB 1
青色7セグLED4桁 カソードコモン   OSL40562-LB  1
抵抗 1/6w  R15-R17 10kΩ 3
 R1 47kΩ 1
 R18 1kΩ  1
 R7 200Ω 1
セラロック  X1 20MHz 1
積層セラミックコンデンサー  C1 0.1μF 1
電解コンデンサー   C3  10μF 16V 1
 C2 22μF 16V  1
ICソケット   28ピン 1
6極6芯モジュラージャック  J3 7002-6P6C  1
ピンヘッダ 2x5(10P) CN1 CN2 5連 2
連結ピンソケット 2x5(10P) CN1 CN2  5連 4
1連 ピンヘッダ         2P J4 J5      2
1連 ピンヘッダ         4P J1 J2    2
1連 ピンヘッダ         6P ICSP   1

 入手しやすいパーツにしています。(秋月電子でほとんど購入可能です)
 ・Q2のTD62083AFNGは表面実装用のSSOP−18ピンタイプです。 
  ご自身で作成される場合、TD62083AFG(標準SOP−18ピン)
  もしくはDIPサイズのTD62083APG(DIP)でも可能です。
 ・R8-R14は当初抵抗を想定していましたが、LEDの色によっては抵抗値に
  違いが出てしまうので定電流ダイオードにしています。  
 ・C3の電解コンデンサーは、容量を大きくすると、PICKitとの接続による
  ICSPの機能が効かなくなります。10μF以下を使用してください。

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

7.プリント基板と実装

   PCBEでプリントパターンを作成して 海外のPCBCARTに発注しました。
   7セグLEDの実装面積を小さくするために、基板を2段の構成にしました。
   電源は、外部から5Vの安定化電源の供給を受けることとし、実装していません。
   電源ピンは、J1,J2ピン共通で 一番右から 5V,GND、RX(LOCONET)、TX(J2のみ)の順になっています。
   
   表面
   
   裏面
   

   実際に基盤に実装した様子
   
   4台接続の例:J1−J2間で接続可能(ロコネットのケーブルは1本のみに接続)
   


   7セグメントLEDの表示

   車輌が区間に存在しないとき(もしくは検出できない時)
   

   車輌が区間に存在し2桁アドレスの場合
   

   車輌が区間に存在し4桁アドレスの場合
         

実際の動き
     
     実際の動画(MP4 6MB)


8.セットアップモード

  セットアップモードを使って、BDL168のボードアドレス、表示させたいZone番号、表示OFFに
  するためのセクション番号、この表示機の個別識別(番線)番号を登録します。

  回路図にあるJ3のジャンパをショートピンでショートさせ電源を投入させると、セットアップモードに
  なります。
  コントローラとスロットルと本機を接続し、それ以外のものは接続せずに設定を行ってください。


   セットアップモードでの電源投入後の表示
   

   このあと、スロットルのSwitch操作(ポイントを切り替える操作と同じ)でSW=001〜004を使い
   設定項目を選択してt,cボタンで設定値を変更します。


   SW=001を選択した時(ボードアドレスの設定)
   
   Aはアドレスという意味でBDL168のボードのアドレスを1〜255の範囲で選択します。
   000を指定するとボードアドレスはチェックせずにコマンドを受け取ります。
   tを押すと+1 cを押すと−1でカウントします。

   SW=002を選択(ゾーン番号の設定)
   
   2とあるのはZoneという意味で、Transpoindingのコマンドで返される検出時のゾーンを選択します。
   00を指定するとZoneのチェックはせずに受信します。
   Zoneは、tを押すと 00->01(ZoneA)->03(ZoneB)->05(ZoneC->07(ZoneD)->
   09(ZoneE)->11(ZoneF)->13(ZoneG)->15(ZoneH)->00->01(ZoneA) の順に、cを押すとその逆で
   数値が変わります。 

   SW=003を選択(セクション番号の設定)
   
   5とあるのはSectionという意味で、
   セクションから車輌が離れてその区間が在線OFFになったことを受け取るための
   セクション番号です。tを押すと+1 cを押すと−1でカウントし0〜16の間で指定します。
   00を指定するとSectionのチェックはせずに受信します。

   SW=004を選択(番線番号(表示機識別番号)の設定)
   
   nとあるのは、番線番号という意味で、プログラムに登録してある48文字から選択可能です。
   tを押すと+1 cを押すと−1でカウントし、下4桁目のところに該当する番号の文字を表示します。
   0〜47の間で指定します。

   SW=005を選択(EEPROMへの登録)
   
   設定した内容をEEPROMに書き込みます。
   tを押すと登録されて表示は以下のように表示されます。
   

   SW=006を選択(セットアップモード終了)
   
   セットアップモードを終了します。
   tを押すと表示は以下のように表示されSwitchコマンドでの操作はできなくなります。
   ショートピンを抜いて再起動します。
   

   SW=007以降を選択しても表示は変わりません
 

   セットアップモードで SW=004を選択時の表示文字テーブル
  


  ご注意: ・ 掲載にあたっては、実際にテストを実施して動作を確認していますが、
        機器の状況や環境によってBDL168から誤ったアドレスが送信され
        その値をそのまま表示する場合があります。
       ・DB150 DB200等のブースターでは、BDL168がコマンドを発しないため
        正しく動作しません。 
        DCS100,DCS50Kなどをコマンドステーションとしてお使いください
       ・このサイトに記載してある内容・製作・改造に関し、万一損害が生じても
        当方では責任を持ちませんのでご自身の責任の範囲でお願いします。

       ・サイト内のコンテンツの転載・商用利用は固くお断りいたします。


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