PICマイコンを使って音を出したいの私
大学で「なんか適当に電子工作してきてねーじゃないと単位あげないよ」とか言われた。単位がもらえないととても困るので、電子工作をすることになりました。
せっかくなので音が出る機器を作ろうと思って秋月でいろいろ見ていると「YMZ294」なる音源チップを発見!これを使うことにする。
目標はMML記法のようなものをコンピュータから入力して、それをマイコンにより制御されたYMZ294で再生すること。
MML記法をそのまま命令メモリに載せるのは設計として気持ち悪すぎるので、
- MML記法により書かれた楽曲データを、再生しやすい形に変更する
- 楽曲データは外部メモリに保存
- 外部メモリから命令をフェッチして、再生を制御する
という形式にすることにした。
でまあ、それが実現可能かどうかを調べるためにパーツの仕様を見ているところ。
音源チップに必要な入力は、
- データ線8本 (D0~D7)
- アドレス・データセレクト (A0)
- ライトイネーブル (/WR)
- チップセレクト (/CS)
- リセット (IC)
で計12個。
チップセレクトっていうのが何なのか良く分からないが、タイミング図を見た限りでは、他のラインの入力タイミングを作るためにあるみたい。
ところで、PIC16F84Aでは最大クロック周波数が20MHz、一命令を終えるのに必要なクロックが4*1だから、命令ごとに200nsは空くことになる。
いっぽうでタイミング図で必要とされている時間はせいぜい40nsなので、1命令遅れさせて出したならYMZ294のタイミングに引っかかることはないわけだね。
これだけ余裕があると、わざわざ/CSと/WRを分ける必要がない(と思う)ので、/WRと/CSとは同じ線で繋ぐことにする。
とすれば、必要な線は11本。
PIC16F84Aの出力は12個。うち一つはメモリと音源チップのどちらを操作するかの制御に利用しそうなので、これでギリギリってことです。
とはいえ、/WRが入ってなければ音源チップには影響ないので、そこは制御しなくてもいいかも知れない。
まあ、安全性ってことで、/WRにはその制御線とPICからの出力とのANDを取って入れることにする。
PICについての説明は、ここ↓
http://www.hobby-elec.org/pic2.htm
がわかりやすすぎて、本を買ったことを少しだけ後悔した。
*1:パイプラインを考えないとさらに倍