So-net無料ブログ作成
前の10件 | -

MP3N18E01にサーボ信号を付加 その1 [ds-DCCデコーダ]

 新型コロナウイルスを拡散させている元凶として、小中高校が休みになったため、うちも子供が毎日、一日中家でYoutubeとマイクラ(マインクラフト)とWiiのマリオカートをやり続けています。毎日会社に行かないといけない身としては、ずるいなあ、いいなあと思いつつ、国全体の教育を一か月消したために数十年後にボディーブローのように国力に悪影響するんだろうなあとちょっとだけ心配しています。
 また、これで本当に東京オリンピックをやらなかったら、大友克洋のAKIRAの映画(2020年にオリンピックの予定だったが、東京が壊滅して、たぶん中止)が当たって怖いですが。
 さて、なごでんさんより、Next18仕様のMp3デコーダスケッチのMP3N18E01にサーボ機能を付けられないかと相談を受けたので、ちょっと作ってみました。
 入れるべきところはAUX3,AUX4のようですので、ATMEGAのピン配置ではPD6,PD5のようです。
 ATMEGA328はTimerを0~2の3つ持っていますが、0番はいろいろArudinoのタイミング制御に使っているようで使ってはいけないようなので、使いません。1はVVVFの疑似音に使用し、2はモーターのPWM制御に使っています。今回、サーボをTimer1で共用して使えないかという話でしたので、検討しました。
 Timer1は31KHzで動いていて、VVVF_sound.cpp内で割り込みの関数ISRを定義しています。31kHz(32usごと)にISRが呼ばれますが、実は、2回に1回しか波形を変更しておりません。なぜ31KHzで呼びつつ半分の16KHzで処理しているかというと、もともと16KHzで割り込みをして波形を毎回変更していたのですが、16KHzのモスキートノイズが発生してしまったためです。そのため、現在、呼ばれた割り込みの2回に1回は何もせずに割り込みを終わらせているため、この、何もしていないサイクルにサーボモーターの波形処理を入れることにしました。
 波形は16ms周期で、パルスの幅は0~16msまで0~255で対応します。値1あたり64usぐらい。
 命令は
void servo3(bool use_flag ,unsigned char angle)
void servo4(bool use_flag ,unsigned char angle)
で、use_flag にtrueを指定すると、パルスを出力します。angleに0~255を指定しますが、PICで遊ぶ電子工作 様を見ると、パルスは最大でも2.3msぐらいとのことで、angle = 3~35ぐらいと思います。
で、適当に作って、動かしてみました。今回、適当にnotifyDccFunc内を改造しF5~F8でservo3のangleが変わり、F9~F12でservo4のangleが変わるように適当なデバッグをしています。特にF5やF9はパルスを出さない設定にしているので、もしかしたら動作がおかしいかもです。
なお、next18環境の書き込みが難しいので、今回はかなり古いdesktop station様のdecoder development boardの改造品でデバッグしています。DS blue boxからの制御で疑似音、モーター、サーボ波形ともに一応出ることは確認しました。つまり、サーボの実稼働はさせておりません。(あと、たぶん、サーボ実装時はファンクションの使い方が違うと思います)
 スケッチはこちら
re_DSC02907.jpg



コメント(4) 

DCCコントローラ作り直し その4 [DCCコントローラ]

 で、fujigaya2 DCC Cheap Controller向けスケッチの完成です。
 ソースはこちらになります。
 スペクトルはこんな感じです。
A(0.1ms),1,2695,790,0,0,0,0,0,0,0,
(1),0,0,0,0,0,0,0,0,0,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),0,0,0,0,0,0,0,0,0,0,
(4),0,0,0,0,0,0,0,0,0,0,(5),
B(10ms),3486,0,0,0,0,0,0,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),

 パルスの周期を300us以内に抑えて、(適当ですが)ESUのLokSoundV5と,見るだけ君では反応することを確認しました。
 もちろん、
・127以降のロングアドレス、
・DecoderへのWrite/Read機能、
・ポイント制御、ファンクションのF5以降の操作、
などへの対応はバッサリを切り捨てております。
また、パルス幅のタイミングに使用しているdelayMicrosecondsは4usの刻みしかないそうで、
デコーダによっては認識が微妙になる可能性もあります。

あと、
#define BIT_ONE_US 56
#define BIT_ZERO_US 110
#define PREAMBLE_NUM 15
#define REPEAT_PACKET 3
#define DECODER_ADDRESS 0x03

