So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

ドレミファVVVFと音切替機能追加 [ds-DCCデコーダ]

 初めに、出来たものの動画がこれ。

 E231と113系とかをひとつのDSdecにいれて、切り替えられるようにしようとしたら、動作がバグり始めた。Serial通信が半分しか来ない。デコーダが動かないなど。
 で、Arduinoのコンパイラのバージョンを1.0.6→1.6.4にした。そうしたら、今度のコンパイラはコンパイル後のROM容量だけでなくRAM容量も表示してくれ、おまけに「不安定になるよ。」と警告まで出してくれる。(どうすればいいかは教えてくれなかったけど)
 どうも、Kasoku配列(音を出すための配列)をConstで宣言しているにもかかわらず、コンパイラがこの大きな配列をメインメモリにおいてしまうため、すごい勢いでメモリがなくなったことがわかった。
 検索したら、メモリをケチるためには(ROMに置くためには)Serial.Print内はF()マクロを使用して、大きな配列はPROGMEMを使えばよいということがわかった。
 PROGMEMは少々癖があり(データを使用するときpgm_read_word_nearを使うなど)、途中、四苦八苦したが、まあ、最終的には動いた。
 そして、メモリも潤沢になったことだし、京急のドレミファVVVFも入れてみた。音階については電車のモーター音のページ様の音階をそのまま使っている。
 できたスケッチは、こちら
 使い方がだんだん複雑になっており、
まずは
(1)CV8、1でデコーダをリセット
(2)CV1、?で車両番号をきめ
(3)CV2、32でとりあえず始動電圧は32にしておき、
(4)CV5、80で最高電圧は80ぐらいにしておく。
(5)CV47、0でE231系
(6)CV48、1で和音らしきものが鳴る。
とくにCV47はセットアップ時にしか読み込みなおさないので、DirectModeでの書き込みオンリーである。(OPSModeとかで書き込んだ後、電源の入り切りでもよさそうだが。)
CV47,CV48についてだが、
CV47は音色の切替で、0~8まである。
-----------
0:E231
1:E231和音
2:113系
3:207系
4:シンプルなもの
5:京急
6:test
7:test
8:test
-----------
CV48は音の繰り返し方で
-----------
0:Kasoku配列の周波数1だけ出す
1:Kasoku配列の周波数1,2を交互に出す
2:Kasoku配列の周波数1を一回、2を2回出す
・・・・
10:Kasoku配列の周波数1を一回、2を10回出す
-----------
となる。0だと単音で1で和音、2、3とかはちょっと雑音気味になる。
10とかでは、ほぼ周波数2の音しか聞こえない。まあ、0~2以外はあまり実用性は無いと思う。

・CV47によって全然電車の動きが変わるので、CV2(始動電圧)、CV5(最高電圧)の調整が
音色ごとに必要である。
・DSdecをシリアル経由でPCに繋ぎっぱなしにすると、DCCデコーダーのリセットがかからず、値が反映されなかったりするので、注意(使うときははずすのが良いかと思う)。
・密閉性の高い電車のほうが良く鳴る。(鉄コレはよく鳴るが、Katoの通勤電車103系はモーター車の密閉性が悪く音があまり聞こえなかった)

なお、私はまだデコーダを車両に乗せての実験はしておらず、
DCC/MM2シールド→DSdec(初代)→線路→アナログ電車という
毎度のパターンでデバッグした。
DSdec_PWMコントローラ.jpg
コメント(0)  トラックバック(0) 

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0