RailuinoのS88信号を送受信する処理が、数百ms以上かかっていて、仕方なくArduino2台体制にした件なのですが、少々勘違いしておりました。
S88のパルス生成ルーチンをきちんと確認したところ、初期化パルスで0.3ms、デコーダ1台につき1.6msかかっている事が分かりました。
これを10台等とすると、16.3ms程度となります。この時間は一切処理を受け付けない時間となるので、どちらにしろ、複数台を繋ごうとすると制約が生じてきます。
上記の仕様を踏まえて、以下の対応を行う事としました。
・Desktop StationからArduinoへの通信は8ms周期とする(1回送ったら、次に送るのは10ms経過後)
・Arduino 1台でS88デコーダを使用する場合は、接続台数を2台に制限する(想定占有時間4ms、8ms周期の半分で安全時間を確保する)。
・3台以上デコーダを繋げたい場合は、もう一台Arduinoを別に用意して接続する(Serial_S88.inoを使用する)
この施策を実施する事で、1台のArduinoでもS88機能を実現できると踏んでおりましたが、Arduino側がフリーズしてしまう問題に直面しております。どうも、S88のリフレッシュとシリアル通信で何らかの問題が生じているような状況です。50ms周期くらいで信号を送っても、S88リフレッシュは完了しているはずにも関わらずフリーズしてしまいます。
フリーズ原因が判明すれば、1台のArduinoで動くはずなのですが。とりあえず、原因調査を続けて行きます。
2013年08月24日
S88デコーダの入力インターフェースの簡略化
posted by yaasan at 13:31
| Comment(0)
| 鉄道模型
この記事へのコメント
コメントを書く