などを、いじれますので、デコーダに合わせて、
・BIT_ZERO_US 、BIT_ONE_USで 「0」、「1」のパルス幅を変える。
・PREAMBLE_NUM でプリアンブルの数を変える。
・REPEAT_PACKET で送信の繰り返し数をかえる。
など、簡単に変更できるようにしておきました。


コメント(0) 

DCCコントローラ作り直し その3 [DCCコントローラ]

 続いて、ファンクションF0~F4部分です。NMRAの9.2.1の仕様をみると、
ファンクションは、{命令バイト}=100DDDDDとするとのことです。
 ですので、形は、
{プリアンブル} 0 [0aaa aaaa] 0 {100bcdef} 0 EEEEEEEE 1
aaa aaaa:1-127の車両のアドレス
b:F0
c:F4
d:F3
e:F2
f:F1
で、0:Off,1:Onです。
ということで、Arduinoスケッチの該当部分は以下になります。


#define REPEAT_PACKET 3
#define DECODER_ADDRESS 0x03

#define F0F4MASK  0b10000000 
#define F0_MASK   0b00010000 
#define F1_MASK   0b00000001 
#define F2_MASK   0b00000010 
#define F3_MASK   0b00000100 
#define F4_MASK   0b00001000 

void write_Func04_packet(unsigned int address,byte function,bool on_off)
{
  //function f0 - f4
  //現状addressは0-127のみ受け付ける
  static byte past_F0F4 = F0F4MASK;
  if(on_off == true)//Onの時
  {
    past_F0F4 |= function;
  }
  else
  {
    past_F0F4 ^= function;
  }
  for(int i = 0;i < REPEAT_PACKET;i++)
  {
    write_2_packet((byte)address,past_F0F4);
  }
}

void write_2_packet(byte byte_one,byte byte_two)
{
  //Idle Packet,2byte order 送信用
  write_preamble();
  write_byte(byte_one);
  write_byte(byte_two);
  write_byte(byte_one ^ byte_two);
  //packet_end_bit
  bit_one();
}


・write_Func04_packet(unsigned int address,byte function,bool on_off)
は、F0~F4指令を送る命令です。
ロコアドレスと、F0~F4のどれをOn/Offするかを渡します。byte functionには#defineのF0_MASK~F4_Maskのどれかを渡します。F5~F8,F9~F12も似たような形で作成可能だと思います。

・write_2_packet(byte byte_one,byte byte_two)
は2Byteの送信命令です。

次に、実際に送信部分ですが、以下のようになっています。


#define BIT_ONE_US 56
#define BIT_ZERO_US 110

#define PREAMBLE_NUM 15

void write_preamble()
{
  for(int i = 0; i < PREAMBLE_NUM;i++)
  {
    bit_one();
  }
}

void write_byte(byte b)
{
  //start bit
  bit_zero();
  //data byte
  for(int i = 0;i < 8 ;i ++)
  {
    int current_bit = (b << i) & 0x80;
    if(current_bit == 0)
    {
      bit_zero();
    }
    else
    {
      bit_one();
    }
  }
}

void bit_one()
{
    PORTB |= _BV(PB1);  //digitalWrite(9, HIGH);
    PORTB &= ~_BV(PB2); //digitalWrite(10, LOW);
    delayMicroseconds(BIT_ONE_US);         
    PORTB &= ~_BV(PB1); //digitalWrite(9, LOW);   
    PORTB |= _BV(PB2);  //digitalWrite(10, HIGH);   
    delayMicroseconds(BIT_ONE_US);
}

void bit_zero()
{
    PORTB |= _BV(PB1);  //digitalWrite(9, HIGH);
    PORTB &= ~_BV(PB2); //digitalWrite(10, LOW);
    delayMicroseconds(BIT_ZERO_US);         
    PORTB &= ~_BV(PB1); //digitalWrite(9, LOW);   
    PORTB |= _BV(PB2);  //digitalWrite(10, HIGH);   
    delayMicroseconds(BIT_ZERO_US);        
}

・#define BIT_ONE_US 56・・・「1」のパルス幅の時間[us]
・#define BIT_ZERO_US 110・・・「0」のパルス幅の時間[us]
・#define PREAMBLE_NUM 15・・・プリアンブルを何回送るか。12回以上でよかったか?

・write_preamble()
は以前使っていたものを変わりありません。

・write_byte(byte b)
も以前に使っていたものと変わりません。スタートビットの「0」送信後、1ビットずつ送信します。

