※MPLABは、マイクロチップ・テクノロジー(Microchip Technology)社の
ソフト支援開発ツールです。
この記事でわかること
温度センサーIC 出力のアナログデータをPICマイコンに取り入れるプログラムを作成しました。
このプログラムのデバックに”MPLAB X IDE”のシミュレーターを使いました。
“MPLAB X IDE”の中に”疑似的なPICマイコン”が入っているイメージだと思います。
シミュレーションでは、実機ハードは不要です。
本記事では、温度センサーのプログラムの検証結果と、本シミュレーションに使用したシミュレーション方法を紹介します。
- シミュレーションの設定方法
- ブレイクポインタを使い、プログラムの実行とデータの中身確認方法
- A/D変換モジュールの外部ピンにアナログ値を設定して、プログラムに取り入れる方法
- ADCモジュールからデータ取り込みの検証
- 10秒タイマーの検証
シミュレーションの基本機能の1部を紹介しています。
“MPLAB X IDE”は、バージョンは、V6.05です。
温度センサーICをPICマイコン内に取り入れるプログラムの詳細説明は、別に投稿予定。(製作中)
シミュレーションの設定、起動
実機ハードが無くても、”MPLAB X IDE”の環境下でシミュレーションを使い、プログラムのデバックが出来ます。
実機ハードは、部品決め・発注、ボード設計・作成、組み立て等の作業日程中に、プログラムを作成・シミュレーションして、プログラムの品質を上げることが出来、製品開発期間の効率化に寄与します。⇐これ電気製品開発には、重要なポイントです。
シミュレーションで検証したプログラムでも、
実機ハードでのデバックは、更に充分にする必要があります。
シミュレーションの設定
1:
上側 [Projects]のウインドーからプロジェクト名:”TMPRTR_get”を選択

図-1:”MPLAB X IDE” 画面-1
2:
上側 [File]の左側ボタンクリック。
“Project Properties(TMPRTR_get)”を選択

図-2:”MPLAB X IDE” 画面-2
3:
[Project Properties-TMPRTR_get]ウインドーの[Connected Hardware Tool:]で”Simulator”を選択後
“Apply”を左側ボタンクリック

図-3:”MPLAB X IDE” 画面-3
4:
[Categories]のウインドーに”Simulator”が追加されます。
[Option categories]で”Oscillator Options”を選択します。
[Instruction Frequency (Fcyc) ] は、”4″設定。
PIC10/12/16/18シリーズ: 4 システムクロック/命令。
[Frequency In]は、”MHz”を設定。システムクロックと同じ周波数単位設定。
[RC Oscillator Frequency] は、”16″を設定。システムクロックの周波数設定。
[RC Oscillator Frequency In]は、”MHz”を設定。システムクロックの周波数単位設定。
“Apply”を左側ボタンクリック
注意:クロック入力は、正確に!。”Stopwatch”の時間に影響します。

図-4:”MPLAB X IDE” 画面-4
起動
1:
上側 [Debug Main Project]を左側ボタンクリック、デバックモードでコンパイル&実行⇒
シミュレーションを自動実行します。

