A/Dコンバータのシミュレーション方法(SCL Generator)


【A/Dコンバータのシミュレーション】

 MPLAB IDEのシミュレータを使ってA/Dコンバータの入力を擬似的に
行うことができます。
 ここでは、SCL GeneratorのRegister Injection機能を使います。つまり
レジスタに擬似的にデータを入力する方法で、A/Dコンバータの結果を
格納するADRESLレジスタにデータを挿入する方法でシミュレーション
を行います。

【シミュレートするプログラム】

A/Dコンバータのシミュレーションをテストするプログラムは下記のように
なっているものとします。

 ・タイマ0の一定周期割り込みごとにA/D変換を実行し、結果を0〜50℃の
  温度に変換してから、USARTで出力する。
  出力する形式は、"Ondo = xx.x DegC"という形式とする。

これを実現するプログラムのタイマ0の割り込み処理部は下図のように
なります。



【シミュレーションの準備】

 まずUSARTのシミュレーションを行うことができるように設定する必要が
あります。当然DebuggerはMPLAB SIMを選択してシミュレータが動いている
状態とします。
Debugger → Settings → Uart1 I/Oタブ で下記のダイアログが開きますので
下図のように Enable Uart1 I/Oにチェックを入れます。
これでその下側の入力ができるようになりますので、出力をWindow表示に
するよう設定します。つまりOutput欄のWindowをチェックするだけです。
これでOutputのウインドウにSIM Uart1というタグが追加され窓が増えます。





【A/Dの擬似入力データの用意】

A/Dコンバータの擬似入力データをテキストファイルとして用意します。
MPLABで File → Newとして開く白紙のエディタ窓で下図のような例の
ように擬似的に入力するデータを16進数で入力します。
ここも1行置きに入力するようにすると、1回ごとに入力が順番に処理
されるようになります。
作成ができたら、 File → Save As としてファイルを保存します。
このとき、拡張子を.txtとして、適当な名称でプロジェクトと同じディレクトリの
中に保存します。(例ではdata.txtとした)




この例では10ビットデータの0/4、1/4、2/4、3/4、4/4となるデータを擬似入力
データとして作成した。


【SCL Generatorの設定】

 A/Dコンバータの結果レジスタにデータを擬似入力するための動作を
SCL Generatorに設定します。
 Debugger → SCL Generator → New Wrokbook として開く下記のダイアログ
で図のように設定します。

(1) Register Injectionタブをクリック
(2) Reg/Varの空欄をクリックしてレジスタを指定する。ここではADRESLレジスタ
  を指定する。
(3) Data FileName の欄をクリックするとファイルダイアログが開くので、前項で
  作成したテキストファイルを指定します。(例ではdata.txt)
(4) Format欄はデフォルトでHexとなっていますのでそのままで良いですが
  ここをDecとすれば、先のテキストデータは10進数で記述できます。
(5) これで左下にある「Generate SCL From Workbook」ボタンを押すと
  デバッグ用のシミュレーションプログラムを自動的に生成します。
  ファイル保存用のファイルダイアログが開きますので、適当な名前で保存
  します。このときは拡張子(.scl)は自動的に付加されるので指定する必要は
  ありません。





【Stimulus Controllerによる擬似入力実行指定】

上記で作成したシミュレーションプログラムを実際に実行させるには、Stimulus
Controllerを使います。
  Debugger → Stimulus Controller → New Scenario として開く下記のダイアログ
で図のようにAttachボタンをクリックします。
Attachボタンをクリックするとファイルダイアログが開きますので、前項で作成した
SCLファイルを指定します。
これでシミュレーションの実行準備完了です。






【シミュレーション実行】

 この設定を実行したあと、シミュレーションでRunボタンをクリックすれば、
プログラムが実行され、正常に動作するプログラムであれば、USART出力
が実行されるはずですから、OutputウィンドウのSIM Uart1の窓に出力が
表示されます。
今回の実行例では下図のようになります。
出力温度がちょうど50℃の0/4、1/4、2/4、3/4、4/4 のときの値となっている
のが分かります。









   目次ページへ