今回からADコンバータについて説明します。
ADコンバータとは?
前回までの記事では、PWMを説明するために無理やり感満載って感じでタイマーにPWM機能を実装しました。
今回も最初からそんな雰囲気が漂いますが、気にせず進めましょう!
ところで、タイトルにある「ADコンバータ」ってどのようなものなのでしょうか?
ADコンバータそのものの説明の前に、基礎編で製作した回路についてもう一度確認してみます。
基礎編のスイッチ回路では、スイッチとプルアップ抵抗をPIC12F1822のピンに接続して、プログラムでスイッチの状態(OFFかONか)を読み取りました。
この回路では、RA3ピンの状態が0Vか5Vかを調べて、スイッチのOFF/ON状態を読み取っています。
つまり、上の回路ではプログラムで2種類の電圧値を読み取っていたわけです。
ピンの電圧 | プログラムで 読取る値 | 意味 |
---|---|---|
5V | 1 | ピンの電圧が5Vの時はスイッチがOFFであるため、この時は「スイッチOFF」と認識する |
0V | 0 | ピンの電圧が0Vの時はスイッチがONであるため、この時は「スイッチON」と認識する |
ここで注意点があります。上の表ではピンの電圧が5Vと0Vのみを示しましたが、例えばピンの電圧が0.5Vなど、中途半端な値になってしまった場合はどうなるのでしょうか?
このような中途半端な電圧のときは無理やり0か1として読み取ります。
PIC12F1822の仕様では、プログラムで読み取る値は、ピンの電圧に応じて以下のようになります。
ピンの電圧 | レジスタの値(RA3) |
---|---|
2V 〜 5V | 1 |
0.8V 〜 2V | 不定(0か1のどちらか) |
0V 〜 0.8V | 0 |
なお、この電圧の範囲は、PICマイコンの型番によって異なります。
このような感じで、入力電圧が「0V」や「5V」以外の時は、RA3
の値を無理やり0か1にしてしまいます。
ピンの電圧が「0.8V 〜 2V」のとき「不定」とありますが、これはPICマイコンの内部回路特性や温度などの環境によって0か1になります。
このように、基礎編で製作したスイッチ回路は、要するに入力が中途半端であっても0か1か決めてしまう、というものでした。
世の中、こんな感じで何に対しても白黒はっきりさせないと気が済まない人もいますよね。でも世の中、そう簡単に割り切れるものではありません。スイッチ回路の確認はここまでにして、別の例を見てみましょう。
温度センサという部品があります。
この温度センサには、3つの端子があります。
次のように2つの端子を電源に接続すると、残りの1つの出力端子に温度に応じた電圧が出力されます。
例えば0度の時は0V、18度の時は0.18V、というように、温度が1度上がることに0.01V電圧が増えます。
この、温度に応じた電圧を出力するピンを先ほどのスイッチ回路の時のRA3ピンに接続したらどうなるでしょうか。
RA3
レジスタは、0〜0.8Vの時が0、0.8V〜2Vの時が0か1のどちらか、2V〜5Vの時が1となります。
この温度センサは温度測定範囲は0度〜100度ですので、出力電圧は0V(0度)〜1V(100度)となります。PICマイコンのピンをデジタル入力にした場合、せっかく温度センサを接続したのに温度の情報を読み取ることができません。
この温度センサのように、電圧が5Vか0Vかではなく、中途半端な電圧の値を読み取りたい場合があります。
このような電圧値が連続した状態のことを「アナログ」と呼んでいます。
「ADコンバータ」とは、このようなアナログの電圧値をPICマイコンが内部で扱える数値(=デジタル的な値)に変換する機能のことです。
例えば、ピンの電圧が1.5V(アナログ)のとき、PICマイコンのプログラムでuint16_t
型の変数で扱える数値(デジタル値)に変換する、というイメージです。
「ADコンバータ」とは「Analog-to-Digitalコンバータ」の略で、「A/Dコンバータ」「ADC」などと呼ばれることもあります。
ADコンバータの雰囲気がわかったところで、PICマイコンのADコンバータについて詳しくみていきましょう!
プログラム上のADコンバータの取り扱い方
基礎編で作成したプログラムでは、実際の動作を開始する前に、ピンの設定を行いました。
次のようにANSELA
というレジスタに値を代入しました。
ANSELA = 0b00000000;
このANSELA
レジスタは、各ピンをデジタル読み取り(0か1)にするか、アナログ制御(0〜5V)にするか、という設定を行うものです。
ANSEL
とは、「Analog Select」の意味です。(Analog=アナログ、Select=選択です)
また、ANSELA
のA
はポートAの意味です。(RA0〜RA5はポートAの0番から5番という意味です)
もう一度、ANSELA
レジスタの仕様を、PIC12F1822のデータシートで確認してみましょう。

あるピンをアナログ読み取りにしたい場合、そのピンに対応するANSELA
レジスタのビットを1にします。
例えば、RA2ピン(5番ピン)でアナログ値読み取りをしたい場合、ANSELAレジスタを次のように設定します。
ANSELA = 0b00000100;
ただ、このように書くとどのピンか分かりづらいので、次のようにレジスタ名にbits
をつけて、特定のビットに代入することもできます。
ANSELAbits.ANSA2 = 1;
なお、ピンの入力/出力を設定するTRISA
レジスタがありますが、RA2ピンをアナログ値読み取りにする場合、TRISA
レジスタで、RA2ピンを入力に設定する必要もある点に注意してください。
このように設定したら、あとはADコンバータ機能を使ってピンの電圧値を読み取ることができます。
この読み取る方法ですが、スイッチのON/OFFを読み取ったように簡単にはいきません。(PWM制御ほど難しくはありませんので安心してください!!)
プログラムで実際に読み取る方法は次回以降の記事で解説します。
今回の記事では「ADコンバータ」はどのようなものか「なんとなくわかったかな…?」という程度かもしれませんが、その理解で十分です。
次回は、回路を設計して、その次のプログラムを作成して理解を深めます。
更新履歴
日付 | 内容 |
---|---|
2017.4.2 | 新規投稿 |
2017.12.1 | ANSELAの説明追記 |
2020.1.19 | リンク切れ修正 |
2025.5.11 | 説明内容簡略化と不足情報補足 |