図-5:”MPLAB X IDE” 画面-5
2:
シミュレーション実行を上側 [Pause]を左側ボタンクリック、シミュレーションを停止。
(シミュレーション実行中は、下側、TMPRTR_get(Build,Load欄の青帯の幅が変化します。)

図-6:”MPLAB X IDE” 画面-6
シミュレーションで、プログラムデバック
ブレイクポイントの設定:
作成したプログラムが、意図した動作となっているか検証が出来ます。
例:
- “main.c”メインプログラムの行番号 “78”赤枠 にブレイクポイントを設定するため、左側ボタンクリックすると”行番号”表示 ⇒ “赤四角”表示に変更

図-7:”MPLAB X IDE” 画面-7
- [Continue]現在位置から実行:赤枠を左側ボタンクリックして実行します。

図-8:”MPLAB X IDE” 画面-8
- 1項で設定したブレイクポイントまで実行します。”赤枠”+”矢印”のところまでプログラムカウンターアップして停止した表示です。

図-9:”MPLAB X IDE” 画面-9
作成したプログラムの動作確認が出来ます。基本的な操作です。
A/D変換モジュール動作とデータ(D_reg,A_reg,T_reg格納)の確認方法
前提として:
1:
“AN0” 2Pinに、温度センサーIC(LM61)のアナログ電圧信号(Vout) を接続します。2Pinから
アナログ電圧を入力、PICマイコン(PIC16F1938)内のA/D変換モジュールでデジタルデータに
変換してマイコン内で、温度値に計算するプログラムです。10秒タイマーカウント毎に、温度観測
します。
下記に、回路図を示します。

図-10:回路図
2:
A/D変換モジュールを動作に含んだ、プログラム検証が出来ます。
A/D変換モジュールのアナログ入力ピン(2ピン:AN0)=900mVを入力して、PICマイコン内の温度値が30℃になる事を、本シミュレーションで検証をします。
下記に、温度センサーICの電圧と温度の特性を示します。詳細は、ここを参照。

図-11:LM61の温度対出力電圧の特性(イメージ図)
3:
温度アナログ電圧(Analog-out voltage:Vout)のデータから、main.C プログラム中の格納した
データの流れを、下記の図に示します。

図-12:データの流れ図
PIC Microcontroller:PICマイコン 型式:PIC16F1938
ADC module: A/D変換モジュール PICマイコン 2Pin:AN0入力
Processor core:PICマイコンのコア部分
D_reg: A/D変換後のデジタル電圧値を格納(Hex)
A_reg:D_regの電圧値からアナログ電圧値を算出し、本アナログ値を格納
T_reg:A_regの値から温度値を算出し、本温度値を格納。(本投稿の目的となる温度測定値)
D_reg, A_reg, T_regは、main.c 内でデータ宣言をしています。
(2ピン:AN0)に 900mVを入力設定方法と900mV⇒30℃検証:
1:
[Window] メニューを左側ボタンクリック、[Simulator] ⇒ [Stimulus] を選択します。
ウインドー右側に、[Stimulus] ウインドーが追加されます。

図-13:”MPLAB X IDE” 画面-10
2:
[Stimulus]ウインドーを追加、[Pin/Register Actions]を選択、[Click here to add/remove signals]を左側ボタンダブルクリックします。
PICマイコンのアナログピントして(AN0:2Pin)選択 [Select Signal(s)]に追加します。
“OK”を左側ボタンクリックします。

図-14:”MPLAB X IDE” 画面-11
3:AN0ピンにアナログ値設定
[Stimulus]ウインドーを選択
Time 欄:”0″入力。
AN0 欄:”900mV”入力。温度センサーICのVout=900mVからの値(図-11参照)。0nsから900mV固定と設定
画面左上 “▶” [Apply synchronous stimulus] を左側ボタンクリック
画面下 “Synchronous stimulus applied successfully”の表示で
An0=900mVの設定となります。

図-15:”MPLAB X IDE” 画面-12
An0=900mVの設定をしてシミュレーション実行後のデータの格納( D_reg, A_reg, T_reg )値を確認します。
4:
観測するレジスタを指定します。
[Window]メニュー、[Debugging]、[Watch]を選択

図-16:”MPLAB X IDE” 画面-13
[Watches]ウインドーの[Name]欄の<Enter new watch>で左側ボタンダブルクリックして”D_reg,A_reg,T_reg”をキー入力

図-17:”MPLAB X IDE” 画面-14
5:
ブレイクポイントを予め設定します。
“D_reg,A_reg,T_reg”の値を確認するため、”main.c”文の3つの値確定後、”82行”を
左側ボタンクリックしてブレイクポイント設定。下の図参照。

図-18:”MPLAB X IDE” 画面-15
6:
実行
①:[Debug main project] 左側ボタンクリック、初期化後プログラム実行します
ブレイクポイントで止まらない場合
②:[Pause] 左側ボタンクリック、実行を一度中断。“D_reg,A_reg,T_reg”値の信頼性低い

図-19:”MPLAB X IDE” 画面-16
③:ブレイクポイントで停止時は、図-7:”MPLAB X IDE” 画面-7”と同じ記号となります。
7:
観測レジスタ値の表示

図-20:”D_reg,A_reg,T_reg”シミュレーションの値
上図の右側は、main.c中の”D_reg,A_reg,T_reg”のプログラムです。
D_regには、”ADC_Get Conversion”関数の実行結果を入力しています。
ADCモジュール関数と計算プログラムの検証:
ADC変換公式(疑似ADCモジュール)で計算:D_reg
D_reg=(入力電圧/Vref)×(10bitA/D-1)=(900mV/2048mV)×(210-1)
≒0x1C1(HEX)=449(DEC)
DAC変換公式(演算プログラム)計算:A_reg29.8
A_reg=(Vref × D) /(10bitA/D-1)=(2048mV × 449) /(210-1)
≒898.9mV
温度センサLM61の温度変換公式計算:T_reg
T_reg=(A mV / 勾配℃/mV )ー 切片℃=(898.8 mV / 10℃/mV )ー 60℃
≒29.9℃
検証結果:
”D_reg,A_reg,T_reg”につて、シミュレーションの値と計算値が同じで有ることが検証出来ました。
30℃(900mV)を入力して、PICマイコンでは、29.9℃の測定となります。
10秒タイマー検証
“Stopwatch”機能を使い、10秒タイマーをON/OFF制御するフラグ ”TMR2_10sec_flag” の “0” ⇒ “1” の時間を観測する事によりタイマーの時間が分ります。
- ”Stopwatch”機能起動
[Window]メニューから[Debugging]を選択、[Stopwatch]を左側ボタンクリックすると、
Stopwatchウインドーが追加されます。

図-21:”MPLAB X IDE” 画面-17
1回目”main.c” “83”行にブレイクポイントを設定
“TMR2_10sec_flag=0″で、ストップウォッチ=0設定にするため。
[Debug Main Project]左側ボタンクリック.実行
ブレイクポイント・ヒット
[Stopwatch]ウインドーの[Clear stopwatch]左側ボタンクリック⇒”(0ns)”表示

図-23:”MPLAB X IDE” 画面-19
2回目”tmr2.c” “144”行にブレイクポイントを
設定、
“TMR2_10sec_flag=0⇒1″の時間を検証のため
[Continue]左側ボタンクリッ実行
ブレイクポイント・ヒット
[Stopwatch]ウインドーに、時⇒
“( 10.000015 s )”表示

図-24:”MPLAB X IDE” 画面-20
検証結果:
温度測定間隔を10秒タイマーを制御するフラグ”TMR2_10sec_flag”は、10秒間隔で”0″/”1″する事を確認できました。

コメント