2015年10月30日

CV読み出し方法

CVの読み出し方法について、今まで完全に勘違いしていたことに気づきました。

CVの読み出しには、Railcomのような特殊な機能があるのだろうと思い込んでいたのですが、実はCVのVERIFY機能を使うことで、1bitずつCV値ごとに電流応答を見ることで読み出しができるということを知りました。

非常に恥ずかしい限りです。申し訳ありません。
ただし、電流センサはDSmainR5から搭載を始めるので、CV読み出し機能は入るとしてもDsmainR5のみとなります。

スマイルデコーダで使っているNMRADCCライブラリも、上記の方法は対応していることはソースコードを確認できたましたので、CV読み出しもたぶんできると思われるので、実際にDSmainR5で機能を実装して確認を進めていきたいと思います。

■CV読み出しの方法

(1) SERVICE MODEのDIRECT MODEの手順を使う
(2) CV MANIPULATION MODEをBit Verifyに指定する
(3) データを0にして、1ビットずつシフトしながら合計8回、Verifyを行う。
→Verify信号を送ったらすぐに電流センサを監視して、60mAを超えたかどうかをチェックする。複数回見て、カウントを行ってある一定回数以上、60mAを超える条件があったら、ビットに1を立てる。
(4) データを1にして、1ビットずつシフトしながら合計8回、Verifyを行う。
→(3)と同じ電流検出処理をする
(5) 得られた16bitの値で、(3)で得られた方のデータを反転する
(6) (4)のデータと(3)の反転データが一致しているか確認する
(7) 一致していれば、CV値はその値で決定。一致していなければエラーとする

Verifyモードは、ビットが立っている場合(立っていない場合)、デコーダが、一瞬電流を流すので、それを電流センサで検出して、ビットの立ち具合を8回記録すると、8ビットのデータが生成できることになります。

ビットが立っている場合と、ビットが立っていない場合の合計16回やれば、一応、データの照合もできるということになります。

CVの実装をするときにVERIFYなんてどうやって使うんだろう、と考えていましたが、まさか読み出しに使うとは思いもしませんでした。いやはや、思い込みは良くありません・・・。

■追記(10/31)

RocoとPIKOの機関車を複数試して、問題なく読み出せました。10回やって10回成功。データの照合機能を入れているので、エラーの場合は、きちんと失敗という結果にはなるので2回目をやれば、読み出せます。

CVReader_DSmainR5.png

CV読み込みのコツも分かりました。モータに電流を流した状況を見て判断するので、デコーダでCV acknowledge用のパラメータをちゃんと調整しないと、うまくモータに電流を流せないので失敗するという事が分かりました。電流を流しすぎると動いてしまって逆にうまく読み取れない。

DSmainR5では、電流センサの精度をあまり細かくしてないので(最大20Aも取れるようにしてるので・・・)、50mA弱が流れると検出、というようにしました。限界ギリギリはよろしくないので、なるべくデコーダの DCC ackは100mA以上は流して欲しいです。

BrawaとESUのデコーダは、かなり苦労しましたがなんとか読み出せるようになりました。電圧が12Vだと電流があんまり流れないので検出失敗率が上がるので、15V以上の大きめの電圧にしておくのが良さそうです。欧州系なので、高めの電圧の設定なのかと思われます。なお、Brawaについてはメルクリン向けのシリーズで試しているので、もしかすると18Vくらいにしておかないといけないのかもしれない。

ということで、CV読みコマンドを実装して思ったのが、「CV読めると超便利!」ということです。今まで電流センサをケチって入れていなかったのはコストのためですが、ミドル〜プレミアムクラスにはCV読み出しは必須だということがよく分かりました。

DSmainR5からは価格もかなり上がりますが、出力は大幅アップでディスプレイも情報量が非常に増えますし、ケースもできますので、市販メーカーのものに見劣りしない製品に仕上げられるかと思います。

■さらに追記(10/31 10:40)

スマイルデコーダでも動作確認。ただし、notifyCVAck関数内のAnalogWriteでPWMを出力してDCC Acknowledgeとするが、この値をうまく調整しないと反応しない。100くらいが良さそう(モーターやPWM周波数によるので注意)
Nゲージだともっと小さくても良いかもしれない。
posted by yaasan at 19:10 | Comment(0) | 鉄道模型

2015年10月28日

ATTiny85で超小型DCCデコーダが作れるかも(やらないけど)

ATTiny85を使ってアドレス固定ながらファンクションデコーダを動かすという試みが紹介されていた。確か前に同じようなことを検討だけはしたような気がする。

rudysmodelrailway

見ると、Aliexpressで売ってるDigisparkの互換品(1.37USD)を使って、回路を足して実現しているようである。ATTiny85の表面実装版なら秋月でも売ってるので、スマイルデコーダのDCC入力回路あたりをくっつけて、ファンクションデコーダは実現できそうな感じです。価格は、500円は余裕で切れそうです。

