こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PIC16F88のA/D変換の時間設定について質問です。最近PICを始

PIC16F88のA/D変換の時間設定について質問です。最近PICを始めたばかりの素人です、色々な書籍を読みあさりC言語でプログラミングしていますが、PIC16F88のA/D変換を利用しステッピングモータの回転数を制御するプログラムを作りました。そこでアナログからデジタルに変換する待ち時間が必要とわかりとりあえず仕様書に19.72μSの待ち時間らしき時間がありましたので使用しましたがこれが正しいのかわかりません。どうぞアドバイスお願いします。
以下プログラムの抜粋です。コンパイラはCCS社のPCMを使用しています。

#include<16f88.h>
#fuses HS,NOWDT,PUT,NOPROTECT,NOLVP,NOBROWNOUT,
#device ADC=10
#usedelay(clock=10000000)
途中省略
void DEGVR()
{
///////////////////////VR→デジタル計算///////////////////////
set_adc_channel(2);//A/D変換チャンネル設定
delay_us(20);//変換にかかる時間19.72μs
vr = read_adc();//A/D変換レジスタリードしvrへ
途中省略
main()
{
////////////////////////vr設定///////////////////
setup_adc_ports(sAN2); //アナログポート設定
setup_adc(ADC_CLOCK_DIV_32);//アナログ変換クロック設定
途中省略

投稿日時 - 2010-07-12 22:28:17

QNo.6034174

暇なときに回答ください

質問者が選んだベストアンサー

こんにちは。
一言でA/D変換時間と言いましても、PICの場合は、サンプルホールドコンデンサの充電待ち時間と、A/D変換待ち時間の2つの待ちが必要です。

A/Dコンバートの流れとしましては、以下のような感じになるかと思います。

 A/Dコンバータのチャネル選択
   ↓
 コンデンサの充電待ち(固定時間)
   ↓
 A/Dコンバートスタート(ADCON0レジスタのGOビットに1をライト)
   ↓
 A/Dコンバートの終了を待つ(先ほどのビットが0になれば終了)
   ↓
 結果を取りだす
   ↓
 最初に戻る

このうち、後半のA/Dコンバートの終了待ちは、レジスタの監視で事足りるので問題ないのですが、前半の「コンデンサの充電待ち時間」の方が、今ひとつハッキリしなくて、何というか面倒くさい感じです。

データシートに載っている、何やらややこしい計算式は、この充電待ち時間を計算するものです
なお、そこで示されている、19.72μsというのは、インピーダンスが推奨値になるよう組まれたアナログ回路を、周囲温度が50℃の状況下で使用する場合の計算例です。

頑張って計算して求めるのが理想と言えば理想ですが・・・。
実はこれは最小値でして、これ以上の長さであれば、ええ加減で大丈夫です。
よほどパフォーマンスを追及するとかでもなければ、50μsとかテキトーに決めていいんじゃないでしょうか・・・。

投稿日時 - 2010-07-15 10:53:38

お礼

pyonmaeさま

19.72μSは条件があったんですね、私の待ち時間だとやはり不足のようですね
50μSで設定します。ありがとうございました。

投稿日時 - 2010-07-18 23:38:09

ANo.2

このQ&Aは役に立ちましたか?

22人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

PICは使った事がないので的外れな事を言ってるかもしれませんが、A/D変換待ちならば普通は一定時間のウェイト処理ではなくて変換完了割込みで処理するか、そうでなければ変換完了ステータスレジスタの状態を見ると思います。

投稿日時 - 2010-07-13 09:50:18

お礼

D-Matsuさま

割り込みで処理する方法もあるんですね、参考になりました。今回はとりあえず50μSの待ち時間で
解決しそうです。

投稿日時 - 2010-07-18 23:40:16

あなたにオススメの質問