・bit_one()、bit_zero()
digitalWriteは命令実行に44サイクルかかるらしいというのがあり、高速化しました。
現状では、digitalwriteは一命令で16MHzで62.5ns*44=2.75usこの間だけ、電位が0になる時間が出てしまいますが、
PORTBを使うことで一命令3サイクル、62.5us * 3 = 0.1875usとなり電位0時間をとても少なくすることができます。
 なお、今回、横着しており、オシロで波形を見ておりません・・・。


コメント(0) 

DCCコントローラ作り直し その2 [DCCコントローラ]

 忘れないように、その2に進みます。
 次は各種命令を追加していきます。
まずは、ショートアドレス時のスピード指定命令です。
NMRAの9.2.1の仕様をみると、
Multi Function Digital Decoderの命令は、Google翻訳によると、
{プリアンブル} 0 [AAAAAAAA] 0 {命令バイト} 0 EEEEEEEE 1
という形式で送れと書いてあります。

[AAAAAAAA]部分は、アドレスで、
アドレス00000000(0):ブロードキャストアドレス
アドレス00000001~01111111(1-127)(含む):7ビットの多機能デコーダーアドレス
アドレス10000000~10111111(128-191)(含む):9ビットのアドレスを持つ基本的なアクセサリーデコーダーと11ビットのアドレスを持つ拡張アクセサリーデコーダー
アドレス11000000~11100111(192-231)(含む):14ビットの多機能デコーダーアドレス
アドレス11101000~11111110(232-254)(含む):将来の使用のために予約済み
アドレス11111111(255):アイドルパケット

→今回はショートアドレスのつもり(それも0x03固定)なので、
「アドレス00000001~01111111(1-127)(含む):7ビットの多機能デコーダーアドレス」
にします。

で、{命令バイト}は
各命令は次のように定義されます:
{命令バイト} = CCCDDDDD、
       CCCDDDDD 0 DDDDDDDD、または
       CCCDDDDD 0 DDDDDDDD 0 DDDDDDDD
という感じで、
必要な命令は、方向指示、スピード、ファンクションのF0~F4だけです。

まず、方向指示、スピードは、
{命令バイト} = 001CCCCC 0 DDDDDDDD
で、CCCCC = 11111とするとよいようです。
でDDDDDDDDの下位7ビットが0-127で速度(ただし0:Stop.1:EmersStopらしい)
で最上位ビット(一番左)が方向指示で1:Forward,0:Reverseとのこと。

これらを、まとめると、
{プリアンブル} 0 [0aaa aaaa] 0 {00111111} 0 {dsss ssss} 0 EEEEEEEE 1
aaa aaaa は1-127の車両のアドレス
dは方向 1:Forward,0:Reverse
sss ssss は0-127でスピード指示となる。


#define REPEAT_PACKET 3
#define DECODER_ADDRESS 0x03
#define STEP128   0b00111111
#define LOCO_FORWARD 0b10000000
#define LOCO_REVERSE 0b00000000

void write_speed_packet(unsigned int address,bool loco_direction,byte loco_speed)
{
  //現状addressは0-127のみ受け付ける
  //loco_direction forward:true,reverse:false
  //loco_speed は2 - 127,0は停止、1は緊急停止らしいが・・・。

  byte temp_speed = loco_speed;
  //上限カット
  if(temp_speed > 127)
  {
    temp_speed = 127;
  }
  
  if(loco_direction == true)
  {
    temp_speed |= LOCO_FORWARD;
  }
  else
  {
    temp_speed |= LOCO_REVERSE;
  }
  
  for(int i = 0;i < REPEAT_PACKET;i++)
  {
    write_3_packet((byte)address,STEP128,temp_speed);
  }
}


void write_3_packet(byte byte_one,byte byte_two,byte byte_three)
{
  //3命令送信用
  write_preamble();
  write_byte(byte_one);
  write_byte(byte_two);
  write_byte(byte_three);
  write_byte(byte_one ^ byte_two ^ byte_three);
  //packet_end_bit
  bit_one();
}



・ write_speed_packet(unsigned int address,bool loco_direction,byte loco_speed)
は、スピードパケットを送る命令で、ロコアドレスと、方向と、スピードをもらって、
適当に上記の形に整えて、
実際にパケット送る write_3_packet((byte)address,STEP128,temp_speed);に渡します。
一回だと不安なので、REPEAT_PACKETで3回繰り返しています。
・write_3_packet(byte byte_one,byte byte_two,byte byte_three)
は、3Byte送信用の命令です。

