関連
MPLABX IDEシミュレータの使い方( Stimulus その2 )
MPLABX IDEシミュレータの使い方( Stimulus その3 )
MPLABX IDEシミュレータの使い方( Stimulus その4 )
MPLABX IDEシミュレータの使い方( Stimulus その5 )
MPLABXのシミュレータ機能のStimulus
を一言で表現すると、外部入力をシミュレートする機能になる。
例えば、ADCモジュールを使って外部からの入力をGPIOピンを通じて読み取る実装をした場合に、Stimulusで任意の電圧を設定して確認することができる。
ADCの外部入力の値を読み取る
MCCを使って、ADCモジュールの設定を行う
サンプルコード。ループ内で毎回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を選択すると、IDE下部にテーブルが表示される。
設定でAN0ピンがADCモジュールに繋がっているので、このピンに対して、2.5V = 2500mV
を設定しておく。
ソースをビルドして、デバッグ実行を開始したら、ブレークポイント等でデバッグを一時停止させて、先程準備したStimulusの2.5Vをトリガーする。
デバッグを再開して、ADCモジュールの読み取りを実施すると、読み取った値が変化していることが確認できる。
(注意) "その2"でRegister Injectionからのアナログ入力モードに触れているが、Simulatorの設定で"Use MPLAB 8 Style.."をチェックONすると、Register Injectionからのアナログ入力モードになって、AsynchronousタブのトリガーボタンでAN0に値を設定しても反映されなくなる。排他的な機能だということに留意する。
トリガー前のADRES
の値はゼロ。これは、ADRESHとADRESLの8ビットを連結した16bitのレジスタで、ADCの10bitの値が格納される。
トリガー後のADRES
の値は512になっている。
10bit = 分解能が1024
デフォルトで電源電圧5.0Vが基準電圧になるので、
( 512 / 1024 ) * 5.0 = 2.5V
2.5Vが入力されて、正しく読み取れている事がわかる。
割り込み処理などであれば、割り込み関数内にブレークを貼っておけば、トリガーしたときに止まるだろう。
さまざまなトリガータイプ
他にも色々ある
タイプ | 設定内容 |
---|---|
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サイクルを指定してデジタル入力ピンに入力してみる。
適当にデバッグを1サイクル?ごとにSTOPしてコマ送りしてみると、以下の図になる。
指定したサイクルってのは、
立ち上がり1サイクル
HIGH区間=指定サイクル - 1
立ち下がり1サイクル
だと理解(10cycにしても同じ)。1cycだと下図のようになる。