2021年1月2日土曜日

PICのADC2格闘 その3

 前回の話でADRPTとADCRSの設定については解決したはずですが、
それでもまだ、出力される値が何か変なのでした。

(3)Errataの問題

ここで念のため、ERRATAを確認してみることにしました。
今までの経験で、ERRATAの不具合にぶつかったことはほとんど無いので、
あんまり期待はしていなかったわけですが・・・・・・

すると、なんとADC2には3つの不具合が載ってました。
この内、ADGOビットに関する不具合はリビジョンA2までで、
私が使ってるリビジョンA3の石では修正済み。

2つ目の不具合はスリープ動作関連ですが、
私はスリープ機能を使っていないので、これも問題になりません。

最後はA/Dコンバーターの基準電圧として、
PIC内蔵の定電圧源(=FVR)を使用する場合の不具合。
これは完全にヒットです。
というか、PICの内蔵A/Dコンバーターを使う上で、
基準電圧源を外付けする人が どれだけ居るのやら・・・・・・・
大概の人は、この不具合がヒットすると思われます。

で、実際に内容を確認してみると、基準電圧にFVRを使用すると、
データーに誤差が出るらしい。
どれくらいの誤差とかまでは記載無いので、ちょっと曖昧ですね。
対策としてはtADを8μs以上にすること、だそうな。

えーと、マニュアルの434ページを見る限り、8μsを超える設定ってNGなんですが・・・・
頭を抱えつつ、今度は558ページの仕様を確認すると、
tADの設定範囲は1~9μsとなっています。
ということは、8~9μsの値に設定すれば大丈夫ということか??

とりあえず、その値に直してみようと手をつけたところで、1つ気付きました。
A/Dコン用の専用発振器が使えないやん。
ケース バイ ケースでメインクロックを変更できるようにと、
A/Dコンバーターの動作クロックに専用発振器を使うようにしてました。
しかしこの発振器、周波数をユーザーが変更不可なのです。
この専用発振器を使った場合のtADは約2μsだそうな。
なのでERRATAの対策を行うには
専用発振器を諦め、メインクロックを使うしかない
と。

仕方無いところなので、メインクロック使用に切換え、
tADを約9μsに設定いたしました。

で、結果はどうかなと・・・・・・・ 変わらん。orz

(4)アクイジョンタイムとプリチャージ時間

ここから色々と試行錯誤しているうちに気付いたのですが、
平均化の為の積算回数が増えるほど、出力される値が減っていくとな。
誤差が出るのではなく、値が減っていくんですね。

そこで、積算前の値も同時に見比べてみることにしました。
以前の記事でADRESの存在意義に異を唱えておきながら、
まさかここでADRESが必要になるとは・・・・・・・orz

気を取り直し、ADRESの値と平均化処理後の値を同時にモニターしてみると、
ADRESの値が だんだん減っていってる!!
そりゃー、平均化後の値が少なくなってしまうわけですね。

ここからがまた試行錯誤になっちゃったわけですが、結論としては、
アクイジョンタイムとプリチャージ時間を設定するとダメ。

Errtaに不具合が載っていないということは、
石自体には問題無いということなんでしょうね。
ということは、他の設定とかも絡んでる可能性が大ですね。
しかしこれ、ADC2の入力部を詳しく把握する必要があるので、
現時点ではスルーすることにします。
当然のことながら有効な機能だから実装されてるわけでしょうから、
ちゃんとした使い方が解れば使用していきたいところなので、
その内 時間があるときにでも手を付けてみることにしましょう。

 

ということで、これでやっと想定どおりの動きをしてくれるようになりました。
長かったぁ・・・・・・・・

余談ですが、PIC16F18456のADC2、ADACCが24bit長に拡張されてました。
さすが問題あると気付いてたようですね。(笑)
おかげで12bitのA/Dコンでもガッツリ積算できます。
むしろこっちの方が128回まで積算かけられる分、18F47K40より優秀という話に。
ちなみに128回というのはADCRSから来る制限。
ADACCが24bit長なら12bitのデーターは4096回まで積算できるはずですが、
あいかわらずADCRSが3ビット長なので、2^7 = 128 という上限になっちゃってます。

実はそれよりも、PIC16F18456のErrataが出てきてない方が気になってます。
今までの例からチップに不具合が無いとは思えないので・・・・・・
早くErrataがリリースされて欲しいなぁ。

0 件のコメント:

コメントを投稿