基板を開発するには必須ではないですが、電源電圧をチェックする機能があると便利だと思います。
せっかくPICを使っているので、PICで電源電圧を測定できるので、基本的な機能を標準で組み込むためにテストしておこうと思います。
ネットで検索したところ、MCCを使って設定したサイトが見つからなかったので、基本的な設定を記録しておきます。
開発環境
開発PC
THERDWAVE Magnate IM
13th Gen Intel(R) Core(TM) i5-13400 RAM16GB,SSD 500GB
Windows 11 Home 22H2
ソフトウェア
統合開発環境: MPLAB X IDE Ver 6.15
MCC Ver 5.3.7
Cコンパイラ: XC8 Ver 2.45
マイコン書き込み、デバッグツール
PICkit3
ターゲットデバイス
PIC12F1827
まめの開発環境についてはこちらを参照してください。
ターゲットボード
ターゲットは以下の回路をブレッドボードで組みました。
基本的にはPICkit3からのプログラム書き込み・デバッグ用ICSP(In Circut Serial Programming)の接続のみです。
プログラム作成手順
プロジェクトを作成する
MPLAB X IDEを起動して、プロジェクトを作成します。作成手順は「PIC開発環境の整備4 PICkit3の動作確認」を参考にしてください。
MCCでPICの情報を設定
MCC(Microchip Code Configurator)を使ってPIC16F1827の設定をしていきます。
ツールバーのMCCアイコンをクリックします。
「MCC Content Manager Wizard」画面になりますので、「MCC Classic」の[Select MCC Classic]をクリックして、[Finish]します。
*具体的な手順は「PIC開発環境の整備4 PICkit3の動作確認」を参照してください。
MCCの設定画面になります。今回は「Package View」にPIC16F1287のピン配置が出てきました。
「System Module」をクリックします。「INTERNAL OSCILLATOR」を設定します。
System Clock Select: INTOSC (内部クロックを使います)
Internal Clock: 31.25KHz_MF (本ブログでは省電力をコンセプトにしているのでできるだけ低周波数を使います)
今回は入出力を使わないので、ピンの設定はしません。
「Device Resources」のADCの▼をクリックして表示されたADCのをクリックします。
「Project Resources」の「Peripherals」にADCが登録されます。
ADCを選択すると、「Easy Setup」がADCの「Hardware Settings」設定画面になりますので、設定します。
Result Alignment: right
Positive Reference : VDD
Negative Reference : VSS
ADCと同様にFVRも登録します。「Hardware Settings」設定画面で、設定します。
FVR_buffer1 Gain: 1x
「Project Resources」で[Genetate]をクリックします。
「mcc_generated_files」のadc.cファイルの中に、ADC_GetConversion(adc_channel_t channel)という関数が作成されています。この関数を使います。
プログラムのコーディング
main.cファイルのwhile(1){…}に下記プログラムを追加します。
while (1)
{
// Add your application code
uint16_t vdd = ADC_GetConversion(channel_FVR);
float fVdd = 1047.552 / (float)vdd;
// Dummy
float debugfVdd = fVdd * 1;
__delay_ms(1000);
}
計算式については”なよよんのホームページ”さんを参考にさせていただきました。
Dummyの意味のないコードですが、fVddが利用されていないとデータがWatchできないのでデバッグ用に無理やりfVddを使っています。
PICのデバッグをしてみます
「ツールバー」の[Clean and Build for Debugging Main Project]をクリックしビルドします。[Make and Program Device Main Project]をクリックし、PICに書き込みます。
デバッグを開始する前に、__delay_ms(1000); の行番号をクリックしてブレークポイントを設定してみます。ブレークポイントが貼られた行は赤く反転しています。
[Debug Main Project]をクリックしデバッグを開始します。
起動開始後に、ブレイクポイントの行でプログラムが一時停止します。一時停止した行(ブレークポイントを貼った行)が緑色になっています。
このときの、fVddの値を確認してみます。
ソースコードのfVddの部分を選択して、「Watches」のビューにドラッグアンドドロップすると、「Watches」にfVddが登録されます。
この状態では16進数で表示されているので、float表示にしてみます。
「Watchs」リストのfVddを選択して、右クリック「Display Value Column As」からIEEE Floatを選択します。
floatで表示されました。4.38vを表示しています。
実際にVDDをマルチメータで測定したところ、4.39vでした。
実際は何回か測定して平均値にするのが一般的かと思います。
今回は、PICのピンを使わずに電源電圧VDDを測定することができました。
今後、いろいろなところで応用が利くかなと思っています。