電音の工場ブログ

趣味の電子工作を中心としたブログです.音モノの工作が多いです.

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から読み直す)