その3に続く。



コメント(0) 

DCCコントローラ作り直し その1 [DCCコントローラ]

 さて、金曜日は姫路辺りまで日帰り出張したのですが、姫路駅に103系が止まっていたので、写真を撮りました。播但線なのでしょうか?ピンク色の103系初めて見ました。時間があれば乗りたかった気もしますが、時間ありませんでした。黄色い113系か115系かも見かけたので、ゆっくりと見たかった気もするのですが。
re_IMG_20200214_170708.jpg

 あとは、あやのさんから「びーだまのおもちゃ作ったのか?」と聞かれたので、もちろん作りました。作るのは楽しかったですが、そのあとの遊ぶ時間は30分程度ですぐに飽きてしまい、捨て場に困るオブジェ化しています。ガンプラもそうですが、楽しいのは、買うかどうか迷うとき、作っている最中、出来上がった瞬間ぐらいまでです。
re_DSC02906.jpg

 さて、本題です。前回「DCCパルスの全体的な周期を見てみる」でパルス幅のスペクトルアナライザちっくなものを作りましたが、そういえば、ESUのLokProgrammerも家にあることを思い出して、測ってみました。
結果は、
A(0.1ms),2,1749,1286,0,0,0,0,0,0,0,
(1),0,0,0,0,1,0,0,0,0,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),0,0,0,0,0,0,0,0,0,0,
(4),0,0,0,0,0,0,0,0,0,0,(5),
B(10ms),3038,0,0,0,0,0,0,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),
で、DCS50K並みに美しいです。ところで1.5ms辺りに一個パルスがありますが、これは、スケッチ側のミスです。修正したものはこちらです。こうすると、300usより大きい周期パルスはありませんでした。

で、DigitraxやESUのコントローラがどちらも300us未満で、連続してDCC信号を出しているのに、私のfujigaya2 DCC Cheap Controllerが70msのDC信号を出しているのが気になってきたので、目指せ、300us以下の周期パルス!でスケッチを作り直すことにしました。
 前回のはdsshieldauto向けの自動運転スケッチから派生させて、開発を省略しました。しかし、このスケッチのライブラリは、S88やMM対応、desktopstationソフト連携など高機能なため、たぶんここら辺で時々大きな周期パルスが必要になっているかもと思います。一瞬、ライブラリとにらめっこしていらない部分をそぎ落とそうかとも思いましたが、人のソース見るのはかなり大変なので、作り直すことにしました。

 最初からコマンドステーションを作るのは敷居が高いので、まずはIdelPacketを出すスケッチを書きます。
 まずはDCC信号がどう出ているのかを確認するため、NMRAの仕様の確認です。適当にグーグル翻訳しながら見ていきます。まずはDCC信号を作り出すということで、DCC信号の1と0について確認です。
「1」について
コマンドステーション側:55us~61usのパルス幅で出す。
デコーダ側:52us~65usで受け取る。
「0」について
コマンドステーション側:95us~9,900usのパルス幅で出す。周期で12,000us超えないようにする?
デコーダ側:90us~10,000usで受け取る。
という感じです。
で、あとは、
無題.png

こんな感じで、Preamble、Address、コマンドデータ、エラー検出データ、と送ればよいようです。
まずは、アイドルパケット送信で試してみるかということで、適当に
111111111111 0 11111111 0 00000000 0 11111111 1
Preamble Byte One Byte Two Byte Three (Error Detection Data Byte)
に合わせて、Arduinoでスケッチを組みます。

#define BIT_ONE_US 56
#define BIT_ZERO_US 110
#define PREAMBLE_NUM 14

void setup()
{
  // put your setup code here, to run once:
  pinMode(9, OUTPUT);   // 出力に設定
  pinMode(10, OUTPUT);  // 出力に設定
}

void loop()
{
  // put your main code here, to run repeatedly:
  //idle Packet
  write_packet(0xFF,0x00);
}

void write_packet(byte byte_one,byte byte_two)
{
  write_preamble();
  write_byte(byte_one);
  write_byte(byte_two);
  write_byte(byte_one ^ byte_two);
  //packet_end_bit
  bit_one();
}

void write_preamble()
{
  for(int i = 0; i < PREAMBLE_NUM;i++)
  {
    bit_one();
  }
}

