ようこそ!JQ2RVNのブログです。
PICを使っていろいろな物を作ろうと画策中です。
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
dsPICでADCのコーディングをしてて、ドつぼにはまった。
dsPICは結果を保存するバッファが16ある。 自動的に複数のチャンネルをスキャンしたり、 一定時間ごとに何点かの値が取得できて便利なんだけど・・・ データの入り方でハマった。 今回は4つサンプルを採って、それをFIR & Decimationしようとしていた。 ここで何も考えず、InputSignal[i]=ReadADC12(i);としてしまった。 FIRDecimate()関数に渡す配列は、添え字が大きい方が古いデータとなる。 つまり、InputSign[0]が最新で、InputSign[3]が最古である。 しかし、ADCのバッファは、ADCBUF0が最古でADCBUF3が最新。 したがって、上のように配列に転送すると、新旧が逆転する。 これじゃ、正常にデータが出てくるわけがない! 結局Cで作っても良かったが、アセンブラを組んで新旧がそろうようにした。 次のハマり。 MPLAB SIMで、ADCの入力をシミュレートしていた時の話・・・ Excelでデータを作ったが、ここが曲者である。 DSPとの親和性を考え、ADCの数値は固定小数点で入るように設定した。 そして、単純にExcelでも固定小数点に変換して出力した。 しかし、Excelから出した値と、ADCのバッファに入っている値が違っている。 ということで、気がついた。 入力する値は、ADCモジュールそのものが得た値でなければならないことを。 ADCが12ビットの場合、次のような流れで処理される。 ADCモジュール →4ビット左シフト → +0x8000 → ADCBUFx たとえば、モジュールから1が出力されたら、 0x0001 → 0x0010 → 0x8010 と変換される。 なので用意するデータは・・・ =INT(2048*x+2048) とExcelで行っておくだけでよい。 PR |
カレンダー
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。 まずは、本家を解析しています。
カテゴリー
最新記事
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
ブログ内検索
最古記事
(05/18)
(05/19)
(05/19)
(05/20)
(05/21)
アクセス解析
|