SSブログ

F28まであるコントローラ DCC出力OnOffボタン追加とRailComDisplay対応 [DCCコントローラ]

 今週も緊急事態宣言のため、土日はほぼ家に引きこもっていますが、元々冬は寒くて苦手なので、外にはあまり出ません。夕方、スーパーへの買い物のために家の近くの国道を通ったら、江ノ島からの車が渋滞していました。まあ、関東の感染者も下り坂ですし、車なら他の人と隔離されているからいいんですよね。きっと。
 で、F28まであるコントローラの件ですが、DCCの出力をOnOffしたいという話があったのでやりました。ソースはWikiから該当するGitHubで落とせます。最初、出力のOnOffだけしようと思ったのですが、それだけやると、Off→Onで、コントローラ側は以前のファンクションの状態を覚えていて、デコーダ側は忘れているという残念な事態になるため、コントローラ側もファンクション状態を忘れる、という形に変更したのですが、これが大変でした。(CheapControllerだけあって、初期化を含めて、かなり適当にやっているので)。
で、最初Offの状態で、
re_DSC03424.jpg

F31ボタンを押すとDCC線路出力が出るようになります。
re_DSC03427.jpg
 
 あとは、もう一つ、DesuktopStationさんから、RailComDisplayを相性調査用に分けていただいたので、相性調査は今からちゃんとやる予定ですが、その前に、このF28まであるコントローラにつなげられるかを確認してみました。
 NMRAの該当部分を見てみると、パケット送り終わったら、左右の線路の電位を0にして、500us程度待てばその間にデコーダからシリアルでデータが送信されてくるようにみえたので、何も考えずにパケット送信後に500usぐらい、モータードライバをブレーキ状態にしてみたのですが、EsuのLoksound5とRailComDisplayのセットは全然アドレスを返してくれません。
 わからんと思って、DSair2の該当ソース部分をこっそり眺めて、理解しました。電位を0にする前後にHigh状態とLow状態を作らないといけないようですね。

//DSair2該当ソース部分(DScoreM_DCC.cpp)
---------------
//29us High
DS_WriteBit(0);
delayMicroseconds(TIME_DCC_BIDI_CUTOUTSTART);

//454us BREAK MODE of TB664X
DS_OutputBrake();
//DS_OutputOff();
delayMicroseconds(TIME_DCC_BIDI_ENDCUTOUTTIME);

//End of Cutout
DS_WriteBit(1);
delayMicroseconds(20);//10us
-------------

ということで、同じにしてしまいます・・・。
私のソースだと、作りが適当なので、ほぼ直書きしてしまっていて

fujigaya2_dcc.cppの
-------------
//Railcom cutout
PORTD |= _BV(PD7);
PORTC &= ~_BV(PC6);
delayMicroseconds(bit_cutoff_start_us);
bit_off();
delayMicroseconds(bit_cutoff_width_us);
PORTD &= ~_BV(PD7);
PORTC |= _BV(PC6);
delayMicroseconds(bit_cutoff_end_us);
-------------
になります。bit_off()がブレーキ部分になります。
RailComDisplayでLocoAddressを返してくれました。よかったよかった。re_DSC03423.jpg

と思ったのもつかの間、これってCheapContoroller的に何に使うんだろう?
という疑問も一緒に出てしまいました。が、まあ、その時思いついたことをするのが趣味だと思うので、深く考えないようにしましょう。


コメント(0) 

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。