void write_byte(byte b)
{
  //start bit
  bit_zero();
  //data byte
  for(int i = 0;i < 8 ;i ++)
  {
    int current_bit = (b << i) & 0x80;
    if(current_bit == 0)
    {
      bit_zero();
    }
    else
    {
      bit_one();
    }
  }
}

void bit_one()
{
    digitalWrite(9, HIGH);   
    digitalWrite(10, LOW);   
    delayMicroseconds(BIT_ONE_US);         
    digitalWrite(9, LOW);   
    digitalWrite(10, HIGH);   
    delayMicroseconds(BIT_ONE_US);        
}

void bit_zero()
{
    digitalWrite(9, HIGH);   
    digitalWrite(10, LOW);   
    delayMicroseconds(BIT_ZERO_US);         
    digitalWrite(9, LOW);   
    digitalWrite(10, HIGH);   
    delayMicroseconds(BIT_ZERO_US);        
}



・#define BIT_ONE_US 56 は「1」パルスのパルス幅です。
・#define BIT_ZERO_US 110 は「0」パルスのパルス幅です。
・#define PREAMBLE_NUM 14 はPreambleを何回出すかです。14個ぐらい出せばよいようなことが書いてあった気がします。

・setup()で出力するピンをアサインします。9,10です。
・loop()でIdlePacketを繰り返し出します。write_packet(0xFF,0x00);です。
・ write_packet(byte byte_one,byte byte_two)はその中身で
preambleを出して、
byte_oneの内容(0xff = 全部1)を書いて、
byte_two(0x00 = 全部0)を書いて
エラー検出はデータのXORで(0xff ^ 0x00 → 0xff)を書いて
最後にパルスの1を出力して終了です。
・write_preamble()は「1」を14回繰り返して送ります。
・write_byteはデータをビットに分けて送る部分です。startにまずパルスの0を送ります。
・bit_one()、bit_zero()は具体的に1,0を出力ピンに出している部分です。
分かりやすく
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
と書いていますが、この書き方だと一つの命令に数usかかってしまい、電圧を供給できない時間が長く発生するようですので、ここの表現はそのうちPORTB = ・・・に変更していきます。

で、この状態でスペクトルを確認したら、こんな感じで美しいです。
A(0.1ms),1,2469,675,0,0,0,0,0,0,0,
(1),0,0,0,0,0,0,0,0,0,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),0,0,0,0,0,0,0,0,0,0,
(4),0,0,0,0,0,0,0,0,0,0,(5),
B(10ms),3145,0,0,0,0,0,0,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),

見るだけ君で見てもIdlePacketがちゃんと出ていることを確認できました。
次はいよいよ、いろんな命令を送ります。


コメント(2) 

DCCパルスの全体的な周期を見てみる [DCCコントローラ]

 またまた生存報告になります。
 まずは、少し前に大船駅に185系が止まっていたので、そのうちの記録のために撮っておきました。(PCのローカルフォルダから探すのが面倒なので、Webに上げるという横着)
re_IMG_20200125_170325.jpg
re_IMG_20200125_170301.jpg
re_IMG_20200125_170357.jpg

 で、久しぶりに鉄道模型をしようと思ったのですが、作業台の上がゴミ箱化して久しいため、
re_IMG_20200202_105143.jpg

 収納ボックスとかを買って、整理してみました。 ふるさと納税などもありますが、気が付いたら、HOゲージが大量にあります。おまけに、半分以上DCC化以前に全く走らせていなかったりします・・・。
re_IMG_20200202_134951.jpg

 で、片づけた後の写真がこれですが、あまり変わっていない。いや、すべて箱に入れたんだが。
re_IMG_20200209_171539.jpg

 あとは、アカデミー賞を取ったということで、韓国映画『パラサイト 半地下の家族』を見に行きました。賞取ったというだけあって面白かったです。韓国映画、私が前見たのは20年ぐらい前の「猟奇的な彼女」ですね。アカデミー賞も、ヨーロッパの映画祭のように、他国の映画を受賞させて、(世界から選んでやっているという箔を付けて)権威を保つという方向にシフトしたんだなと感じました。

 さて、本題です。少し前にDCC Cheap Controllerを作るときに、スケッチで適当な重い処理を入れると、途端にDCCパケットが出力されないという話がありました。
 DCCデコーダによっては、パケットのパルスが数ms止まって、+12V、-12Vのどちらかが出続ける状態を掴んでしまい、アナログモードに移行して、そのまま彼方までフルスロットルで暴走してしまうというようなことがあるかもです。(推測)
 もしかしたら、昔のS88Masconの暴走もこのパルスのフリーズ関係かもと思い、SoundBox Control Decoderを使ってDCCのパルスの周期をスペクトルのように解析できるスケッチを作ってみました。0.5秒間、周期を区切りごと(A:0~5msを100usごと、B:0~500msを10msごと)にカウントしてスペクトルのようなものを生成させます。スケッチはこちらです。D2のIntからDCC信号をみるだけですので、ブレッドボードでも適当に作れるかとは思います。
 で、こんな感じで、S88Mascon系を3つ数珠繋ぎして、Functionやスピードを操作しながら、パケット周期の確認をしました。
