スレッドの評価:
  • 回答数:0 平均:0
  • 1
  • 2
  • 3
  • 4
  • 5
DSmain R5.1とS88 Analog Throttleとの組み合わせに関して
#1
DSmain R5.1にfujigaya2さんのS88 Analog Throttleをつないで使おうとしていますが、
F0~F4のfunctionが、正しくon/offできません。
運転方向の選択で挙動が異なり、Reverse選択の場合は問題ないのですが、Forward
を選択した時に、F0~F4が正しくon/offできない問題が発生します。

S88 Analog Throttle側の問題なのかDSmain R5.1側の問題なのかわからなかったため、
DSmain R5.1のOLED版とLCD版を所有していたので、OLED版とLCD版それぞれにS88
Analog Throttleをつなぎ確認してみたところ、RSmain R5.1のOLED版でのみで発生し
ます。このことから、DSmain R5.1側のそれもOLED版のみの問題のように思われるの
ですが、何が悪いのわかりません。

起きた現象をここに記載するのは、ちょっと大変なので添付ファイルにまとめてあり
ます。どこに問題がありそうなのか教示ください。


添付ファイル
.pdf   S88 Analog Throttle と DSmain R5.1 との組合せでの問題.pdf (サイズ: 369.72 KB / ダウンロード: 11)
返信
#2
Fujigaya2です。

詳細な説明ありがとうございます。

たぶん、何かのバグ対策で、
DSMain側に、DSJOYコマンドとして0x0000を無視する処理が入っていそうですね。
Speedが0の状態でF0からF4を押すことで、0x0000以外になるため、そのコマンドは受け付けられるけど、
もう一回同じファンクションを押すとS88Analogから0x0000が送られるが、
DSMain側は0x0000を無視しているため反応なしという感じでしょうか?

(S88 Masconから、アドレス0を送ってDSMainが飛ぶバグとか昔ありましたので。)
ちょっと、私も見てみます。
返信
#3
Fujigaya2さん、

私も、昨日からDSmain側のOLED版とLCD版のDSmeister.inoを見比べてみて
OLED版の void loop()内に、
  if( (aData != 0xFFFF) && ( aData != 0x0000))
の部分を見つけておりました。これだと、S88 Analog Throttle 側の設定が、
  ・速度 0、F0~F4 off のすべて 0、運転方向 forward の 0 の場合、データが読み込まれない
ということで、おかしくなるのではと思い
   if((aData != 0xFFFF)
に書き換え試してみたところ、正常に動作するようになりました。

ありがとうございました。
返信
#4
tkyngaさん

直ったようでよかったです。
返信
#5
fujigaya2さん、

今回、DSmeister.inoを中身を理解しようとして読んだのですが、追加
で教えていただきたいことがあります。

このスケッチの中で、MAX_S88DECODERというのが 4 と設定されて
おり、4word分のデータを読み込んでいますが、このMAX_S88DECODER
は何を定義されているのでしょうか?

S88 Analog Throttle側でdaisy chainされるコントローラの最大数を示し
ているのでしょうか(名前のつけられかたからするとコントローラ数?)
or S88 Analog Throttleから送られるType 0 ~ Type 4のデータ数(このデ
ータ数だと5?、ただ、ポイントデータは送っていないので4?)のこと
でしょうか?

あと、S88_RSTという信号(スケッチの中ではRESET)が送らていますが
この信号は何のために使用されるものでしょうか? (S88 Analog Throttle
側では使用していない???)

スケッチの中の細かいことになってしまいますが、よろしくお願いします。
返信
#6
tkyngaさん

このスケッチの中で、MAX_S88DECODERというのが 4 と設定されており、4word分のデータを読み込んでいますが、このMAX_S88DECODERは何を定義されているのでしょうか?S88 Analog Throttle側でdaisy chainされるコントローラの最大数を示しているのでしょうか(名前のつけられかたからするとコントローラ数?)or S88 Analog Throttleから送られるType 0 ~ Type 4のデータ数(このデータ数だと5?、ただ、ポイントデータは送っていないので4?)のことでしょうか?
→「daisy chainされるコントローラの最大数」と思います。

>あと、S88_RSTという信号(スケッチの中ではRESET)が送らていますが
この信号は何のために使用されるものでしょうか? (S88 Analog Throttle側では使用していない???)
→使っていないみたいですね。使ってなくてもPSとClockだけでどうにかなるようですね。(ごめんなさい。詳しいことわかっていないです)
https://www.digital-bahn.de/info_tech/s88.htm

よろしくお願いいたします。
返信
#7
fujigaya2さん、

 色々と教えて頂きありがとうございました。
 教えて頂いたdigital-bahn、非常に参考になりました。
返信
#8
fujigaya2さん、

実は、今回のfunctionの動作、F12までしかない車両で確認していたのですが、
F28までfunctionのある車両に変えて動かしていたら、今度は、F16~F28が動
作しません。DSmain側も、LCD版、OLED版と変えて試してみても、やはり動
作せず。

DSmainのNANO側スケッチファイルを眺めて行くと、どうも、F0~F28の各
functionを32bitの各bitに割り当てているようですが、32bitの上位側16bitに割
り振られるF16~F28のデータがうまく割り当てられていない。

何故???と思いつつ、これではと思ったのが、

 1)ThrottleS88::SetData(uint8_t inSlotNo, uint16_t inData)関数で、16bitの
  inDataからF0~F28を拾い出し、32bitのfunctionデータとして、16bitの
  inDataに割り振っている

 2)次に、ThrottleS88setFunctions(uint8_t inSlotNo, uint8_t inNo, uint32_t inData)
  関数で、受け取ったinDataを使い、32bitからなるaFuncDatasを元にして、
  F0~F28のどのfunctionに変化があったかをみて、最終的な動作させる
  functionnを決めている

