電音の工場ブログ

当ブログは…

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

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

2013-01-04

新年の工作 ― LFO for FX rev.2

|  新年の工作 ― LFO for FX rev.2  - 電音の工場ブログ を含むブックマーク はてなブックマーク -  新年の工作 ― LFO for FX rev.2  - 電音の工場ブログ  新年の工作 ― LFO for FX rev.2  - 電音の工場ブログ のブックマークコメント

マイコン自作シンセに便利に適用しようという活動を行なってきた中で、機能をワンチップマイコンに詰め込むものをいくつか企画してきた(no title)。

それをエフェクタに適用したい、ギターエフェクタ用のコーラスフランジャをターゲットとしたLFO機能を担うワンチップソリューションが欲しいというインプットを大塚センセから頂いたのが2010年の1月(エフェクタ用8pin AVR LFO検討 - 電音の工場ブログ - E-Musicグループ)。約1年前に LFO for FX として形にすることができた。

そして大塚センセの試用を経て、追加仕様をいただいていた。

基板を途中まで作ったものの(うりゃ - 電音の工場ブログ - E-Musicグループ)、その後ずっと放置してしまっていた。

このままではイカンと巳年元日から仕様と実装を思い出す作業をして、基板の完成・コードの改修をこなし、なんとかいつもの例会に間に合わせることが出来た。

出来上がりが以下の写真。

http://25.media.tumblr.com/5e11061eb901ed882f49ccead093681c/tumblr_mg2pf6Tb7f1qzm0xlo1_1280.jpg