re_IMG_20200211_195931.jpg

まずはDSOneです。S88Masconが繋げられるやつです。
A(0.1ms),4,1579,856,0,10,13,0,10,2,0,
(1),0,0,0,0,0,0,0,1,0,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),0,0,0,0,0,0,0,0,0,0,
(4),0,0,0,0,0,0,0,0,1,13,(5),
B(10ms),2487,1,0,0,0,0,1,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),
見方ですが、結果は0.5秒ごとにSerialから結果が出力され
A(0~5msレンジ)は0~100usに4個、100us~200usに1579個、200us~300usに856個・・・のパルスがあるとみていきます。
(5)の手前の13は5ms以上のパルスの数です。
また、B(0~500msレンジ)は0~10msに2487個のパルス、10~20msに1個のパルスと見ていきます。
70msに一個パルスが出ており、これとか、暴走パルスに当たるものなのかしらん?と想像します。

次にDSmainR5です。こっちもDSJoyを繋げて実験しています。こちらは古い設計で、制御はArudinoNano。パケット生成にもう一つATMega328PUを使用して分業していますので、妙に長いパルスは存在しません。優秀です、多分。一番長くても3.3ms程度です。
A(0.1ms),1,1833,777,0,10,1,0,1,0,0,
(1),0,0,0,0,1,0,0,0,0,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),8,0,1,0,0,0,0,0,0,0,
(4),0,0,0,0,0,0,0,0,0,0,(5),
B(10ms),2633,0,0,0,0,0,0,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),

で、せっかくなので、DSair2。ArudinoNanoに制御もパケット生成もやらせているので、DSOneっぽい動きをしていますが、、最長パルスは10~20msで、DSOneよりもましです。ただし、5ms以上のパルスが10個ほど出ているようです。DSair2はS88Masconを繋いでいません。スマホを一つだけ繋ぎFunctionやスライダーを連打、変更しながらやっています。
A(0.1ms),1,1959,694,0,0,0,0,0,0,0,
(1),0,0,0,0,1,0,0,0,3,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),0,0,0,0,0,0,0,0,0,0,
(4),1,0,0,0,0,0,0,0,0,10,(5),
B(10ms),2667,2,0,0,0,0,0,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),

あとはせっかくなので、Functionやスライダーを連打、変更しながら、DCC Cheap Controllerも見ていました。
A(0.1ms),0,1770,684,2,0,0,0,0,0,0,
(1),0,0,0,0,0,1,0,0,0,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),0,0,0,0,0,0,0,0,0,0,
(4),0,0,0,0,0,0,0,0,0,17,(5),
B(10ms),2474,0,0,0,0,0,0,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),
まあ、軽い処理しか入れていないので、悪くない結果です。5ms以上のだんまりが17個出てますがなんでしょう?

せっかくのなのでDCS50Kも見てみますと、美しいです。最も長いものは1.4~1.5msに一個出ているだけです。大きなパルスが存在しないため、結果としてパルス総数も多いです。(3172個)
A(0.1ms),1,2046,1124,0,0,0,0,0,0,0,
(1),0,0,0,0,1,0,0,0,0,0,
(2),0,0,0,0,0,0,0,0,0,0,
(3),0,0,0,0,0,0,0,0,0,0,
(4),0,0,0,0,0,0,0,0,0,0,(5),
B(10ms),3172,0,0,0,0,0,0,0,0,0,
(100),0,0,0,0,0,0,0,0,0,0,
(200),0,0,0,0,0,0,0,0,0,0,
(300),0,0,0,0,0,0,0,0,0,0,
(400),0,0,0,0,0,0,0,0,0,0,(500),

とか言っても、仕様では200msぐらいパルス出さなくてもいいんでしたっけ?

コメント(5) 

