« 【PICマイコン】反射型光センサーをファイントラックに組み込む② | トップページ | 【PICマイコン】DCCアクセサリデコーダーのアドレス »

2018/02/10

【PICマイコン】DCCパケットの表示

Loconetへの接続も完了していないのですが、NMRAのDCCパケットの受信ができるかどうか、規定の解析?に着手しました。一先ず、ビット列からDCCパケットを取り出してLCDにダンプすることが出来たので、忘備録代わりにメモしておきます。


(参考)
NMRA Standards and Recommended Practices
NMRA Digital Command Control (DCC) Library

PICマイコンはPIC16F18313で、ピンの設定は次のとおり。
・RA0:I2C(SDA1)入出力+プルアップ+PPS
・RA1:I2C(SCL1)入出力+プルアップ
・RA2:LCD_nRESET(デジタル出力)(LCDのnリセットに接続)
・RA3:nSWITCH(デジタル入力+プルアップ)(タクトスイッチに接続)
・RA4:T1G(デジタル入力)(DCC信号を入力)



DCC信号のビット列。(S9.2 A. Genereal Packet Format)

1つのビットの波形。(S-9.1 A: Technique for Encoding Bits)

PICマイコンのTimer1ゲート機能を使って、DCC信号の電圧が+15Vの間(上の図のAの間、または車輌の方向によってはBの間)、PIC内部の基準信号をカウントします。

Fosc/4(32MHz/4、16MHz/4、8MHz/4、4MHz/4)を1:8〜1:1に分周すると、1MHz(1周期1uS)が基準信号になります。

カウントが終わるとTimer1G割り込みが発生しますので、カウント結果(Timer1の値)が52〜64ならば”1”、90〜10000ならば”0”、それ以外は無効とします。(Foscの誤差、Timer1ゲートとの同期タイミングは考慮していません。。)

記事のアップ時に気づきましたが、デコーダー側はAの幅とBの幅のづれ(|A-B|)として6uS許容する必要がありますので、結果が46〜70ならば”1”、84〜10006ならば”0”とする必要があります。
(S-9.1 A: Technique for Encoding Bits)

いきなりDCC信号を扱っても、NMRAの規格の解釈とソフトウェアのバグ取りの二重遭難になってしまいますので、先づは擬似的なDCC信号で確認を進めます。



どうでもいいですが、左側が擬似DCC信号発生側です。PCにつないだシリアルUSB変換器から電源を取ります。

ソフトウェアループとdelay関数を使い、連続した”1”を送出させます。タクトスイッチを押した時に、”DCC01”+チェックディジットの擬似DCCメッセージを1つ送出させます。

PICマイコンのTimer1ゲート機能で内部発生できる最も遅い基準信号は、LFINTOSC(31KHz)を1:8に分周した時で、258uSになります。258uSの58倍は約15mS、116倍は約30mSになるので、これを手始めに擬似DCC信号を送出して動作確認を進めました。



EUSART送信で、PCにデバッグ情報を表示して動作確認します。

低速(1: 15mS、0: 30mS)のパケットで上手くビット列の解析処理が出来たところで、送出・受信側ともにスピードを上げていきながら、ソフトウェアの修正をしていきます。具体的には、メインルーチンでのビット列の解析をTMR1G割込みルーチンに移動、デバッグ用のEUSART送信がTMR1G割込み中に使えないので停止、解析後のメッセージをメインルーチンでLCDに表示、擬似パケット発生側のチャタリング対策、などなどです。



最終的に、規定の速度(1: 58uS、0:116uS)の擬似DCC信号で動作を確認します。単純なビット列の解析のみですが、Fosc=4MHzでは処理が間に合わないようです。



手書きですが。。DCC信号は、抵抗(22KΩ+10KΩ)で分圧してT1Gに入力します。これで、DCC信号の電圧の中心付近で1/0が判定されます。(抵抗1本(例えば47KΩ)のみで入力した時は、PIC側の入力ダイオードで電圧がクリッピングされるので、DCC信号の電圧の0V側から2.5V付近で1/0が判定されます。)

実際のDCC信号をつなぐとLCD表示が流れてしまうので、アドレス”03”向けのパケットのみを表示させます。



DCC信号を入力して確認します。スロットルと方向転換で表示が変わります。

実際の運転環境でも正常に動作するかどうか、さらに確認が必要です。

続く。。

« 【PICマイコン】反射型光センサーをファイントラックに組み込む② | トップページ | 【PICマイコン】DCCアクセサリデコーダーのアドレス »