JJ1WKN Log

自作や移動運用関連のログです。

Tanukino328でYMZ294のテスト演奏

2011-06-05 | Tanukino
音物の電子工作をしてみようと思い、以前秋月で購入したヤマハ製FM音源のYMZ294を使用してテスト演奏をしてみました。

ハードですが、shield.ioさんのPSGシールドを参考にしました。

回路図です。
オリジナルからはいくつか変更しました。
D0~D7のポートの割り当てを変更、/ICの制御は省略しました。
また、/CSと/WRを1つのポートにまとめました。
ポート数は沢山余っていますので、オリジナル通りでも構いません。
電源は携帯用のLiイオン充電池2個で8V仕様としています。
LM386はゲインを下げた方がいいでしょう。


ソフトはサンプルスケッチが公開されていますので、これを使用させて頂きました。
shield.ioさんありがとうございました。

ポートの変更に伴い、いくつか変更しました。
/ICは使用しないので、PIN_ICに関連する処理は全部コメントアウト、Reset();も不要です。
D0~D7ポートへの出力箇所も順番を逆にしたので、変更しました。
digitalWrite(PIN_D0-i, HIGH); ⇒ digitalWrite(PIN_D0+i, HIGH);

また、NoteNumber[128]テーブルでノートNoに対応する周波数を設定していますが、NoteNumber[0](一番低い音)を休符に割り当てますので、一番高い音の10辺りに変更します。(0でもいいようです)
実際は休符の時に高い音が出ていますが、耳には聞こえません。

完成した基板です。
中央の空きはYMZ294をもう1個追加して6和音にするためのスペースです。
右のDTRGのコネクタでUSBシリアル変換アダプタとの接続ようで、このままでプログラムの入れ替えができます。


ケースに入れました。


中身です。


さて、テスト演奏ですが、ドレミは簡単に出たので、楽曲を捜したところ、kazuya_aさんのサイトに「カエルの歌」を演奏するためのデータが公開されていましたので、早速コンパイルして演奏してみました。
kazuya_aさんありがとうございました。
C言語入門の例題では「hello,World」、PICやAVRの入門ではLEDピカピカが定番ですが、FM音源入門では「カエルの歌」のようです。

「カエルの歌」の演奏はできたので、他の楽曲にしようと思ったのですが、#や♭、何とか長調など、音楽の知識に乏しいので、楽譜を読むのも大変ですし、楽譜の入手も難題です。

そこでよそ様の成果を流用します。
フリーでMIDIファイルをダウンロードできるサイトを捜して好きな曲をダウンロードします。
YMZ294は3和音しか出ないので、単純で短い曲の方が良さそうです。
検索したところ、kalshagarさんのサイトでMIDIファイルをYMZ294用に変換するソフトを公開されていたので、これを使用させて頂きました。
SequencerDemoPlusVamp.zipをダウンロードしてください。
MIDIファイルを開いてSTARTボタンを押すと演奏が始まりますので、最後まで聴いたらSTOPボタンを押すと、Arduinoのスケッチが出力されるので、スケッチに貼り付けてコンパイルすればOKです。


音を鳴らす関数の記述がPSGシールドのサンプルとは異なりますので、下のような関数を介して鳴らします。
#define ADDR_FREQ_A CH_A
#define ADDR_FREQ_B CH_B
#define ADDR_FREQ_C CH_C
void set_ch(int ch, int note) {
  YMZ294.FreqTone(ch ,NoteNumber[note]);
}

動画です。
ATMega168では長すぎて入りきらないので、ATMega328に変更しました。
Tanukino+YMZ294でテスト演奏