「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



相変わらずMEGA164のDDSファンクションジェネレータ。

回路周りは大体よさげとして、ソフト周りで1個残って
いた課題。位相がうまく保たれないって件について
プログラムを弄りなおしてみる。

位相の角度をコマンド入力したら、2ch側の位相を
1ch側に対してオフセットつけるという計算処理。

んで、しばらく考える。指定した角度を、プログラム中
で使用している内部変数(もしくはレジスタ)で扱って
いる情報フォーマットに変換する計算処理をモヤモヤと。


最初、入力した角度から角速度に、角速度から位相情報
にと換算していかないといかんのだろうとか思って、
落書き帳であれこれ式書いたり、あーじゃないこーじゃない
と考えていた。
また割り算が必要になるんじゃね?とか考え始めちゃって、
クロック数的に厳しいんだよな…とか。

だけど、よく考えたら角速度(の積分値)じゃなくて
角度そのままが位相なんジャン!とかマヌケな自分の
脳みそを改めて認識して一安心。


内部では、1波形360度を1024点で表現し、これに
小数部20ビットを付加した情報で扱っているので、
1024を360で割った値を整数部12ビット、小数部
20ビットの計32ビット(4バイト)でテーブル化
すればok。

まぁテーブル化しなくても、掛け算ライブラリ使って
「1度」に相当する位相角(定数値)に入力値を
掛ければ求まるんだけど、メモリはいっぱい余ってるし、
処理クロックも少なくて済むから、定数テーブルで
済ますことに。


とりあえずこんな感じでプログラムは直した。
アセンブルしてみたら、8KBにも至らない状態。
MEGA164でも50%使ってない。

さて、IDEのソフトウェアシミュレータで想定どおり
動くかどうか見てみよう。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« 判明 とりあえずで... »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。