SSブログ

ワンコインデコーダ3の製作 [ワンコインデコーダ3]

 ぬっきぃ様のワンコインデコーダ3を頒布いただき、そのうちの両極性Fxデコーダを製作した。
 まず、一つ目の山。
 Picの書き込みに素直にぬっきぃ様のSimplePicKit2を買えばいいのに、Aliの互換品にひかれてクリックしてしまった。(一緒にATMEGA328用のISPプログラマーとArduinoProMini互換品も買った)。で、送料無料(Free Shipping)で普通郵便(SAL?)で12/2に注文して届いたのは12/14。しっかり半月経っていた・・・。
 さて、とりあえず、デコーダのPICだけをはんだ付けしてスマイルコネクタアダプタを介してPickit3(互換品)につけて、書き込み!と思ったら、電圧が足りません系のエラーが出た。USBバスから4.6Vしか出ていないからだめだみたいなことが書いてある。
無題.png
 検索すると、air variable様の記事で、中身の抵抗を変えればいいと書いてある。早速、中を開けてみてわかったことは、記事の写真と違うということ。つまり、互換品なので部品の配置は違うし、まず、部品番号を書いたシルクが無い・・・。PicKit3互換品の改造をするという路線はそうそうにあきらめることにした。
 ということで、検索のほかの結果を見ると、USBハブにつなげとか(ハブ持っていないので却下)別で電源供給しろとかある。ということで、別電源供給にすることにした。
 PicKit3からの5V供給はやめ、スマイルコネクタアダプタの途中のVDDに5V、GNDに0Vをつなぎ、MCLR端子はVDDから適当に6.8Kの抵抗を付けて接続。ACアダプタが12Vしかなかったので、NJM78L05で5Vに下げて、VDDに供給した。以下がその時の写真。
re_DSC00347.jpg
 
 回路図としては、以下の感じなのだが、写真のとおり、いい加減にICソケットにジャンパーピンを挿すというやり方をした。そのうちどうにかしないと。
 pickit3外部電源.PNG

 で、まあ、めでたく書き込みには成功した旨が表示されるようになったので、続けて、ほかの部品をすべて実装した。そして、出来上がり。
re_DSC00348.jpg
 
 次に、2つ目の山。
 DSmainR4に繋いでみたが、うんともすんとも言わない。で、テスターで当たったら、12Vは出ているが、5Vが出ていない。ルーペで見たら、5Vレギュレータ 78L05Fの足が浮いてた。これはSmileDecoderでもやらかした典型的な不良モード。はんだを盛って、解決した。

 DSmainR4で動作確認をしたのだが、方向転換しても、ライトが切り替わらない。方向転換した後、F0(ライト)のOff/Onをすると切り替わる。ぬっきぃ様の利用者相互サポート掲示板でお聞きして、現在そういう仕様で、方向転換とともに切り替えるのは”冬休みの宿題にしたいと思います”とのこと。ありがとうございます。ぬっきぃ様。

 次に3つ目の山。
 ワンコインデコーダ3のLoco番号を変えたいのだが、ワンコインデコーダ3はCV値書き換えのために、現在、PageモードとOPSモードでのアクセスが可能だが、Directモードはサポートしていない。DSmainR4はDirectモードでの書き込みのみ可能である。DesktopStationではOPSモードを実装する予定で、ワンコインデコーダ3もDirectモードの実装検討をしているが容量的に難しいかもとのこと。
 で、私はDesktopStation系しか持っていないので、以前ときどき使っていたcmdrArduinoがOPSモードをサポートしているので、これで書き込めるか確認してみた。(D102買ってないし)。
 結論は書き込めた。書き込みデバイスとして使用したのは、DSdecR1でコマンドステーションとして使用する。Inに12V ACアダプタをつなぎ、Outにワンコインデコーダ3をつなぐ。ヘッドライト、テールライトのパーツはKatoの185系か115系のもの。(どっちか忘れたが豆球のもの)
re_DSC00359.jpg

回路的に使う部分(D9,D10でモータードライバをドライブして、コマンド送信のためSerial通信を使う)がほぼ同じ構成である、デコーダ開発ボードやミント缶コントローラでもたぶん動くと思う。(ただし私は動作確認していない。ミント缶はモータードライバが違うので、もしかしたら怪しいかも)
 スケッチはこちら。CmdrArduinoライブラリをライブラリフォルダへコピーして、登録してからコンパイルする。(登録する必要あったっけ?)。あと、断っておくが、デバッグのためだけに作ったので、汎用性ゼロである。
 スケッチ書き込み後シリアル通信(115200bps設定)で、(命令はすべて半角で[enter]で送信)
1:loco3のcv30に2を書き込む(意味のない命令。ぬっきぃ様の掲示板参照)
2:loco4のcv30に2を書き込む(意味のない命令。ぬっきぃ様の掲示板参照)
3:loco3のcv1に4を書き込む(Locoを3→4に変更)
4:loco4のcv1に3を書き込む(Locoを4→3に変更)
5:loco3のcv8に8を書き込む(つまりloco3のCV値リセット)
6:loco4のcv8に8を書き込む(つまりloco4のCV値リセット)
7:loco4のF0をOff
8:loco4のF0をOn
9:loco3のF0をOff
0:loco3のF0をOn
@:loco4のSpeedを10にする
::loco4のSpeedを-10にする
[:loco3のSpeedを10にする
]:loco3のSpeedを-10にする

例えば、初期値の状態で接続して、シリアルから3を送信すればloco番号が4になる。
本当はちゃんと引数がLoco番号、CV番号、CV値の命令を送って、Arduino側で文章解析して、汎用的なOPSの書き込み命令にすればいいのにとはもちろん思うが、今日は主にCmdrArduinoが動くかを確認したかっただけなので、こうなりました。

コメント(0)  トラックバック(0) 

コメント 0

コメントを書く

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

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

トラックバック 0

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