この実装はしばらく使っていただいて評価待ちということになるが、BBDを直接ドライブする信号を生成できるLFO一体のワンチップもテーマとして健在であり、こちらの開発も進めていきたいと考えている(http://emusic.g.hatena.ne.jp/Chuck/?word=%5BLFO%5D%5BBBD%5D)。

今年もよろしくお願いいたします。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20130104

2012-02-15

うりゃ

| うりゃ - 電音の工場ブログ を含むブックマーク はてなブックマーク - うりゃ - 電音の工場ブログ うりゃ - 電音の工場ブログ のブックマークコメント

風邪が結構長引いて気合が戻るのに時間がかかってる。ここらで気合い入れツイート。ツイートじゃない記事ポスト。

上向きになっているこの勢いで以前、LFO for FX 完成 - 電音の工場ブログ - E-Musicグループ として形にしたエフェクタ用のLFOモジュールの追加仕様版も仕上げるぞ、と決意する寒い朝。

いただいている仕様は、

  • 出力波形は加工した正弦波だけでよいが、正相と逆相を用意する
  • 踏むと固定位相から始まるスイッチを2つ用意する
    • ひとつをONするとLFO波形が単調増加となり
    • もうひとつでは単調減少となる
    • (ほぼ)同時に押されたときの対策を入れる

新しい仕様にあわせてLFO波形テーブルROMを調整した。0~180°で波形が単調増加するようにして、180~360°で単調減少となるような位相の調整ね。

スイッチ部分は固定時間でサンプリングして状態変化(ON/OFF)を取得するのだけど、チャタリング・バウンスの時間がスイッチによってまちまちなのが悩みのタネ。とりあえずは「良い」スイッチを使っておいてソフトウェアの開発を進めておきますか。

ということでソフトウェア開発プラットフォーム作り開始しました。

f:id:Chuck:20120215043919j:image

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20120215

2012-01-30

よっしゃー

| よっしゃー - 電音の工場ブログ を含むブックマーク はてなブックマーク - よっしゃー - 電音の工場ブログ よっしゃー - 電音の工場ブログ のブックマークコメント

ハンダでちょいなちょいなするのはさくっと抵抗なく(いや、抵抗器は使いますよ)出来るんだけど、ケース加工やソフト開発とか準備とか開発環境を整えたりとかそういう段取りが深い奴に対しては腰が重いというか腰が痛いというか、腰が痛いので4000円のバランスチェアに手を伸ばしてみたら(いや、足か)意外と良かったなぁとかそんなこんなで、ここんとこプリアンプとかパルスパターンジェネレータとかAFレベルメータとか新作の試作とかやって、ハンダセラピーは順調な感じに推移して、よっしゃー、いっちょケース加工やソフト開発でもするかという方向を向きつつある。

数日前には秋葉原に行って、大塚センセ本、いわゆる ハンドメイドプロジェクト ver.3 に載っている Reverse DI を作るべく部品を買ってきた。ちょっと大きめの箱 YM-150 にうちに転がってたラグ板で組もうかな、と。大きい箱にしたくせに妙に土地をケチって XLR と TRS のコンボなコネクタなどを買ってきた。そして24mmのホルソーも。これでXLRは怖くない(ハズ)。

もう何年も放置していたFPGAのスターターキットを取り出してきてLEDやら7セグをピカピカさせて遊んだり(開発環境を整えるのに数時間かかりましたがね)。ピカピカはいいけど何作るか考えていないんだけど、まぁ任意波形ジェネレータとかFM音源とかかしら。

上向きになっているこの勢いで以前、LFO for FX 完成 - 電音の工場ブログ - E-Musicグループ として形にしたエフェクタ用のLFOモジュールの追加仕様版も仕上げるぞ、と決意する寒い朝。

ラスボスは暖かい布団。

おーつかおーつか2012/01/31 14:31新しいLFO,うふふ。楽しいなっ。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20120130

2011-02-14

ここしばらく

| ここしばらく - 電音の工場ブログ を含むブックマーク はてなブックマーク - ここしばらく - 電音の工場ブログ ここしばらく - 電音の工場ブログ のブックマークコメント

ここんとこしばらくは部屋の整理に邁進しておるです。

で、部屋がまったく使えない状態、散らかりまくり。

そんななか、「みんなで自らの作業を見せ合う」という怪しい会が催され、行ってきた。そうやって場所と時間をひねくり出して使えない部屋からの逃亡。


実はDATも整理しようと思って出してきて、そしてソニーのDATプレイヤなんぞを持っているので処分するにあたって音を確認していたらやはり音質がいいので処分を取りやめてしばし常用しようと思った矢先に電池ボックスの蓋ツメをとめるプラスティックが割れてしまって、使うにも売るにもイマイチな状態になってしまったけれど、電源アダプタのジャックがEIAJ統一プラグ#1 だったものだから、作業会の前に秋葉原で買ってきて、合わせて単三2本の電池ケースも買ってきてアリゲータクリップで繋いで実験くん。見事にDAT動いて嬉しい。電池ケースに#1プラグをはんだづけして常用しようと思う。


BBDのドライバとLFOをワンチップにする件、実エフェクタではどうなっているのだろうか、ということで YAMAHA の PSE01シリーズ、FL-01 と CH-03 を持ち込んでオシロを借りてパルス計測。depth/rate/(manual) を振ってパルスの周波数を観測してきた。結果は後日。ただLFOがどんな波形で揺すっているのかはパルスを見ているだけではわからなかった。F/V変換器を作って調べてやる必要があるかなぁ。


ESM-2を箱入れしようと通販でタカチのFC-5-20-20を購入。事前に設計しておいて、作業会の現場でケがいてオプティカルセンターポンチの実演まで。しかしあれだ、他の人と話をしながらやっていたら穴をあけないはずのところにまでポンチしてしまった。ポカを避ける段取りが不十分だったなぁ。


これまた作業が止まっているギタマガの回路図採り。作業会はそれなりに集中できるいい場だったので持ち込んだが、時間切れ! くやしい、早々に回路図採取しなくては。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20110214

2011-02-02

BBDドライバその後

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

BBDのドライバの方は実機フランジャのCP周波数を測定しようということにして、しかし部屋が片付かないのでペンディングしている。今は作業するだけの土地がとれない…

実は来週信号処理関係者が集まって巣鴨でうだうだと遊ぶ会が開かれる予定なので、その場にフランジャコーラス(今手元にあるのはYAMAHAのPSE01シリーズのだな)を持ち込んでオシロを借りてその場で測ろうかと…

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20110202

2011-01-30

BBDドライバ w/ LFO さらに

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

ATtiny25/45/85内蔵のTimer1を使い、分周器のついた8bitのカウンタをPLLクロック(64MHz)で動かして、15Hz~16MHzまで矩形波生成できることがわかった(速報 - 電音の工場ブログ - E-Musicグループ)。さらに検討を進める。


前回こんな図面を出した。

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

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

BBDドライバ w/ LFO - 電音の工場ブログ - E-Musicグループ

これは分周比をパラメータ(1, 2, 4, 8, 16)にしてOCR1C値(0~255)に対応するクロックパルスの発振周波数をグラフ化したものだ。logスケールで線形となっている。ちなみに分周比はさらに32, 64, ..., 16384 とすることができて、最も分周すると15Hzまで作ることができる(分周比16384)。


グラフの一本化

パラメータ化されたままでは逆関数の定義ができないし扱いづらいので、定義域をひとつに、グラフを一本化した。

入力を 0~4095 の 12bit に範囲拡張して以下のとおり定義域を場合分けしている。

入力範囲 IN分周比OCR1C値
0~255 (IN[11:8]=b0000)10~255 = IN[7:0]
256~511 (IN[11:8]=b0001)2128~255 = IN[8:1]
512~1023 (IN[11:9]=b001)4128~255 = IN[9:2]
1024~2047 (IN[11:10]=b01)8128~255 = IN[10:3]
2048~4095 (IN[11]=b1)16128~255 = IN[11:4]

これで散布図を描くと以下のようになる。

f:id:Chuck:20110131073422p:image 大きいサイズ

実機でも16MHzまでの発振を確認したが、まぁ、実際使う発振域は 10kHz~1MHz ぐらいでしょう。

ディジタル設定なので得られる値は離散的なものになります。16MHzの次は10.7MHz とか 1MHzの次は969.7kHzとかですね。ある程度OCR1C設定値が大きいほうが値間隔が細かくなります。分周比が1以外のところでは、入力範囲が分周比に応じて飛び飛びになる。例えば1024の次は、ここは分周比が8の領域であり、1032になる。入力範囲は表中のルールで丸められる(510も511も、分周比2、OCR1C値255となる)。

ところで当初使えると思っていたトグルは ATtny25/45/85 の Timer1 の CTC な PWM では使うことが出来ないとわかった。ということで、Fast PWM にせざるを得ないが、これにともなって duty 50% が保証できなくなる。ざっと10kHz~1MHzの範囲で 50%~50.77% になります(duty 最悪値は分周比1、OCR1C=64、OCR1A=32とした984kHz)。これもあまり問題にならないでしょう。CP1 と CP2 が同時にONして、アナログスイッチが筒抜けになることのほうが(音的に)イマイチでしょう。


入力設定値 対 得られる遅延量

クロックパルスの周波数で考えてもピンと来ないので、実際にBBDに適用したときの遅延量(単位 秒)を表してみた。

f:id:Chuck:20110131073424p:image大きいサイズ

入力設定値と得られる遅延量の関係は線形となっていることがわかる。

グラフ中で入力設定値の定義域は16~4095とした。入力設定値16はCPでは2MHzにあたる(その時の遅延量は1.024msec)。入力設定値4095では約260msecの遅延量が得られる。

入力設定値の分解能が最も細かい(分周比が1だから)定義域を16~255とした部分を拡大表示してみると、次の図のとおりとなる。入力設定値255では遅延量は16.32msec となっている。

f:id:Chuck:20110131073423p:image大きいサイズ


得られたグラフの逆写像を利用して、どれだけの遅延量が欲しい時の設定値はいくつにすれば良いか、ということがわかる。

今後は、実際のエフェクトで必要な遅延時間とその変化の度合いを調べ、マイコンで生成できるようマッピングアルゴリズムを考えていく。


ところで精度の話

今回のクロックパルスの生成は ATtiny85 の内蔵PLLに依っている。内部RC発振したものをPLLで逓倍して64MHzが出ているので、温特やら電圧特性やら影響を受けて発振周波数は変化するものと思われる。


ついでに電流値

ICEを接続した debug可能の状態、CPU停止、PLL/PWM系が動いている状況で実測 消費電流は12mAだった。debug可能状態では電流が多めに出るらしいとは聞いているが、現状こんなものということで。いずれ debug wire disabled の状態でも測ってみる。

2011-01-29

速報

| 速報 - 電音の工場ブログ を含むブックマーク はてなブックマーク - 速報 - 電音の工場ブログ 速報 - 電音の工場ブログ のブックマークコメント

ATtiny85 で 15Hz ~ 16MHz の矩形波生成を確認した(うちのオシロだと16MHzは鈍っているが)。二相のパルスが出力でき、さらにデッドタイムも付けられることも確認。しかもこれらはペリフェラルだけで出来て*1CPUはまるまる別のことができる。これならじゅうぶんBBDのドライバになると思われる。

あとは実際のコーラスフランジャに適用するなら Frequency / Depth / Manual と 生成パルス幅 とのマッピングを考える必要があります。

*1CPUが止まっていてもOK

おーつかおーつか2011/01/30 16:21素晴らしい!!
せっかく作っていただいたアンチログ出力付きLFOですが、これに期待して、組み込みはちょっと待ちます。なんつってもドライバが不要になるのが魅力!
16MHzまでは要りませんよ。多分BBDは動かんでしょ、高すぎて。
これまでの機材では、BBDクロックの最高は1MHzでした。だから2MHzくらいまで、矩形波がきれいに出れば、まったく問題無しです。
2MHzならナマらないですよね?
嬉しいな嬉しいな、っと。

ChuckChuck2011/01/31 11:54どうもです。1MHz、2MHzはしっかりした矩形波でしたのでイケルと思います。あとは揺する値範囲と揺すり方をどうしたものか…

2011-01-26

BBDドライバ w/ LFO

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

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


きっかけはtwitterだった。

Ganさんが、

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

no title

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

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

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

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

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

no title

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

2010-12-28

LFO for FX 完成

| LFO for FX 完成 - 電音の工場ブログ を含むブックマーク はてなブックマーク - LFO for FX 完成 - 電音の工場ブログ LFO for FX 完成 - 電音の工場ブログ のブックマークコメント

いろいろあってぐずぐずしたけれど、先週末に(コンパクト)エフェクタ向けLFOビルディングブロック をとりあえず完成とした。

  • マイコンATtiny85を使用して、
  • 電源は+5V
  • 8-bit PWM出力をふたつ備え、一方は正弦波、もう一方は正弦波をアンチログに通した波形を出力する
    • それぞれ値は0~255に正規化してある
    • 波形テーブルのサイズはひとつあたり1Kbyte (8bit×1024)
    • 高いPWMキャリア周波数なので、PWMのフィルタはRCで簡単にしている
  • ひとつのピンをA/D変換に使い、0~5Vを与えるとそれに応じた周波数の波形となる
    • 0→5V : 0.125→32Hz
    • 対数変化表現用に 32bit×128 のテーブルを持つ
  • 空きピンにLEDを付けて周期を確認できるようにしてある
  • 全体のプログラム容量は 3Kbyte / 8Kbyte
    • ATtiny45にもインプリできる
    • もっとテーブルを持てる(要検討:切り替え方法)

使っていたデバイスで、検討の最後にデバッグモードから抜ける際に失敗してしまったのか、それ以降ツールと通信ができなくなってしまった。LFOとしての動作は問題ないのでこのデバイスは、これはこれとしてキープ。

もう一個焼いて試してみなくては。


「それ以降ツールと通信ができなくなってしまった」件

回路の負荷が重くてISPとして機能していないということだとわかった。ジャンパ線で切り離せばOKなはず。

おーつかおーつか2010/12/28 17:41良いですねぇ。早く使わせてください。
フランジャ、作りたいです。
ver.3の内容変更になるかもしれません(また延びる?)。

ChuckChuck2010/12/31 06:55では恒例の(?)「おーつかセンセを囲む会」でお渡しするのはいかがでしょう?グループの方で日程の相談をしましょう。

2010-12-25

LFO for FX 進捗

| LFO for FX 進捗 - 電音の工場ブログ を含むブックマーク はてなブックマーク - LFO for FX 進捗 - 電音の工場ブログ LFO for FX 進捗 - 電音の工場ブログ のブックマークコメント

できた…

詳細は追って。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20101225

2010-12-13

LFO for FX 進捗

| LFO for FX 進捗 - 電音の工場ブログ を含むブックマーク はてなブックマーク - LFO for FX 進捗 - 電音の工場ブログ LFO for FX 進捗 - 電音の工場ブログ のブックマークコメント

前回できなかったはんだ付け作業、プローブピンと内部状態モニタ用のLEDを付け、マイコンATtiny85を挿してICEを繋いでdebugWireで通信できる状態まで持って行った。電源は+5Vのままで。

f:id:Chuck:20101213075812j:image

週末の作業としては上記まで。なかなか没入するだけの時間を取らせてもらえない。

以下は移動時の思考のメモ…

以前に途中まで書きかけのコードがあったけれど、実体と合わないところが見えてきたので書きなおす。

パラメータも見えてきた。

システムクロック(FCPU =1/clk)8MHz
LFO値更新レート(1/Fs)32μsec (=1/31.250kHz = 256./FCPU )
位相アキュームレータフォーマット10.22(符号なし整数部10bit、小数部22bit)
波形テーブル長(NTABLE)1024 ( = 2^10 位相ACCの整数部でインデックス)
LFO 1Hz時の位相アップデート量(kstep) = 2^22 * NTABLE / Fs

システムクロック8MHzとして、256clkでLFOな処理(位相ACCの更新をして位相値から波形テーブルへのインデックスポインタを算出してPWMへ波形出力)する考え。計算が間に合わなかったらまた考える。

計算を楽にするためにはCVをAD変換した値から位相アップデートの量をどのように決めるかにかかってくる。ATtiny85はプログラム領域の容量をたくさん(8Kbyte)持っているのでここを使ってテーブルを持っちゃおう、と。

以前、

  • 0-5V入力で0.1~10Hzぐらい
エフェクタ用8pin AVR LFO検討 - 電音の工場ブログ - E-Musicグループ

という仮仕様で考えていたが、テーブル変化が2の冪乗のほうが都合がいいので、0.125(=1/8)~8Hz に仕様を変更しようかなと考えた。

そしたら、

6オクターブよりは8オクターブのほうがいいぞ

と夢でお告げがあったので、0.125~32Hz にすることにした。

さて、まずはコントロール系のテーブルを作ろうっと。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20101213

2010-12-07

LFO for FX

| LFO for FX - 電音の工場ブログ を含むブックマーク はてなブックマーク - LFO for FX - 電音の工場ブログ LFO for FX - 電音の工場ブログ のブックマークコメント

以前ネタだけ挙げてピタッとそのままになっていた、エフェクタLFO。ようやくはんだ付けして、こんな感じになりました。

f:id:Chuck:20101206044617j:image

残された作業もあって、出力のプローブピンを立てたりしないといけないのだけど。

って、書きながら思ったのだが、今は電源が+5Vを想定して回路を組んであるものを実は+9Vが突っ込まれることを考えなくちゃいけないじゃなイカ。

レギュレータか、電流測ってからツェナダイオード入れておきます。

まぁ、その前にソフトだ、ソフト。

おーつかおーつか2010/12/07 13:36おお! やっとブツの形が見えた! 嬉しいですね。
78L05を外付けでもいいですよ。
というのは、業務機に使う場合、電源は+15V程度になるからです。
それに、CVも5Vで頭打ちにしなければならないし。
ユニット外でやることは沢山あります。
だから電源は気にしなくても構わないでしょう。
早く完成を!!

ChuckChuck2010/12/08 08:02さくっと終わるはずが1年間引っ張っちゃいました。ここで集中して仕上げまっす!

analoganalog2010/12/08 14:33うほ!マイコンLFOが完成したら、Cカーブの呪いから解放されますね!

ChuckChuck2010/12/09 07:23しかしBカーブに抵抗を1本追加してCカーブ的な変化を追求してしまうのでありました。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20101207

2010-12-06

週末のアクティビティ

| 週末のアクティビティ - 電音の工場ブログ を含むブックマーク はてなブックマーク - 週末のアクティビティ - 電音の工場ブログ 週末のアクティビティ - 電音の工場ブログ のブックマークコメント

物理的には以下のような進捗が。

f:id:Chuck:20101206044617j:image LFO for FX (リンク)

f:id:Chuck:20101206044613j:image MIDI2CV5 (ご新規さん)

f:id:Chuck:20101206044616j:image Kobanzame / Kobanzame SDK (リンク)

ほかにはA’シンセのレポジトリからMIDICVをブランチさせてMIDI2CV4として立てたり、Kobanzameと戦うために Ubuntu 8.04 とか 9.04 とか 10.04 と格闘したりとか。

詳細は追って書くつもり。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20101206

2010-11-22A’シンセサイザ ― Analog2.0改

LFO

| LFO - 電音の工場ブログ を含むブックマーク はてなブックマーク - LFO - 電音の工場ブログ LFO - 電音の工場ブログ のブックマークコメント

LFOAnalog2.0 の基板をそのまま利用。

三角波と矩形波をパネルに出して、遅延付きLFO波形には三角波を採用。遅延付きLFO波形はパネルには出さず、内部のみで結線している(→VCA、→VCO1)。

もあもあ2010/11/22 16:20完成おめでとうございます。今回もすごい大作ですね。ぜひ次回のサミットで見てみたいです。

ChuckChuck2010/11/24 06:36長文に付き合っていただき、ありがとうございます。持ち運び用に外装を作りたい気がしてきています。

2010-01-15

エフェクタ用8pin AVR LFO検討

| エフェクタ用8pin AVR LFO検討 - 電音の工場ブログ を含むブックマーク はてなブックマーク - エフェクタ用8pin AVR LFO検討 - 電音の工場ブログ エフェクタ用8pin AVR LFO検討 - 電音の工場ブログ のブックマークコメント

妖しいミーティングから10日。以下の案件をそろそろと始動。

  • 今年のキーワードはVer.3
    • マイコンものもあってもいいんじゃないか
      • マイコンで右から左で使える電圧制御LFO欲しい
        • じゃ、すでに作ったのがあるので改造して作ります
良からぬ企て - 電音の工場ブログ - E-Musicグループ

改造の元はこれ

既存のレポジトリからプロジェクトをブランチしたが、このリビジョンはLFOのモーフィング対応版だった。モーフィングにする前の奴がレポジトリに見つからない。コミットしなかったのかなぁ。

しかしWikiには上げてあったりしてサルベージ。まぁ、難しい内容じゃないので書き直しても良いのだけれど。

求められているのは、

電圧制御で発振周波数が変化するLFO。波形は正弦波と正弦波にアンチログかけたような波形

ブレイクダウンして仕様に落とすと、

  • 0-5V入力で0.1~10Hzぐらい
  • 線形性はそれなり
    • 特性が明らかならばそれでよい

といったところか。

  • 入力制御電圧をA/D変換して取り込む
  • 波形生成にはテーブルルックアップを使う
    • テーブルサイズ?
    • 値更新のサンプルレートをいくつにするか?
      • 現状では16kHz。もっと遅くて良い。
  • 波形出力には64MHzのPWMを使う
  • 別プロジェクトで使ったシグマデルタ変調を入れようかどうしようか
  • PWM出力段のフィルタの設計
  • テーブルサイズ、サンプルレート、シグマデルタの有無を勘案して表計算ソフトで波形データを作る

といったところが実装面でのイッシュー。

RJBRJB2010/01/17 10:31このような便利で汎用的に使える機能が予め書き込まれたAVRチップがパーツショップにも並ぶと喜ぶ人は多そうですね。

analoganalog2010/01/17 23:31個人的にはDepthもあった方が使いやすいのではないかと思ってます。VR使わない場合はVccにつってfull出力にするとか。マイコンpahserは音色メモリーするために実装しました。Megaだったから乗算機つかってしまった…

ChuckChuck2010/01/18 09:29なかなか仕様を決めきれませんが、いい具合で汎用的になればいいですね。目指せ555!?

なるほどDepthの実装も考えてみます。tinyだと実行時間を納めるために脳みそで汗をかく必要があるかもしれません。

2007-05-22

8pin AVR LFO完成(さらに)

|  8pin AVR LFO完成(さらに) - 電音の工場ブログ を含むブックマーク はてなブックマーク -  8pin AVR LFO完成(さらに) - 電音の工場ブログ  8pin AVR LFO完成(さらに) - 電音の工場ブログ のブックマークコメント

RJBさんからいただいたCVでLFO波形モーフィングのアイディアを実装してみた。64レベルのモーフィングが可能となった。モーフィングといいつつその実体は、2つのテーブルの同一位相での比例配分による波形生成である*1。無邪気に掛け算を使っているので、LFO周波数の上限の244Hz近くではきちんと動かなかったり、マイコンがスタックしたりするかもしれないです(テストに使用した可変抵抗器の性能で十分なCV電圧レンジを作れなかった)。

アーカイブ等はこちらのページに置いてあります。tinyLFO.lzh が昨日版の16波形切り替え、tinyLFO12.lzh が波形モーフィング版。

昨日のように波形をキャプチャする元気がなかったので、本日は記事のみで失礼。

追記

あと改善するとしたら、

  • どうでもいい時にはマイコンをスリープさせる
  • もうひとつタイマを動かしてA/D変換トリガとする

あたりかと。現行では無駄にA/D変換が動いている気がするので。


たくさんコメントをいただいたので、以下にてお返事返しです。

RJBさんsaid

わぉ、ちょっとつぶやいたのにもう出来てるし > モーフィング

これはもう作るっきゃないって感じですね!(なぜかTiny45ころがってるし…)

良いアイディアをありがとうございます。ぜひ作ってみて気づいた点をお知らせください~

r0r0さんsaid

すんまへんWinAVRのバージョンは何でしょか?

Tiny2313でメイクできるかしらなんてやったところ名句通りませんでした。

そこでTiny45に戻してメイクしてみるもやはり通りませんでした・・・orz

僕のは20060421です。

フェイズシフタにLFO乗せるのらくだなぁなんて・・・・

WinAVR は 20060421版を使っています。しかし、AVR Studio から作ったプロジェクトの形態になっています。WinAVRのMakefileジェネレータで作ったものと、AVR Studio から gccプロジェクトを作った場合とでディレクトリ配置構成が変わることがメイクできない原因かと思います。

AVR Studio から LFO.aps を読み込む→build と云う流れを試してみていただけますか?

追試するにはまだまだ情報が不十分でご迷惑をおかけします。そのうちfuse情報とかも吸い上げて avrsp互換でも情報をまとめたいと思っています。

takedaさんsaid

うー。RJBさんの、

PWMEG http://www.rjblog.net/archives/2005/e000141.php

PWMEGその2 http://www.rjblog.net/archives/2005/e000142.php

も気になってる記事のひとつなんだけど、PICだったー。

再びRJBさんsaid

EGも簡単にAVR化出来るんじゃないかな > takedaさん

出来ると思います。ATtiny45はPIC12F683に較べてプログラム容量もSRAMも倍なので、さらに楽チンできるかも。ADSRにするにはピンが足りないのですが。


Tiny45って4つ1000円だから、ノイズ用に1発(波形選択はブルダウンしちゃえばいいのかなプルアップかな?)LFOにこれを使ってさらに、EGもTiny45で動いて、さらに、「さんハイ、ペダル」がTiny45で動けば4つ買うぞ。

確かに ATtiny2313 120円というのを見ちゃうと高く感じますね。しかし便利な石ですから4個装備していてもいいのではないでしょうか。

このLFOのノイズモード(使うときはノイズテーブルが選択されるようには抵抗分圧でCVを与える)は、Excelで発生させた256ポイントを回しているだけの物なので、ノイズ音源としてはお勧めできません。以前ATtiny13(V)で製作した版のほうが良いです。ATtiny45 をノイズだけに使うと勿体無さすぎる気もする(=いろいろと仕様拡張しそう)。

EG も 「さん、ハイッ」ペダル も NG も ATtiny45 で実装可能だと考えています。8pin AVRシリーズとしてゆくゆくはラインナップしたいと思いますが、とりあえず次のターゲットは DCO かなぁ…

そうそう、アイディアだけど、周波数の設定、サンハイペダルみたいにタッピングに対応するとか。周波数の設定の電圧が、0Vになったときとそれ以外のときとで、スイッチして、タッピングでスピードが設定できるとか。

これもまた良いアイディアをありがとうございます。ただ現行のものにはもう入らない気がするので、テーブルを絞るか あるいは別の企画として打ち立てたいと思います。


しかかりのプロジェクト多すぎて、今すぐは試せないー。むっきー!

同じ同じ (^^;)

やってみて反応があると、それがまた新しいアイディアを産んでフュージョンしてます。

*1:周波数成分はみていない。フォルマントもみていない。ウェーブレットも使っていない。そんなことをしだしたら筆者の卒論・修論・訪問共同研究 になってしまう(謎)。

ChuckChuck2007/05/22 20:56モーフィング版であれば、波形テーブルの変更タイミングを出力位相0で固定にしなくてもいいな…

r0r0r0r02007/07/28 23:30早速(何ヶ月たっているんだ?!ww)AVRSTUDIO取りに行っています。

ChuckChuck2007/07/30 11:06このLFOは作ってくださる方が多くて嬉しいっす。

2007-03-08

8pin AVR LFO 机上検討3

| 8pin AVR LFO 机上検討3 - 電音の工場ブログ を含むブックマーク はてなブックマーク - 8pin AVR LFO 机上検討3 - 電音の工場ブログ 8pin AVR LFO 机上検討3 - 電音の工場ブログ のブックマークコメント

8pin AVR LFO 机上検討2からの続き。

ここで逆に、任意のADC値からLFOテーブルポインタを1進めるために必要な時間(総クロック数) を算出することを試みる。

仮にADC値が64であるとき、64=64 \times 1 + 0 なので、

総クロック数=256 \times 2^1 + g_1(0)

であり、すなわち総クロック数は 512ck となる。\frac{16M}{256 \times 512} \simeq 122 [Hz] が得られる(検算)。


また、ADC値が67であるとき、67=64 \times 1 + 3 で、

総クロック数=256 \times 2^1 + g_1(3)

である。


一般化すると、ADC=64 \times p + qとして、

総クロック数=256 \times 2^p + g_p(q) = 256 \times 2^p + 2^p g_0(q) = 2^p \{256 + g_0(q) \}

となる。


さてここで、一般化して算出された総クロック数においては 2^p でくくり出されていることがわかる。これは、2^pの分周クロックを使用すれば、カウントすべき値は常に 256 + g_0(q)であることを意味する。

g_0(q)を アドレス64個、データ値は0~255の2のべき乗に合うように整形したテーブルとして持つようにすれば、10bitのADC値から、周波数が低くなるほどに分解能が荒くなりつつ、0.00745Hz(134秒)~244Hz の LFOを実現することができる(はず)。変化カーブは逆ログ(のはず)。

タイマが8bitで256までしかカウントできない場合には、256 + g_0(q)を二つに分けて、odd/even の組を作って LFOテーブルインクリメントすればよい。二つに分けるときに 256+残り と分けると、残りのクロック数が小さいときに処理が間に合わず破綻するので注意。

なお ATtiny45 では1/1~1/16384の分周が使えるタイマがある。しかし64MHzのハイスピードPWMと排他かもしれないので、このあたりは実装フェーズで要確認。今回はとりあえずタイミング生成のアルゴリズムまで示して終了。


(おしまい、8pin AVR LFO 机上検討1から読み直す)

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20070308

2007-03-07

8pin AVR LFO 机上検討2

| 8pin AVR LFO 机上検討2 - 電音の工場ブログ を含むブックマーク はてなブックマーク - 8pin AVR LFO 机上検討2 - 電音の工場ブログ 8pin AVR LFO 机上検討2 - 電音の工場ブログ のブックマークコメント

8pin AVR LFO 机上検討1からの続き。

ところでADC値は10bit(1024レベル)で、これが i = 0, 1, ... , 15 (すなわち n = 1, 2, 4, ..., 32768)にリニアにマッピングされることが望ましい。ADC[9:0] を {ADC[9:6], ADC[5:0]} とビット分割し、上位4bit( ADC[9:0]÷64 の商 p)として i に対応する値を取り出し、同時に余り q = ADC[9:0]%64 を得る。商pで256ckの割り込みが何回になるかを決め、余りqは補正する役を担う。

補正は直線補間でも良いが、ここでは iをパラメータとする補間関数  g_i(q) を定義する。g_i(q)は、g_0(0)=0, g_0(64)=256, g_1(0)=0, g_1(64)=512 ...

といった境界条件を持つ。これより考えれば、iが1増えるとレンジが倍になるわけで、

g_1(q) = 2 g_0(p)g_{i}(q) = 2 g_{i-1}(q)

すなわち、

g_i(q) = 2^i g_0(q)

となる。g_0(q)を(テーブル等で)定義すれば、これに定数を掛けることで補間関数g_i(q)を算出することができるとわかる。

なお現実的に g_0(q)の取りうる値は0から255である。


iに対応するADC値まで書き入れると次表のようになる。

ADC i n f[Hz] 1/f[sec]
001244
6412122
1282461.0
1923830.5
89614163840.014967.1
96015327680.00745134

(8pin AVR LFO 机上検討3へ続く)

2007-03-06

8pin AVR LFO 机上検討1

| 8pin AVR LFO 机上検討1 - 電音の工場ブログ を含むブックマーク はてなブックマーク - 8pin AVR LFO 机上検討1 - 電音の工場ブログ 8pin AVR LFO 机上検討1 - 電音の工場ブログ のブックマークコメント

最近、開発ネタ・妄想がどんどんと増えている。が、まったくこれっぽちも全然実装が追いついていない。ネタ100個のうち実現しているのが1、2個って感じ。

id:Chuck:20060808:p1 で挙げた AVR LFO もその実現していないもののひとつ。半年ぶりに見直したらアルゴリズムを忘れていた。実装はもう3ヶ月先かもしれないが、またアルゴリズムを忘れてはなんなのでメモ。このアルゴリズム*1EGを作るときにも使えるかもしれない。

前提
  • ATtiny45を使用し、64MHzのPWM*2でのLFO出力2系統
    • システムクロックは16MHzが使える
  • コントロールは周波数と位相
    • 片系統の周波数を決め、もうひとつはテーブル参照位相をずらしてreadするだけ
    • コントロールを取得するA/D変換は10bit
  • LFO波形は1周期 256ポイントのテーブルを引く
  • LFOそのものに関しては、
    • レンジとして16オクターブ(出来高で良い)
    • 周波数が低いところでは解像度が粗くてよい

システムクロックが16MHzなので、仮に256ポイントのテーブルをぶん回すと、\frac{16M}{256} = 62.5 [kHz]


256ckごとに割込んでテーブルポインタを更新する場合だと、\frac{16M}{256 \times 256} \simeq 244 [Hz]

512ckごとだと、\frac{16M}{256 \times 512} \simeq 122 [Hz]

1024ckごとだと、\frac{16M}{256 \times 1024} \simeq 61 [Hz]

これを式にすると、f = \frac{16M}{256 \times 256 \times n}


となる。以下に n = 2^i  (i=0,1,2,...,15)となる nf の関係を表にする。

i n f[Hz] 1/f[sec]
01244
12122
2461.0
3830.5
1381920.029833.6
14163840.014967.1
15327680.00745134

(8pin AVR LFO 机上検討2へ続く)

*1:アルゴリズムそのものとマイコン制約や実装上の問題となるべく切り離してメモって置きたいが、なかなか難しいかも。

*2ATtiny45PLLを持っていてPWMのクロックに64MHzを使うことができる。64MHzで8bit PWM時にはPWM周期は250kHz。

2006-01-05

進捗

|  進捗 - 電音の工場ブログ を含むブックマーク はてなブックマーク -  進捗 - 電音の工場ブログ  進捗 - 電音の工場ブログ のブックマークコメント

休みが終わってしまった。

id:Chuck:20051221#p1 で挙げた項目はどれぐらいできたのか。

MFSH の完成(箱入れ)

蜜柑もとい未完。かなり良いところまで作業は進んだ。2006-01-07 の爆音新年会に向けてなんとか作業中。爆音新年会は 現時点*1であと2名様、枠あります。

4069 VCO + PIC NG の(一時的)(アクリル)パネル製作

一時しのぎのアクリルパネルに組み上げることができた。オクターブの調整やらは未だ。NGはさっそく活躍。

Chaotic Wave Generator PWM版 の基板製作

まったく弄れなかった。ATmega88 と LPFを6回路並べるだけなんだが…

VCF (ダイオードラダー、SSM2164) の基板製作

ダイオードラダーのVCFは基板を作って、一時しのぎのアクリルパネルに立ち上げた。フィルタ動作している模様。発振もしている。ノイズや調整されていないVCOからパッチしてミヨミヨと遊んだ。

SSM2164 はブレッドボードに火を入れることもできなかった。

それ以外でできたもの
  • 電源分配箱
  • シンセ用電源に +5V出力の追加
    いや何のことは無いACアダプタを同一スイッチで使えるように小細工しただけ、と思ったらACアダプタが壊れた。+15Vとショートさせてしまったのだろうか。さっきまで +5V出ていたのが 0.6Vしか出ていない。また秋月で買ってこなくては…
  • CV発生冶具(id:Chuck:20060102#p1)
写真(再掲)

recent works

*1:2006年1月5日 07:00 時点