一応、コンパイルが通ったやり方は以下のとおりです。

https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls
にある、ATtinyのURLをArduino IDEのBoard Managerのリスト用のJSONのURLを指定するボックスに入れます。

ArduinoIDE_AddBoardmanager.png

Board ManagerでATTinyをインストールします。

ArduinoIDE_AddBoardmanager2.png

以下のようにボードが選択できるようになります。

ArduinoIDE_SelectATTiny85.png

上記のATTiny85で動くというスケッチをダウンロードして、ライブラリをコピーしてコンパイルをかければそのまま動かせるはずです。DCCデコーダライブラリはMynabayのものを使われているようです。

ちなみに、スマイルデコーダのスケッチで使われている、DCCデコード用のNMRADCCライブラリを使う場合、動作確認はしていませんがソフト的にはATTiny85の8MHz(内蔵RC発振子)でも動きそうな感じではあります。コンパイルも通る、ATTiny85用に直したコードは
こちら(DSDCCDecoder_AT85.ino)

ROM(全部で8KB)とRAM(全部で0.5KB)は半分くらい消費しているので、小規模なソフトは追加できそうです。EEPROMも付いているので、CVも書き込みはできそう。肝心なのは内蔵発振子でどこまで性能が出せるか、でしょうか。

このRudyさんの取り組みは素晴らしいのですが、1点だけ仕方ないのですが重大な欠点があります。ずばり既成品のモジュールを使っているのでどうしてもサイズが無駄に大きくなるところです。

よって、スマイルデコーダの回路をATTiny85用に直してアートワークをすれば面積半分未満のファンクションデコーダを作れそうです。しかし、ぬっきぃさんが既に作っていますし、今更同じものを作る意味もない(Desktop Stationのポリシーにも反する)のと、そもそもスマイルデコーダがありますし、さらにはDSmainR5などを開発している状況下では対応は困難なので、その他の方にお任せしたいなと思います。回路や、スマイルデコーダのアートワークのファイルは、wikiに転がっているので、自由にしてもらって結構です。

そうは言っても言葉だけではよくわからん、となると思うので、以下はサクッと書いた回路図。動くと思うが、確認はできていないのでブレッドボードやDSdecR2のようなジャンパが飛ばしやすいバージョンで試したほうが良さそうだ。

SmileDecoder85_r1.PNG
posted by yaasan at 20:30 | Comment(0) | 鉄道模型

DCC/MM2シールドの小規模改版

DCC/MM2シールドは長らく改版しておりませんでしたが、在庫があと少々になりましたので、改版を予定しております。

DCCMM2_R4D.png

リビジョンはR4Dとなり、部品点数の削減(ダイオードの削除)と、シリアル通信ピンの削除を行います。軽微なコストダウンが主で、機能拡張は特にありません。材料費は下がりますが、もともとかなり価格を下げていたこともあり、価格は変わりません。

技術的には枯れ切った基板ですが、競合品が皆無で、Arduino用にピッタリということもあってかニーズもそれなりにあって、特に国外への出荷が主になってます。DCC/MM2シールドは、貴重な開発費を得るための大事なハードウェアなので、今後も販売は継続してまいります。
posted by yaasan at 19:48 | Comment(0) | 鉄道模型

2015年10月26日

デコーダ動作報告情報

欧州のDSmainユーザーから、デコーダ動作報告がありました。以下は全てDCCモードでの動作になります。(MM2もサポートしているデコーダもありますが、そこは未確認です)

TAMS LD-32-G,TAMS LD-32-W - OK
Uhlenbrock 76320 - OK
・Marklin 60700 - OK
ESU 54610 - OK
posted by yaasan at 07:43 | Comment(0) | 鉄道模型

2015年10月25日

OLEDで悪戦苦闘

中国からDSmainR5用の128x64 0.96インチのOLED(I2C通信タイプ,5V)を輸入したのですが、ノイズになったり、突然写ったりと不安定で非常に困った状況でした。

OLED_mainR5_1.jpg

いろいろ調べると、リセットの処理が中途半端なようで、VCCに100Ωほどを挿入すれば良いということが書いてあります。数10mA程度なら良いですが、どんだけ電流を消費するのかよくわからなかったので、試しに22Ωを挿入したところ問題なく動作しました。

OLED_mainR5_2.jpg

22Ωを付けた状態で電圧差はテスタで測って65mV(max)でした。V=IRの逆算で電流値が出せます。I=V/R=0.065/22=約3mAとなりました。抵抗の発熱量としては、0.003*0.003*22=0.2mWなので、まあ、気にするほどでも無い感じです。意外とOLEDは電流食わないということが分かりました。
posted by yaasan at 16:50 | Comment(0) | ガジェッド