なぜTADの設定が可能なのか?(無駄話)

下らない思い違いで半日つぶしてしまった。
A/D Converterの制御レジスタにADCON3というのがあり、ADCON3<12:8>つまりSAMC4:SAMC0でTADのサイクル時間を設定できる(と思いこんでしまった)。しかしTADはA/D変換のクロック周期で、12周期でA/D変換が完了する。この値は固定なので「何でTADを外部から設定するのか?」と悩んでしまった。


SAMC4:SAMC0は"Auto-Sample Time bits"と書かれているとおり、自動サンプリングするとき、A/D変換終了から次のA/D変換開始までの待ち期間をTAD単位で指定するものであって、A/D変換期間を指定するものではない。


ちなみにSAMC4:SAMC0の指定には、入力チャンネル切り替え時の待機時間保証の意味がある。
SAMC4:SAMC0指定による時間が短いとアナログ入力値が正しくサンプル&ホールドされず、また長すぎるとホールドした電圧が下がり、いずれもA/D変換結果に影響がある。影響が出てもA/D変換自体は正常に実行されるので、気が付かないと後でエライことになる。
影響の度合い、というか正しい設定値はTCYに依存する。プログラムは1/TCY=FCY=16[MHz]や15.5[kHz]で動いていても、アナログ回路は無関係に動作する。


単一チャンネルを単発でA/D変換するなら、SAMC4:SAMC0の設定は無効だ。サンプル時間は別途プログラムで保証することになる。
この時間はリファレンス・マニュアルだと「TACQ: Acquisition Time = min 750ns」と規定されているが、PIC24FJ64GA004のデータシートだと「tSAMP: Sample Time = 1TAD」と定義の仕方から大きく変わっている。推測だがサンプル&ホールド回路が改良され、常に1TADで完了するようだ。ただし、SAMPビットをセットしてから実際のサンプリング開始まで2〜3TADの遅延がある(tPSS参照)。