SSブログ

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) 

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