本記事で、使用している支援ソフトは、以下です。
※PICマイコンは、マイクロチップ・テクノロジー(Microchip Technology)社の
マイクロコントローラ製品です。
“MPLAB X IDE”のバージョンは、V6.05です。
この記事でわかること
本記事は【温度センサーIC+PICマイコンの設計】-2 の続編です。
本編は、ソフト設計のプログラム編集についての解説です。
具体的な内容は、以下です。
- ソフト仕様項目表示
- ソフト設計作業フローチャート図表示
- 編集作業フローの説明(Edit Specification部)
- 編集プログラム main.cとtimer2の編集説明
- コンパイル方法
PICマイコン ソフト設計ー2
ソフト開発支援ツール
PICマイコン専用の開発支援ツールを使用します。
ソフト名称:MPLAB X IDE、MPLAB XC8
(A/D変換、タイマーモジュール等は、MCC機能を使いプログラム作成の効率化を図ります。)
ソフト開発支援ツールの具体的な操作については、ここを参照。
ソフト設計( 前記事の”ソフト設計-1″と重複している説明があります。)
要点(仕様):
- システムクロックは、PICマイコン内の発振器:16MHzを選択
- 2ピンをアナログ入力AN0設定
- マイコン内の10ビットA/D変換モジュールの設定
- 10秒タイマーで時間管理、割り込み使用
(温度観測タイミングが、正確に10秒毎ではありません。) - 温度電圧値から温度を計算します。計算式の解説は、ここを参照。
- 温度表示は、有りません。今回はマイコン内で確認します。
ソフト設計作業フローチャートを下記に示します。

図1:ソフト設計作業フローチャート
図1:ソフト設計作業フローチャートの説明は、ここを参照。
水色枠の”Edit Specification”と”Compile”フローの解説が、本記事内容です。
前提として、上記、”要点(仕様)”項の 1~6項目を満足するプログラム作成の方法 (簡単に前記事のおさらい)
MCC機能を使い、下記、5つのプログラムを作成しました。
作成の詳細は、前記事【温度センサーIC+PICマイコンの設計】-2 ソフト設計-1を参照。
- システムクロック
- ADCモジュール
- FVRモジュール
- タイマーモジュール
- メインプログラム( main.c )
1~4までのプログラムを、MCC機能を使い生成、”Generate”ボタンを押下して、1~5のプログラムを含んだ、全体で完結したプログラムを自動生成します。後は、仕様に沿って一部のプログラムを編集します。
本投稿では、main.c とtmr2.c プログラムが編集の対象となります。
フローチャート( main.c、tmr2.c )( 図1のEdit Specification:青色枠 相等)
各仕様に沿って一部のプログラムを編集( main.c, tmr2.c )します。この編集に関係する
main.c, tmr2.c のプログラム編集フローチャートです。

図 2:main.c, tmr2.c のプログラム編集フローチャート
説明:
黒色:ユーザーが追加するプログラムです。
青色:MCC機能で生成した部分に相等。
main.c ( MCC機能の生成+編集 )
- SYSTEM_Initialize、TMR2 Interrupt enable、TMR2_stopTimer
システム初期設定、TMR2の割り込み許可と初期化 - ADC_GetConversion、Temperature calculation、TMR2_10sec_flag “0” set、
TMR2″0″, Start-timer
MCC機能で生成したADC関数を使い、A/D変換を実行
温度センサーIC出力電圧値から温度値を計算します。
計算式の詳細は、ここを参照。
10秒タイマーフラグを”0″に設定
TMR2タイマー”0″からスタート開始 - CMP. TMR2_10sec_flag=0
TMR2_10sec_flag値 判定
YES(TMR2_10sec_flag=0 )⇒ TMR2 10sec count wait : 10秒達成待ち継続
No(TMR2_10sec_flag=1)⇒ 10秒達成 ⇒ TMR2_StopTimer : TMR2カウンターストップ ⇒ ADC_GetConversionに遷移
tmr2.c ( 割り込み処理、MCC機能の生成+編集 )
- ISR
割り込み処理 - TMR2 10msec × Interrupt count handler
10msec割り込み処理
割り込みカウンターアップ - 100 count Interrupt
10秒タイマー判定(10msec×1000回達成?)
No(10秒未達成)⇒ 割り込み処理終了
YES(10秒達成) ⇒ TMR2_10sec_flag “1” 設定 ⇒ 割り込み処理終了
“Generate”実行後に生成されたmain.c と tmr2.c の具体的な編集を下記に示します。
注意点:
割り込み機能は、MPUが複数のモジュールを同時に実行させて、各モジュールが必要な時に割り込みを発生して、随時MPUは各モジュールの処理をする事が特長です。
今回は、タイマーの割り込み処理プログラムを分かり易く説明するため、1個のタイマーモジュールの割り込み+ポーリング処理のプログラム(フローチャート:”CMP. TMR2_10sec_flag=0″)となっています。
”図 2:main.c, tmr2.c のプログラム編集フローチャート” のmain.cをプログラムにすると下記 “図 3:main.c のプログラム” となります。
main.c 編集