電車でGo!コントローラをDSair2で動かすためのMasscon2kbd(全部品入り)のご案内 [DSAir]

 ほぼ生存報告です。
 先週は天皇陛下一家も試写を見られたらしいこの世界の(さらにいくつもの)片隅にを見に行きました。前作と編集を変えており、粗筋は変わりませんが、登場人物の心情が全く違った話になっていて、まあ、スターウォーズ最終作の3倍ぐらいは心を動かされました。
 今週はメイドインアビス 深き魂の黎明を見に行きました。R15+の規制があるだけあって、原作は知っておりますがなかなかの恐怖でした。初日のレイトショーを見ましたが、一番大きいシアターの8割がた席が埋まっており人気作なのだなあと思いました。心を動かされる度合いとしてはスターウォーズとこの世界の片隅にの間ぐらいですかね。

 さて、短い本題です。
 デスクトップステーション様でMascon2kbdの部品付きのキットが販売されております。部品をそろえるのが大変な方は、ぜひそちらで買っていただければと思います(OTGケーブルはついていないようです)。なお、私のほうの基板とケースのみは在庫切れですので、欲しい方がおられましたら、ご連絡いただければ、春節明けにでも中国に注文するのことは可能です。

コメント(0) 

冬の運転会の報告 [その他]

 12月24日は、22/7のライブの抽選が当たったので(というか、なんか当日券まで売っていたので、結局売れ残ってたんじゃないか?という気もしますが)、仕事は半休取って、お台場まではるばる行きました。海老名から行くのは、相鉄がJRに乗り入れたため、とても楽に行けました。
 大崎駅の行先表示板ですが、新木場、逗子、小田原、海老名 行きって、すごいターミナル駅です。20世紀の人に言っても信じてもらえなさそうです。
re_IMG_20191224_215413.jpg

 お台場は、24日はどこもカップルばかりで、なんか一人で歩いていると負けた感がよぎりましたが、まあ、そんなことを気にする歳でもありませんし。ユニコーンガンダムが光っていました。
re_IMG_20191224_180334.jpg

 ライブは楽しかったですが、スタンディングで2時間ぐらい。会場に入る前にも一桁の気温で寒い外で数十分待たされたりと、40代半ばにはかなり苦行でした。次の日から数日体の調子が悪かったです。
re_IMG_20191224_180532.jpg

 で、本題です。内輪の年末運転会に参加しました。
re_IMG_20191228_155019.jpg

 Mascon2kbdのデバッグのため、マスコンを4台持ち込んで動かしてみましたが、ダメでした。1台当たり0.2秒ごとに速度指令を出すのですが、信号の出しすぎでDSair2の制御が詰まってしまい、ノーコン状態になっていました。
re_IMG_20191228_144915.jpg

 2台までは実用的でしたので、電車でGo!コントローラは2台までの接続に抑えてください。Yaasanさんによると、flashairが非力だそうです。まあ、4台繋ぐと速度指令を50msごとに受け取るため、DSair2側はたまったもんではないと思いましたが。で、非力じゃなさそうなRaspiにしたらどうか?と聞いたら、外国の人からも言われているが、・・・。という感じでした。

 あとは、夏の運転会で何人かで作ろうとなったOnCoinコントローラの数々。
re_IMG_20191228_160234.jpg

左から、あやのさんのPS2コントローラ接続のもの、へのへのもへじさんのもの、私のもの、あやのさんのTVリモコンで動くもの、になります。確か、どれも安全回路はドライバ任せな適当な設計だったような気がします。

あとはへのへのもへじさんのリツイートがすごかったモノレールの中身見せてもらいました。
ミニ四駆用のベアリングを駆使してレールと接していて、真鍮+ハンダを用いて車両間を接続、バスコレの動力で駆動。
re_IMG_20191228_161839.jpg

電池はニッケル水素で、ヘッドライトも光る・・・。
re_IMG_20191228_161846.jpg

 まあ、不器用な私はマネしないようにしておこうと、そっと思いました。


コメント(0) 

