SSブログ

ドレミファ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

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