のところ。

どうも、1)で16bitのinDataに32bitの操作をして、2)のThrottleS88setFunctions()
に渡しているが、ThrottleS88setFunctions()側では、受け取るinDataデータを
uint32型で定義しているものの、16bitのinDataしか受け取っていないのではと。

そこで、1)の中で、32bit変数を準備し、これにinDataを入れて、用意した32bit
変数で32bitのfunctionデータを作り、この32bit変数を2)に渡したところ、取り
敢えず F16~F28のfunction も動作するようになりました。

16bitのinDataデータを32bit操作しても32bitデータに変換されず、16bitでしか取
り扱われていないことになるってるみたいですが、C言語の経験が殆どなくよく
理解していないのであまり自信がありません。

何か、コメント等あれば宜しくお願いします。
返信
#9
S88 Analog Throttle の件、Functionの確認が漏れていました。

実は、DSmain 5.1 LCD版、OLED版ともに、F28が動作せずでした。
F28まで使うことは殆どないと思いますが、一応ご参考情報です。


調べたところ、DSmain 5.1のスケッチ ThrottleS88.cppで、どのFunctionが変更されたかを
チェックしている部分(下記)があるのですが、

if( mFunctions[inSlotNo] != aFuncDatas) {
   unsigned long temp_fnc = mFunctions[inSlotNo] ^ aFuncDatas;
   for(int i = 0;i<28;i++) {
      if (((temp_fnc >> i) & 0x0001) == 1) {
         ChangedTargetFunc(*CurrentProtocol + mLocAddr[inSlotNo], i,((aFuncDatas >> i) & 0x0001),true);
                            ・
                            ・
                            ・
の for文 で、i<28 となっており、F0~F27 までしか変更チェックができず、F28の変更が
反映されていないのではと?。そこで、i<28 を i<=28 の変更したところ、F28も動作する
ようになりました(多分,、あっていると思いますが)。

S88 Analog Throttle に関しては、個人的には気に入っており、可変抵抗器・Forward/Reverse
切換スイッチを追加し、さらに、空いているボタンスイッチを使いポイントも操作できる
ようにソフトを改造して使わせていただいております。
返信
#10
S88 analogを気に入っていただいてありがとうございます。

DSmainR5、R5.1は、もうバグフィックスはしないフェーズなんですかね?
https://desktopstation.net/hardware.html
からは落ちていますね。
返信


ページジャンプ:


このスレッドを閲覧中のユーザ: ゲスト: 1