忍者ブログ
ようこそ!JQ2RVNのブログです。 PICを使っていろいろな物を作ろうと画策中です。
[1] [2] [3]
×

[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
今回も16bit PICのアセンブラ命令をまとめていきたいと思います。
今回はMOV命令です。
順番的には逆のような気もしますが・・・(^^;;


一覧:
MOV{.B} f {,WREG}
MOV{.B} WREG, f
MOV f, Wnd
MOV Wns, f
MOV.B #lit8, Wnd
MOV #lit16, Wnd
MOV{.B} [Ws + Slit10], Wnd
MOV{.B} Wns, [Wd + Slit10]
MOV{.B} Ws, Wd
MOV.D Wns, Wnd
MOV.D Wns, Wnd
以上の11形式があります。
多いですね~


MOV{.B} f {,WREG}
fで指定されたアドレスの値をWreg(W0)またはfに格納します。
fは13ビットアドレスですからNear領域のみ示せます。
WREGを省略するとf → fとなり、移動はなにもされません。
一見意味がないように見えますが、ステータスレジスタは変化します。

なので、fの値が0かどうかなどの判定に使えます。

MOV{.B} WREG, f
上記の逆です。Wreg → f


MOV f, Wnd
f で指定したアドレスの値を、Wndに格納します。
機械語では、1000 0fff ffff ffff ffff ddddなので、f は15ビットしかないように見えます。
しかし、この命令はワード専用(16bit)なので、
ファイルレジスタのアドレスは必ず偶数になります。つまり0ビット目は0です。
この0を付け足すと16bitになりますから、データメモリ全域が指定できます。
(ffff ffff ffff fff0のところにアクセスする)
なお、アセンブラ上では元のアドレスのまま書けば、アセンブリのときに変換してくれるようです。
(27FEにアクセスするときは、13FFとせず、27FEのまま書けばいいということ)

MOV Wns, f
上記の逆です。Wns → f


とりあえず、直接アドレッシングタイプは上記4つです。
その他は、次回以降に・・・


忍者ブログ [PR]
カレンダー
03 2017/04 05
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。
まずは、本家を解析しています。
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
バーコード
ブログ内検索
アクセス解析