電音の工場ブログ

当ブログは…

自作エフェクターシンセサイザ製作のネタや開発覚え書きなど、筆者の電音活動を記録しています。お探しの記事が見つからない方は、検索カテゴリ一覧をご利用ください。

スパマーが来訪すると、ときどきコメントをはてなユーザのみに絞ったり開放したりすることがあります。

2011-01-26

BBDドライバ w/ LFO

| BBDドライバ w/ LFO - 電音の工場ブログ を含むブックマーク はてなブックマーク - BBDドライバ w/ LFO - 電音の工場ブログ BBDドライバ w/ LFO - 電音の工場ブログ のブックマークコメント

BBDドライバ with LFO が、机上検討ではなんとなくいけそうな気がしてきました。


きっかけはtwitterだった。

Ganさんが、

synth-diy ML にウェーブテーブルオシレータつくるぜスレッドができててすげー面白そうなんだが…

Ganさんのツイート: "synth-diy ML にウェーブテーブルオシレータつくるぜスレッドができててすげー面白そうなんだがもう昼に切り替えねばならない。あと15分でメシおわらせてシャワーあびてヒゲそらんとならん"

とツイート*1していたので見てみたところから始まる。

最近目が疲れるので英語は苦しいのだが、ざっと1分でスキミングした理解によれば、ROMに波形データ書いておいて、MIDIノートのピッチに合わせて回して読みたい、マイコンを使いたいということのようだった。クロッキングはどうするんだ?というあたりから話がそれたのか、アセンブリ言語だ、FPGAだという話にも飛んでいた。残念ながらフェーズアキュームレータでDDSという話には行かなかったようであったので、私としては追跡をやめた。

いやー、ときどき読むデータを飛ばさないと高音で苦しいでしょう。真面目に1周期分のROMテーブルを全部読み出していたら高音ではずいぶんと高速クロックになってしまう。どうしてもやりたいならマイコンからはピッチ周波数を出して1周期分のアドレス数だけPLL LSIで逓倍したクロックでカウンタ回してアドレッシングするのが無難じゃね?とか思うわけであった。

しかしこの問題は、実は、私にも無関係とは云えない。

とはいえATtiny45BBDドライバを作ろうとすると似た問題に当たるんだよね。

Chuck Timberさんのツイート: "とはいえATtiny45でBBDドライバを作ろうとすると似た問題に当たるんだよね。 RT: @dennon_no_kouba: スキミングしてみましたが「うーん」な感じでした。 RT: @analog20: synth-diy ML にウェーブテーブルオシレータつくるぜスレッドが&quo

BBDモジュール - 電音の工場ブログ - E-MusicグループシンセBBDモジュールについて言及したが、そのなかでマイコンBBDドライバをできないかという点にも触れており、コメント欄でも燃料を投下していただいていた。記事を書いた時点では 10kHz から 1MHz までをひとつのスキームでやるのは難しいという印象だった。すなわち 分周したクロックアウト のやり方と タイマで割り込んでポートをON/OFF というやり方を発振周波数によって切り替えることになるかなぁと考えていた。

が、ちょっと考えればわかることだったが、Timer1 を PCK*2で動かして CTCモードにしておけば OCR1Cの値をトップ値としてカウンタをリセットできる。PWM A/B をトグルで使えば64MHzのクロックをカウントしてパルスを出せるはず。タイマに供給する PCKの分周比 と タイマクリアのトップ値(OCR1C) と コンペア値(OCR1AまたはOCR1B)をテーブル管理して、LFOの周期でゆすりながらPWMしてやれば 10kHz~1MHz が生成できるかも。PWMの波形生成はトグルモードにしてやれば値管理も楽。しかも OC1A/OC1A_n の二相出力だし、dead timeも付けられる。これらは全部マイコン内部のハードウェアモジュールがやるのでソフト側ではLFO関連処理に集中できる、と。

とりあえずPCKの分周比とトグルモードのPWMにしてBBDドライブ用のパルスを生成するとこんな感じの周波数になりそうですよ、と。

f:id:Chuck:20110125160403p:image 大きいサイズはこちら

さっそくテスト用にコードを書き始めました。

目下の問題は、LFOの周波数だけじゃなくて Depth と Manual もマイコン側で演算しないといけないね、というところ。幸いにも ATtiny48/85 は A/Dコンバータが豊富なのでピン数は足りる。ていうかぎりぎりぴったり。A/D 3本(Frequency, Depth, Manual)、CP1/CP2 (OC1A, OC1A_n)、電源、GND、RESET。8本ぴったり。

Depth と Manual の変化幅も問題で、結局 美味しい値はどうなのか、そのときクロックパルスはいくつだったらいいのか、といったあたりを探らなくてはいけません。

とりあえず手元にケースが壊れてなかばジャンクのYAMAHA PSE01シリーズ、FL-01 があるのでオシロで当たってみましょうかねぇ…

*1:twitterのstatusを引用するのに良い はてなモジュールはないのかしら?

*2PLLクロック、最高で64MHz