MPLABX IDEシミュレータの使い方( Stimulus その1 )

関連

MPLABX IDEシミュレータの使い方( Stimulus その2 )
MPLABX IDEシミュレータの使い方( Stimulus その3 )
MPLABX IDEシミュレータの使い方( Stimulus その4 )
MPLABX IDEシミュレータの使い方( Stimulus その5 )

MPLABXのシミュレータ機能のStimulusを一言で表現すると、外部入力をシミュレートする機能になる。

例えば、ADCモジュールを使って外部からの入力をGPIOピンを通じて読み取る実装をした場合に、Stimulusで任意の電圧を設定して確認することができる。

ADCの外部入力の値を読み取る

MCCを使って、ADCモジュールの設定を行う

stimulus_mplabx_001

stimulus_mplabx_001

サンプルコード。ループ内で毎回ADCモジュールの値を読む内容になっている。

#include "mcc_generated_files/mcc.h"

void main(void)
{
    SYSTEM_Initialize();
    uint16_t res = 0;
    while (1)
    {
        res = ADC_GetConversion(AN0_IN);
    }
}

Stimulusの設定(ボタントリガー方式)

ADCの外部入力シミュレートを行う

stimulus_mplabx_001

Stimulusを選択すると、IDE下部にテーブルが表示される。

stimulus_mplabx_001

設定でAN0ピンがADCモジュールに繋がっているので、このピンに対して、2.5V = 2500mVを設定しておく。

stimulus_mplabx_005-1

ソースをビルドして、デバッグ実行を開始したら、ブレークポイント等でデバッグを一時停止させて、先程準備したStimulusの2.5Vをトリガーする。

stimulus_mplabx_006

デバッグを再開して、ADCモジュールの読み取りを実施すると、読み取った値が変化していることが確認できる。

(注意) "その2"でRegister Injectionからのアナログ入力モードに触れているが、Simulatorの設定で"Use MPLAB 8 Style.."をチェックONすると、Register Injectionからのアナログ入力モードになって、AsynchronousタブのトリガーボタンでAN0に値を設定しても反映されなくなる。排他的な機能だということに留意する。

トリガー前のADRESの値はゼロ。これは、ADRESHとADRESLの8ビットを連結した16bitのレジスタで、ADCの10bitの値が格納される。

stimulus_mplabx_007

トリガー後のADRESの値は512になっている。

stimulus_mplabx_008

10bit = 分解能が1024
デフォルトで電源電圧5.0Vが基準電圧になるので、
( 512 / 1024 ) * 5.0 = 2.5V

2.5Vが入力されて、正しく読み取れている事がわかる。

割り込み処理などであれば、割り込み関数内にブレークを貼っておけば、トリガーしたときに止まるだろう。

さまざまなトリガータイプ

他にも色々ある

stimulus_mplabx_009

タイプ 設定内容
Set High デジタルでHIGH(1)を入力
Set Low デジタルでLow(0)を入力
Set Toggle クリックするたびにHigh/Lowを繰り返す
Pulse High サイクルを指定してその区間だけHighになる
Pulse Low サイクルを指定してその区間だけLowになる
Set Voltage 電圧(整数のみ)と単位(V, mV, uV)を指定してアナログ入力

Pulse Highを使ってみる。3サイクルを指定してデジタル入力ピンに入力してみる。

stimulus_mplabx_011

適当にデバッグを1サイクル?ごとにSTOPしてコマ送りしてみると、以下の図になる。

stimulus_mplabx_010

指定したサイクルってのは、

立ち上がり1サイクル
HIGH区間=指定サイクル - 1
立ち下がり1サイクル

だと理解(10cycにしても同じ)。1cycだと下図のようになる。

stimulus_mplabx_012