YMZ294で楽しむPSG音源
(在庫整理ネタ)


はじめに

前回までのPIC入門では、RS232C通信でMIDI音源やキャラクタLCDモジュールの制御とか、RGB信号を直接生成してRGBカラー液晶へカラーバーを表示を行いました。通信ネタ・画像ネタとくれば残りは音ネタというわけで、今回はYAMAHAのPSG音源LSI YMZ294を使って、懐かしのPSG音源(YAMAHA的にはSSG音源)を楽しもうと思います。
尚、他の音ネタとしてはPICから方形波を直接出力したり、回路を追加して波形を加工して音する方法もあります。

YMZ294は秋月電子通商で4MHzの発振器とソケットとセットで240円で販売されています
 
↓YMZ294


YMZ294とは

YM2149相当の音源LSIです。以下の特徴があります。
・YM2149とソフトコンパチブルの短波形3音、ノイズ1音。
・5ビットDAC3個の3音ミキシング出力。
・8オクターブの発音域
・5V単一電源
・18pinDIP

MSXのPSG音源はAY-3-8910A等だったそうです。YM2149はその相当品でYAMAHAのMSXには搭載されていたみたいです。
マイコン工作で音楽が必要なときはちょうど良いので、いじってみてはいかがでしょうか。

どうやって演奏するの?

YMZ294の汎用CPUインターフェースは簡単なものなので。TTLレベルで出力できるものであれば制御可能です。

YMZ294は以下の 内臓レジスタに書き込むことで制御を行います。
・$00〜$05    楽音周波数設定
・$06            ノイズ周波数設定
・$07            ミキサー設定
・$08〜$0A   音量コントロールとDAC
・$0B〜$0C   エンベロープ周波数の設定
・$0D            エンベロープの形状コントロール

これらはMSX-BASICのSOUND文と同じです。
ということは、作曲にはMSXエミュレータがそのまま使えます。

レジスタはデータパスにアドレス・データをセットしてから、入力/CS・/WRをLowにすることで取り込みます。アドレスとデータは入力A0で切り替えます。アドレス→データの順に入力したほうが良いでしょう。

YMU294のマスタークロックは4MHzと8MHzが使えます、ここでは秋月のセットに入っていた4MHzを使います。

詳しいデータはYM2149のデータシートを見てください。
↓データシートはここにあります。
http://bulba.at.kz/
for Engineerから圧縮ファイルをダウンロードしてください。
I/Oピンが無いので内臓レジスタ$0E、$0Fが無効になっている以外は同じです。

PIC16F84Aで演奏する。

とりあえず音を鳴らそう。
なんにしても音が鳴らなくては始まりません、何でもよいので演奏してみましょう。
秋月のソースの最初に書いてあるピン情報を元にしてPICとYMZ294を接続して、鳴らしてみました。
↓サンプル
アセンブラソース:MPASM用
    ymz294_c.asm
アセンブル結果のIntelHEXファイル
    ymz294_c.hex   


さて回路はどうするか。
今回、YMZ294の制御にPICを採用したのは私の気まぐれです。
AVRでもH8でも良かったのですが部品ケース(CPU用)にストックされたPICが恨めしそうにこちらを見ているような気がしたので採用しました。演奏には当然スピーカが必要です、イヤホンなんかを流用しても良かったのですが、部品ケース(ジャンク用)のそこにネジを引っ付けたまま眠っていたスピーカが哀れだったのでそれを使うことにしました。
そろそろ気づいたかもしれませんが、今回のネタのテーマは在庫整理です。
…買ったは良いが作ってないものが他にもたくさん有ったりするので・・・。

とりあえず、秋月のソースの最初に書いてあるピン情報にPICとYMZ294を接続して、スピーカにつないで見ます。

↓鳴らしているときの写真。

あぁ、鳴ってるよ、なんとなくブロック崩ししたくなるな(笑)。
ブレッドボードだと、たまに繋ぎ損ねがあったりするのですが、そういう時はペン型オシロosziFOXをちょっとピンに当てて波形をみるとすぐにわかります。電源は入っているか〜とか、クロックは出ているか〜とかも、osziFOXで確認できるので便利です。

というわけで、今回作った回路はてきとーにやった結果にこんなふうになっています。
↓回路図

試しににD2CADで書いてみました、Windows的に素直な操作系で使いやすいです。
スピーカのそばのC3、C4はあり合わせです。データシートにあるリファレンスだとC3=250uF、C4=0.05uFになっています。
YMZ294から直接スピーカをつないだのですが、普通に聞こえるくらいの音量でした。
面倒な為、パスコンは省いています。
手抜きしすぎ?

最後にはブレッドボードを片付けてユニバーサルボードに部品を置いて、ウレタン線をつけたりとったりして遊んでいました。
↓鳴らしています。

なんかブレッドボードよりこっちのほうが楽になってきた・・・。

まぁこんなもんでしょ

本当は自作というところを生かしてPIC16F876の8kワードをフルに使った長い曲を入れるとか、タイマ割り込みを用いて独自の音を創造するとか、MIDIモジュール化等という構想もあったのですが、私が所持しているデータ資産等の関係で余り魅力がなかったの、またの機会ということにしました。
曲をつくるより回路をいじっていたほうが楽しかったわけです(開き直り)。

今回学んだこと。

・久しぶりにPICをいじるのは楽しい!
  楽しいものは楽しいのですよ。
・買うだけじゃなくて作れよ。
  部屋の肥やしになるくらいならいっそ…。
・行き詰まったときの在庫ネタ。
  ストレス解消にもなるなぁ。
・キャノンはマスコットか?
  白い奴に匹敵すると思います。