メモ CV発生冶具の修整
メモ CV発生冶具の修整
詳細はあとで書く
id:Chuck:20060102#p1 で披露したCV発生冶具だが、ゼロが綺麗に出ていないのが気になっていた。
よくよくAVRのデータシートを見直すと、9bit PWMで値ゼロというときには 1/512 のパルスが出ていることになっているようだった。これでは完全なゼロになっていない。
これを回避するにはPWMの反転出力を使えばよいとわかった。値ゼロを出したいときにはPWMの値に511を指定すれば、512/512 の波形の反転が出てゼロとなるというわけ。
さっそくプログラムを書き換えて、以下のような感じになった。
9-bit PWM版
表示 | 電圧 |
---|---|
0 | -0.0023 |
1 | 1.0061 |
2 | 2.0020 |
3 | 3.0029 |
4 | 3.9990 |
5 | 5.0000 |
-0.0023V というのはPWM後フィルタのオペアンプのオフセットかな?
PWMは100ステップを1Vとして、値500が5Vになるようにしている。微妙なサジ加減の補正を加えたりしちゃったりなんかしていて、該当部分のテーブルは以下のような感じ。510をTOP値にしちゃってもいいかもしれない。いずれ実験してみよう*1。そのうちきちんとまとめてコード公開できるといいなぁ。
struct { uint16_t pwm; uint8_t led; } tbl[] = { { 511 - 0 , 0x00 }, { 511 - 100 + 0, 0x01 }, { 511 - 200 + 1, 0x03 }, { 511 - 300 + 1, 0x07 }, { 511 - 400 + 1, 0x0f }, { 511 - 500 , 0x1f }, };
*1:実はきちんとISPまわりのハードを組んでいなかったことが発覚。当初ICEでいじっていたためと思われる。今回はいちいちATtiny2313をはずしてwriterに持っていって値の試行錯誤をしていた。