この前秋月電子をふらふらしていたら YAMAHA YMZ294 なんてのがあったんですよ。
データを見てみると3系統の方形波と1系統のノイズ、エンベロープ発生器を内蔵…ってAY-3-8910かいなと突っ込みたくなる内容のIC。それにしてはピン数少ないけど。
AY-3-8910は高校の時にPC-9801のCバスから8255かなんかを経由して接続するボードを作りましたよ。回路図も基板も先生が作ったんだけどw
DOS用のMMLコンパイラと常駐型の演奏ソフトも作ったりしました…懐かしい。
で。
買おうかなーと思ったんですが結局買わずに帰宅(ぉ
なんでかというと、今は20MHzで動かせるPICというすごいマイコンが手元にあるからなんだぜ!
こんだけ速けりゃソフトシンセ的に方形波を合成するくらい朝飯前だろ。
ついでだから3和音じゃなくて6和音くらいにしてデューティ比も変更可能にして、CCPのPWM機能をD/Aコンバータ的に使って内部でミキシングして、あわよくばリバーブとか掛けられるようにして、コンパイル済みのMMLをEEPROMに書き込んだりI2Cで渡すと勝手に演奏してくれるような1チップシーケンサーとかできちゃいそうだぜひゃっほう!
などと妄想してブレッドボードで仮組開始。
なんかうまく動かなかったんですが20MHzのセラロックを普通にケーブルで配線してたので、これのせいで無理なんだろと思ってセラロックとパスコンだけを乗せたドータボードのようなものを作成してブレッドボードに挿入。
んで、まあ書き込んだプログラムが動くところまでは行ったんですが…
結論からいえば無理でした(ぉ
よく考えりゃわかったことなんですが…
サンプリングレート44.1KHzの信号を作ろうと思ったら1/f=22.68μsごとに信号を作らないといけません。
んでもってPICが20MHz駆動で、1命令の実行に4クロック掛かるので4/f=0.8μs…。
TMR0割り込みルーチンに書いた信号発生プログラムの命令数をざっと数えたら100行くらいあったので、80μs。
はい処理追いつかないー(ぉ
しかも複数チャンネルを処理するとなると割り込みルーチンでループかかるのでチャンネル数倍になるので…以下略。
しかも44.1KHz周期で信号を処理すると高音域の周波数精度がぜんぜん出ません。
Excel使って試算してみましたが400KHzくらいの周期で割り込み処理させないと精度がヤバい感じでした。
なんというかダメすぎるw
発振用のカウンタとして16ビット使ってたんですが、少しでも処理を軽くするために8ビットに…してみましたが、それでも処理が追いつかない上に音程の精度がますますうんこにw
dsPICとかAVRだともっといけるのかなぁ…。
でもライタもってねーよw
素直にYMZ294買ってきて遊ぼうかな…。