DSAir2、Mascon2kbdのIpadでの動作確認 [DSAir]

 金曜日はスターウォーズの9作目、土曜日はぼくらの7日間戦争(3作目?)を見に行っていました。
 スターウォーズの特筆すべき点は、ストームトルーパーが空を飛んで、ついにザク並みになったとか(ザクがスターウォーズをまねて作ったという話聞きますが)、女性進出が進んで、ストームトルーパーから女性の声が聞こえたり、帝国の司令官も女性がやるようになった辺りでしょうか。気に入らなかった点は、2Dを見に行ったのに、3D前提で作られてため、見てほしい部分以外のピントをわざとぼけさせるため、背景の作りを見たい私としては、どこに視線を合わせるかを強制されるため、イラッとすることでした。
 ぼくらの7日間戦争(3作目?)は、ヒロインの女の子の声をやっていた女優さん(芳根京子さん)の声がよかったと思います。聞き取りやすかったですし。話は割と面白いと思いましたが、上映2週目なのに、スターウォーズの9作目とアナ雪の2作目に場所を取られて、上映時刻が朝とレイトショーに追いやられて、公開時期をしくじったなと感じたのと、タイトルも「僕らの7日間戦争」にあやかる必要ないと思いました。あと、こっちは、「男なんだからその荷物持ってけ!」みたいなセリフや、大人の「悪役」が全員 男で構成されているなど、日本の映画でした。

 で、長い前置きの後に、表題の件です。
 Ipadでの動作確認をしました。使ったIpadはBookOffで安く買ってきた第4世代Ipad(MD510J/A)OS Verは10.3.3。OTGケーブルは純正のLightning USB-3 カメラアダプタ[MK0W2AM/A]。最初、Amazonで互換品を買いましたが、接続中にときどき「デバイスを使用できません ArduinoMicro:接続されたデバイスはサポートされていません。」が表示されていたため、どうも、接触不良気味なのか、プロテクトなのか・・・です。純正品はそんなことはありませんでした。
 普通につなげると、まずは下記の「デバイスを使用できません Arduino Micro:接続されたデバイスは消費電力が大きすぎます。」エラーが出ます。
re_DSC02897.jpg

 これに対するおまじないの方法は、やすひろさんの方法で、Ipadに申告する電流値を下げてやることで、起きなくなります。
 その後はケーブルの接続するごとに以下の「デバイスを使用できません ArduinoMicro:接続されたデバイスはサポートされていません。」が出ます。これが互換品だと、接続中にときどき出るようでした。理由は不明です。
re_DSC02898.jpg

 と、まあ、ここまでやって、IPadにつながるようになりました。Appleの純正OTGケーブルの後にUSBハブ(手持ちのBSH4UMB04で確認)をつないで、そこから、MasconとPCのUSBキーボードに分岐してやると、Masconで動かしつつ、キーボードでF0~F19まで操作できるようになります。(F0~F9は0~9キー。F10~F19はShift+0~9キー)
re_DSC02900.jpg

 同じことは、もちろんAndroidTabletでも可能です。こっちはOTGケーブルとして先ほどのBSH4UMB04がそのまま利用可能です。
re_DSC02902.jpg

 ちょっと、複数接続時のいじわる試験をするために、何個かMascon2kbdを作りました。今度の週末の運転会?で実験しようかと思います。
re_DSC02901.jpg

 ケースの作り直しをElecrowに一週間前に頼んだのですが、発送の連絡がまだ来ません。来週前半に来るんだろうか・・・。

コメント(0) 

DSAir2用に適当スピードメーターの追加(E259系) [DSAir]

 スピードメーターで古い国鉄車両用とE217,E233らしきものは作りましたが、手元に写真のあるものでE259系用を作っていなかったので、作ってみました。
 なんで、金曜日に?の理由は、子どもがインフルエンザになってしまい、妻が仕事を休めずに私が休んだためです。私の家はマンションではありませんが、異常行動で子供が外に飛び出して事故でも起きたら、後で、悔やみきれませんし。
 で、一日中、JavaScriptをにらめっこです。と言っても、今回のモノは、ほぼE233系からパラメータを変更するだけです。
 E259系の写真は、自分のこちらの記事にありますので、似たようなもの(一部デフォルメ)を作るだけでした。
 で完成。E259系はOpenSoundはなかったっけ?というか成田エクスプレス自体はよく見るけど、ほとんど乗ったことがない。海外もほとんど行かなくなったし、行くとしても近場は羽田から行けるし・・・。
無題.png

 で、気になっているのが、スピードメーター以外の部分の背景色が変えられずに、困っています。どうしたものか。
 一応、今回のE259系も含めて、スピードメーターのスキン部分を変えられるようにしたもののソースはこちらになります。大きさの関係で、変更した部分のみです。9月のアップデートの物を使っているので、最新とは少し変わっているとは思います。SD_WLAN以下の部分をオリジナルの物に対して、上書きしてやると、スキンセレクタがメインページになりますが、いろいろなメーターで楽しめるはずです。

 
コメント(1) 
前の10件 | -