* てきとーな、DDSっぽい波形発生器
PICとR-2Rラダー回路でDDSっぽいのを組んでみた。



プログラムはこんなの。
とりあえず1kHzの正弦波を出してみたが、当然、波形は自由自在だ。
手持ちのPIC16F648Aを内蔵オシレータにて4MHz駆動。サンプリングレートは音声帯域なら無駄に高い500kHz。更に、手持ちの12MHzのオシレータをつけて1.5MHzになった。
16MHzを越えると、1kHzの波形を出力するコードが4kwordを越えてしまうので、今の手持ちの石では対応できなくなる。ぎりぎり16MHzの場合のサンプリングレートは2MHzとなる。
なにしろ処理が単純(面倒なことはパソコンで済ませてあるだけだが)なので、サンプリングレートは(CPUの能力の割には)高い。
高いサンプリングレートを生かして、PDMっぽい処理(誤差拡散?)で低いbit数を補ってやるといいかも。
PIC16F88なら内蔵オシレータの周波数を変えられるから、それで出力波形の周波数を変えられるだろう。
また、プログラムエリアの自己書き換えができる石であれば、動的にプログラムを生成してやることもできるだろう。この場合、発生波形の形状や周期の自由度は極めて高い。周波数などの変更に時間がかかるであろうのが難点。(PIC16F648Aの4Kwordのプログラムエリアを秋月ライタで書き換えるのに1分かかるぐらいだ)
今後の課題
・データ作成ルーチンで誤差拡散を行えるようにする。少数部分を積み上げればいいか?→やってみた
・同、量子化bit数を故意に落とせるようにする→やってみた
・簡単なローパスフィルタをつける
参考資料メモ
ディザ信号付加によるADコンバータの性能改善
http://www.national.com/JPN/an/AN/AN-804.pdf
D-Aコンバータの高域特性を改善する高域特性劣化のメカニズムと3つの対応策
http://www.ednjapan.com/content/issue/2006/07/content04.html
#電子工作 #途中経過
create : 2006/08/31 (Thu)
update : 2006/08/31 (Thu)



プログラムはこんなの。
lp movlf d'255', PORTB movlf d'255', PORTB (略) movlf d'252', PORTB movlf d'251', PORTB movlf d'251', PORTB (略) movlf d'255', PORTB movlf d'255', PORTB goto lp endデータはRubyスクリプトにて作成。
とりあえず1kHzの正弦波を出してみたが、当然、波形は自由自在だ。
手持ちのPIC16F648Aを内蔵オシレータにて4MHz駆動。サンプリングレートは音声帯域なら無駄に高い500kHz。更に、手持ちの12MHzのオシレータをつけて1.5MHzになった。
16MHzを越えると、1kHzの波形を出力するコードが4kwordを越えてしまうので、今の手持ちの石では対応できなくなる。ぎりぎり16MHzの場合のサンプリングレートは2MHzとなる。
なにしろ処理が単純(面倒なことはパソコンで済ませてあるだけだが)なので、サンプリングレートは(CPUの能力の割には)高い。
高いサンプリングレートを生かして、PDMっぽい処理(誤差拡散?)で低いbit数を補ってやるといいかも。
PIC16F88なら内蔵オシレータの周波数を変えられるから、それで出力波形の周波数を変えられるだろう。
また、プログラムエリアの自己書き換えができる石であれば、動的にプログラムを生成してやることもできるだろう。この場合、発生波形の形状や周期の自由度は極めて高い。周波数などの変更に時間がかかるであろうのが難点。(PIC16F648Aの4Kwordのプログラムエリアを秋月ライタで書き換えるのに1分かかるぐらいだ)
今後の課題
・データ作成ルーチンで誤差拡散を行えるようにする。少数部分を積み上げればいいか?→やってみた
・同、量子化bit数を故意に落とせるようにする→やってみた
・簡単なローパスフィルタをつける
参考資料メモ
ディザ信号付加によるADコンバータの性能改善
http://www.national.com/JPN/an/AN/AN-804.pdf
D-Aコンバータの高域特性を改善する高域特性劣化のメカニズムと3つの対応策
http://www.ednjapan.com/content/issue/2006/07/content04.html
#電子工作 #途中経過
create : 2006/08/31 (Thu)
update : 2006/08/31 (Thu)