JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC16F1705 MCC OP Ampテストその1

2022-04-06 17:19:14 | MPLAB X MCC
 PIC16F1705の特徴の一つは、オペアンプを内蔵していることです。

 このオペアンプは、いろいろな使い方ができると思います。

 今回は、PIC内のFVR(Fixed Voltage Reference)をオペアンプを介して外部に取り出してみます。

 オペアンプはボルテージフォロアで動作させて低インピーダンスで出力します。ボルテージフォロアの場合、入力電圧=出力電圧です。


 内部のオペアンプのダイアグラムです。非反転入力には、FVR Buffer2を選び、反転入力には、OP OUTを接続するように設定します。

 FVRは、1.024Vですが、SWを押すたびVRF Buffer Gainを変えて、2倍(2.48V)、4倍(4.96V)を出力するようにプログラミングします。

 プロジェクトを作成して、MCCを立ち上げます。
 オペアンプは、OPA1を使うことにして、OPA1モジュールを導入し、更にFVRモジュールも導入します。

 System Moduleは、Clock 8MHz_HFに、LVPはチェックを外しました。



 Pinモジュールの設定です。SWは、RC3に接続しますので、RC3をinputに設定し、WPUにチェックを入れて、ウィークプルアップします。この時、RegistersでnWPUENをenabledに設定します。


 OPA1モジュールで、入力チャンネルをFVR_Buffer2とします。


 FVRモジュールは、FVR_Buffer2 Gainの初期値として、1x=1.024Vとしておきます。

 プログラムです。
 FVR_Buffer Gainmの設定は、FVRCONレジスタのbi4,bi3で行い
bit4 bit3
1     1      x4
1      0     x2
0      1     x1
0      0     off
ですので、dataを左に2bitシフトして、0x80に加えた値をFVRCONに設定しています。(なお、bit8はFVRENで、1でFVR onです。)
-------------------------------------------------------------
/*
 * PIC16F1705 MCC OP Amp test 1
 * 2022.4.6
 * JH7UBC Keiji Hata
*/

#include "mcc_generated_files/mcc.h"
#define SW RC3
uint8_t n = 1;

void Vref_change(uint8_t data )
{
     FVRCON = 0x80 + (data<<2);
}


void main(void)
{
     // initialize the device
     SYSTEM_Initialize();

     while (1)
    {
         if (SW==0)
         {
             n++;
             if(n > 3)
                n=1;
             Vref_change(n);
             while(SW==0){   //SWが1になるまで待つ
                __delay_ms(10);
             }
         }
         __delay_ms(10);
    }
}
-------------------------------------------------------------

 電源を入れると初期のFVR=1.024Vが出力されます。
 実測値は1.04Vでした。


 SWボタンを一回押すとFVR_Buffer2 Gain=x2となり、2.048Vが出力されます。
 実測値は、2.07Vでした。


 更にもう一回SWを押すとFVR_Buffer2 Gain=x4となり、4.096Vになります。実測値は、4.11Vでした。

 更に、SWを押すと、Gain=x1となり、最初の状態に戻ります。