PICマイコンのソフト支援ツール”MPLAB X IDE”のシミュレーションの紹介とプログラム検証

設計ツール

※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

シミュレーションで、プログラムデバック

ブレイクポイントの設定:
作成したプログラムが、意図した動作となっているか検証が出来ます。

例:

  1. “main.c”メインプログラムの行番号 “78”赤枠 にブレイクポイントを設定するため、左側ボタンクリックすると”行番号”表示 ⇒ “赤四角”表示に変更

図-7:”MPLAB X IDE” 画面-7

  1. [Continue]現在位置から実行:赤枠を左側ボタンクリックして実行します。

図-8:”MPLAB X IDE” 画面-8

  1. 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” の時間を観測する事によりタイマーの時間が分ります。

  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″する事を確認できました。

コメント