SSブログ

DCC/MMシールドとDSOne向けDSjoyスケッチ修正 [DCC/MM2シールド]

 いつの間にか大みそかになってしまいました。皆さん、今年は良い年でしたでしょうか?まあ、人生いろいろかとは思いますが、来年はいい年でありますように、と久しぶりに切に願っております。
 で、タイトルのとおり、DSMainR5に続き、今度はDCC/MMシールド向けDSJoyスケッチの修正です。一応イメージ写真です。
re_DSC02195.jpg
 今までは200msごとに呼んで、複数台のコントローラがあるとウェイトが10msで複数命令をDSCoreに出しておりましたが、こちらも100msごとに呼び一回に一つの命令だけDSCoreに飛ばすように変更しております。一応2つまでS88Masconはつなげるようにしておりますが、ArduinoUnoの三端子レギュレータで12V→5V変換をすると、手で触れないぐらいの熱さになりますので、あまりお勧めしません。
 DCC/MMシールド向けソースはこちらです。
 DSOne向けソース(DSJoyR2d4)はこちらです。

 

コメント(0) 

DSMainR5のDSJoy部分のバグ [DSmainR5]

 Yaasan様が私の年賀状イラストをPaintChainerでAIに着色してもらったら、わりとちゃんとしていたというとことで、画像を下さったので載せます。ちゃんと私の絵を犬と認識できたということでAI偉い!と思いました。犬の影が赤い(血だまり)のよう見えるのがちょっと気になりますが。
K9CJCTOSW96OPSWJN58PQUAN4UVBI40D_0.jpg
 で、お正月の大型連休に入りましたので、鉄道模型を再開です。
re_DSC02194.jpg
 今回は、クモハ40とクモハ12の複線レイアウトで、S88Masconを2台つないで、子供がやるハードな運転の再現です。・・・少し前から気になっていたバグの部分です。
 DSMainR5にS88Masconを2台つないで両方とも割とハードに加速と減速を続けると、DSMainR5の電源供給が突然途絶えたりErrorLEDが消えたり、と心霊現象が起きます。(いや、単なるバグです)
 で、最新のソフトを使って確認しました。ファームも最新(DSCore(R5.1)R2)です。私の持っているのはDSMainR5なので、電流制限部分はちょっと変更しますが。
 で、この状態では、S88Masconで上記のバグが再現します。
 現象として、線路電源供給がOffしたり電流制限のErrorLEDが点いても、DSMainR5のNanoからの@で始まる状態のシリアル出力では、それにあたる命令がでたというのは確認できないし、もちろんS88MasconでもPowerOff命令は出していませんでした。
 現状ではDSMeister.inoのloop関数内で、DSjoyは100msに一回割り込みをもらって、2個S88Masconをつないでいる場合はここで、2命令を連続でDSCoreに投げます。
 なんとなく以前に言っていたDSCoreに命令を一度に送りすぎるとバグるという現象っぽい、ということでいくつか試してみました。
(1)DSJoyの100ms割り込みを200ms、400msなどに変更してみる。→現象は変わらないので、多分連続送信がダメっぽい。
(2)DSJoyの100ms割り込みでS88Masconの命令を一つだけ送るように変更してみる。つまり、S88Masconを二つ繋いでいると、1周期に200msかかる。→バグらなくなった。
 ということで、DSCoreへの連続送信をやめることで、心霊現象(バグ)は起きなくなりました。
なので、loopをちょっと汚いですが以下のように変更したら、大丈夫になりました。
ソースはこちら。(DSMainR5用です)
 今後、DSOneなどでも同じルーチンを試してみようと思います。
---------------------(抜粋)
//DSJoy用スケジューラ
int dsjoy_int = 0;

void loop()
{
	
//省略
  if( (millis() - gPreviousL6) >= 100)
  {
    if( Sequence.GetRJ45Mode() == RJ45MODE_DSJ)
    {
      // S88  
      if(dsjoy_int == 0)
      {
        reporter.refresh(MAX_S88DECODER);
      }
      
      // データ処理 

      //for( int i = 0; i < MAX_S88DECODER; i++)
      int i = dsjoy_int;
      {
        uint16_t aData = (reporter.getByte(i * 2 + 1) << 8) + reporter.getByte(i * 2 + 0);
        if(i == 0)
        {
          //SerialDS.print("s88_raw:");
          //SerialDS.printHEX(aData);
          //SerialDS.println("");
        }
				
        if( aData != 0xFFFF)
        {
          // S88データをジョイスティックプロファイルに読み替え処理 
          DSJoy.SetData(i, aData);
        }
        //else
        //{
        //	break;
        //}
        i++;
        if(i == MAX_S88DECODER)
        {
          //最大数まで行った
          dsjoy_int = 0;
       	}
        else if(0xffff == (reporter.getByte(i * 2 + 1) << 8) + reporter.getByte(i * 2 + 0))
        {
          //次が接続されていない
          dsjoy_int = 0;
        }
        else
        {
          //次がある
          dsjoy_int ++;
        }
      }
    }

    //Reset task
    gPreviousL6 = millis();
  }
//以下省略
}

---------------------

コメント(4) 

年賀状を書いていた [その他]

 さて、会社の忙しい時期は一度終わったのですが、年賀状やらクリスマスやらのやらなきゃいけないことが溜まっているため、年末まで鉄道模型はお預けです。
 とか言いながら他の遊びは再開しています。今週末はまずスターウォーズのエピソード8を見に行きました。うーん。詰め込み過ぎですね。まあ、ロボットとか戦闘とかいっぱいで、それはそれで面白かったですが。前作同様、心の中で映画の時間が長いなあ・・・と思いながら見ていました、で、次に鎌倉ものがたりを見に行きました。少し前から江ノ電がキャンペーンをやっていて、300形の行先標が「黄泉」、「現世」となっていて、かなりこの電車縁起悪いなあと思っていたのですがそれの元ネタになります。映画の中では、鎌倉と江ノ電の説明が入るためちょっと違和感もありましたが、主人公の一色先生がHOゲージが好きで、テンショウドウの電車やタンコロを走らせて喜んでいました。まあ、映画は面白かったです。知っている風景がいっぱい出ていたので楽しめました。タンコロも出てきたし。
 で、その後は、25日までに出さなければいけない年賀状です。親戚に出す年賀状は写真の物なので宛名を書くだけですが、子供が友達に出す年賀状は、子供がイラストを描いて私がプリンタで印刷してという感じです。で、大人げなく子供に対抗して私もGoogle検索などでネットから絵をパクりつつ少しオリジナリティーを入れて年賀状を作ってみました。
戌年.jpg
 渾身の作(30分ぐらいかかった)だったのですが、子どもからは総スカンを食らいました。まあ、普通に考えて自分で書いた絵を使いたいですよね。この絵はもちろんお蔵入りです。こんな乙女チックなのはわたしの知り合いには出せませんし。で、土日が終わりました。

コメント(0) 

クモハ40(HO)をプレゼントするらしい [その他]

 かなり、釣りのような題名ですが、DesktopStationの電機屋の毎日様のBlogで、DCC電子工作連合の部品を使った作品を応募すると、クモハ40(HO)がもらえるかもとのことです。微妙に9位を取るというのは難しいような気もしますが。
 なお、私の近況ですが、昼の仕事で精神的に疲れているため、模型はお休み中です。そのせいで、クリスマスプレゼントが溜まっております・・・。冬休みに手を付けていこうと思います。(いや、それ以外もいろいろと片付いていないことがありますねえ)
re_DSC02193.jpg


コメント(0) 

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