図 3:main.cのプログラム
赤枠のプログラムは、新規に追加しました。
図2:main.c, tmr2.cのプログラム編集フローチャートの main.c プログラムです。
MPLAB X IDE画面の右側ウインドにmain.cプログラムを表示させます。
A:デジタルデータ宣言
D_reg:A/D変換モジュールで変換したデジタルデータ
ビット幅:16ビット符号無し、値範囲:0~65535
A_reg:変換公式を使い、デジタルデータをアナログデータに変換
ビットサイズ:8バイト、値範囲:±1.7×10308
T_reg:アナログデータをLM61のデータシートの温度変換計算式を使っての温度に変換
ビットサイズ:8バイト、値範囲:±1.7×10308
B : 10秒フラグデータ宣言
TMR2_10sec_flag:10秒達成用フラグ
ビットサイズ:32ビット、値範囲:0~4,294,967,295
volatile :
本プログラムの外から勝手に書き換えられる可能性があるよ宣言を追記
C : タイマー2割り込み許可
“//” 削除、MCC機能で生成した関数を有効にしました。
D : タイマー2停止
“//” 削除、MCC機能で生成した関数を有効にしました。
E: A/D変換を実行とデジタル値をアナログ値に変換 温度を算出
計算の詳細は、ここを参照。
F:タイマー2スタート設定、10秒フラグをクリア
MCC機能で生成した関数を設定
G:状態の判定(10秒待ち)
TMR2_10sec_flag=1になるまで、ループ待ち状態継続(割り込み待ち)
10秒達成したら” E” へ遷移してA/D変換処理を行います。
”図 2:main.c, tmr2.c のプログラム編集フローチャート” のtmr2.c をプログラムにすると下記 “図4:tmr2.c のプログラム” になります。
tmr2.c 編集

図4:tmr2.c のプログラム
MPLAB X IDE画面の右側ウインドにtrm2.cプログラムを表示させます。
赤枠のプログラムは、新規に追加しました。
赤枠以外は、MCC機能で生成しました。
extern unsigned int TMr2_10sec_flag:10秒達成フラグ データ宣言
extern宣言は、mainでもTMr2_10sec_flagを使うので、橋渡し宣言です。
TMr2_10sec_flag=1
TMR2_CallBack関数に、10秒達成した時、実行されるTMR2_10sec_flagを”1″にするプログラムを追加しました。
注意:MCC機能を使い自動生成したプログラム( tmr2.c )を直接編集した場合、プログラムが新しく再生成(”Generate”の実行)されるため、ここで編集したプログラムは残っていません。
よって、再生成後に再編集が必要となります。
本プログラム設計の特長としては、main.cとtmr2を個々に編集となります。
複数の設計者が、モジュール単位で設計をする場合、各モジュールの中でプログラムが完結となる様に設計出来ます。
このtmr2.cの編集無しで、同じ動作をするプログラムについては、
”tmr2.cを編集しない(main.cのみの編集)”として紹介する予定です。
(単独でプログラム設計する場合は、編集を1つのプログラム( この場合main.c )
に集約する事ができ、プログラム構成が分かり易くなるメリットがあります。)
プログラムのシミュレーション
“MPLAB X IDE”は、シミュレーションが実装されています。このシミュレーションを使えば実機ハードが無くても、かなりのプログラムデバックが可能になります。
シミュレーション(方法)は、ここを参照。
”図1:ソフト設計作業フローチャート”の”Debug Main Project” 以降部のフローとなります。
コンパイル (図1のCompile)
これまでに作成したC言語プログラムをコンパイルします。
コンパイル方法は、以下です。

図5:コンパイル実行と結果
コンパイルの実行
MPLAB X IDE画面の上部赤枠( ハンマーの形:Build Main Project )をマウス左ボタンクリック
コンパイルの正常終了表示(画面下部赤枠)
“BUILD SUCCESSFULL”
“Loading completed”
編集の工程でエラー表示が無ければ、本コンパイルは、問題無く終了するはずです。
実機ハードとプログラム実行 実機評価
続編の記事【温度センサーIC+PICマイコンの設計】-4:温度センサーICの出力信号をマイコンに取り入れる(実機評価編)を投稿する予定です。

コメント