【温度センサーIC+PICマイコンの設計】-2 :温度センサーICの出力信号をマイコンに取り入れる(ソフト設計編-1)

エレキ設計

この記事でわかること

本記事は【温度センサーIC+PICマイコンの設計】-1 の続編です。
本編は、ソフト設計の解説です。

具体的な内容は、以下です。

  • ソフト設計仕様決め
  • ソフト設計の初期段階(プロジェクトフォルダー作成)からMCC機能を使ったモジュールのプログラム生成を具体的に説明します。

ソフト設計

PICマイコンのソフト開発用として、”MPLAB X IDE”支援ソフトがマイクロチップ・テクノロジー(Microchip Technology)社から無料で提供されています。

本記事で使用する ”MPLAB X IDE” は、バージョン6.05です。
”MPLAB X IDE”支援ソフトの詳細は、ここを参照

仕様

仕様:

  1. システムクロックは、PICマイコン内の発振器:16MHzを選択
  2. 2ピンをアナログ入力AN0設定
  3. マイコン内蔵の10ビットA/D変換を使用
  4. Vref( 基準電圧 )は、マイコン内部の基準電圧を使用するため、FVRの設定が必要
  5. 10秒タイマーで時間管理、割り込み使用
    (温度観測タイミングが、正確に10秒毎ではありません。)
  6. 電圧値から温度を計算します。計算式の解説は、ここを参照
  7. 温度表示は、有りません。マイコン内で確認します。(温度表示は、別途記事予定です。)

上記、仕様を考慮して、ソフト設計をしました。

”MPLAB X IDE”の支援ソフトを使ったソフト設計

”MPLAB X IDE”支援ソフトは、ソフト設計に関する PICマイコンやC言語について詳細に理解していなくても、プログラム作成、ソフト上の検証、プログラムのコンパイル、マイコンへの書き込み、実機の検証ができます。

今回のソフト設計の作業フローチャート図を、下記に示します。
本記事では、青色枠の記事となります。

図1:ソフト設計の作業フローチャート

フローチャートの説明:

  1. Create Project name
    全プログラムを格納するフォルダーの作成
    ”MPLAB X IDE”支援ソフトを開始する1歩目
  2. Using MCC function
    ”MPLAB X IDE”支援ソフトの中にあるMCC(MPLAB Code Configurator)機能を使用して、PICマイコン内蔵のモジュールを自動生成します。
    本仕様では、下記を自動生成します。
    ・システムクロック
    ・A/D変換モジュール(割り込み無し)
    ・FVRモジュール(内蔵のVref使用の為)
    ・タイマー2モジュール(割り込み使用)
  3. “Generate”を実行
    上流フローで生成した各モジュールプログラムと”main.c”(自動生成)をまとめて、
    1つのプログラムを生成します。
  4. Edit Specification
    仕様に合わせて、プログラムの編集を直接行います。
    ・本仕様では、”main.c”と”timer2.c”プログラムが編集対象となります。
    No error:編集中に問題ある記述の場合は、逐次エラーコメントが表示されるため、この工程でエラーが無くなれば、基本プログラムは動作します。
  5. ・Compile
    PICマイコンに書き込むために、C言語プログラムをアドレッシングと命令16進数(Hex)
    に置き換えます。
    ・”Debug Main Project” の実行
    本ソフトシステム上(実機無し)で、プログラムの検証が出来ます。
  6. Write to PIC (Flash)
    PICマイコンのフラッシュメモリーにプログラムを書き込みます。
  7. On-target debugging
    実機を使い検証を行います。
  8. Judge
    検証で、プログラム変更が有る場合は、Edit Specification で本記事では”main.c”か”timer2.c”の変更。又は
    Using MCC functionにて、再プログラム生成します。
    注意:Using MCC function工程のプログラム生成後にユーザーが、自動生成したプログラムを
    直接編集した場合、プログラムが新しく再生成されるため、ユーザーが編集したプログラムは
    残っていません。(必要に応じて、再編集が必要となります。)

以下、ソフト設計の作業フローチャートの青枠の工程を具体的に説明します。

”プロジェクト:TMPRTR_get” ディレクトリー を新規作成 (Create Project name)

具体的な作成方法は、”MPLAB X IDEを起動して、プログラムを作成”を参照。
(画面表示有り、プロジェクト名は、違います。)

要約として、下記参照。

“MPLAB X IDE”を起動

ウィンドウ 左上側の”File”→”New Project”を左側ボタンクリックで、下記、ウィンドウ表示

[Choose Project]

  1. [Categories]:”Microchip Embedded”を選択(デフォルト)
  2. [Projects]:”Standalone Project”を選択(デフォルト)

  基本デフォルトのまま、”Next”左側ボタンクリック

[Select Device]

  1. [Family]:”All Families”を選択
  2. [Device]:”PIC16F1938″を選択。採用するPICマイコンの型式
  3. [Tool] :[Show All]に “レ” 点して、”PIC kit 4″を選択。
    PICマイコンをPICkit-4経由してPC接続。
    最新版は、”PICkit-5″が有ります。(2026.01.14現在)

    “Next”左側ボタンクリック

[Select Header]

  • “None”

    “Next”左側ボタンクリック

[Select Compiler]

  • XC8(v2.41):左側ボタンクリック

    “Next”左側ボタンクリック

[Select Project Name and Folder]

  1. [Project Name]:”TMPRTR_get“(プロジェクト名)入力
  2. [Encoding]:”ISO-2022-JP”(コメントで日本語入力可)入力

    “Finish”左側ボタンクリック

以上で、”プロジェクト:TMPRTR_get”が作成出来ます。

MCC機能を使用 (Using MCC function)

MCCのインストールは、ここを参照

本機能を使い、下記、4つのプログラムを生成します。

  1. システムクロック
  2. ADCモジュール
  3. FVRモジュール
  4. タイマーモジュール

以下では、1~4のプログラム生成方法を具体的に説明します。

1.システムクロックの指定

システムクロックは、内部オシレータの16MHzを設定しました。
システムクロック16MHzの設定の詳細は、ここを参照

2.ADCモジュールプログラム生成

ADCモジュールの設定:

PIC16F1938には、”Peripherals”として10ビットA/D変換モジュールを内蔵しているので、これを使います。
・アナログ入力ピン:2Pin(AN0)
・基準電圧Vref:
 測定温度範囲:0℃~80℃からの温度センサーIC(LM61)Voutの出力範囲を考慮して
 内部リフェレンス 2.048Vを使用のため、”FVR”を設定します。
 Vref+電圧は、下記 表1の情報を元にして決めました。
 ”測定温度範囲”の”Voutアナログ電圧”範囲140mV(Max側)< Vref+ : 2048mV
 固定電圧リファレンスを使用します。(FVRの設定が必要)
 vref-:0 設定
 10ビットA/D変換の分解能は、2mVとなります。

表1:Vrefの決定

測定温度範囲0℃~80℃
Voutアナログ電圧60mV~140mV
基準電圧:Vref2048mV
分解能(LSB)2048mV/210(A/D10ビット)=2mV


・変換クロックを設定 (下の表11-1参照)

A/D変換の変換時間:
TAD=2.0usに設定、10ビット全体の変換には”11.5×TAD”の時間:23us

マイコロチップ社製:PIC16F1938のデータシートから引用

 

MCC機能を使い、ADCモジュールプログラム生成

①:”Peripherals”を左側ボタンダブルクリック
②:”ADC”の”+”を左側ボタンクリック

図2:ADCモジュール プログラム生成1

③:”ADC”が[Project Resources]側に追加されます。

図3:ADCモジュール プログラム生成2

上記(”ADCモジュールの設定”)で決めたADCモジュール設定値を、下記のGUIの表示に沿って入力します。

④:[Enable ADC] “レ” 点、[Clock Source]は、”FOSC/32″を選択。
TAD=2.0us, [Conversion Time] 23.0us (表11-1・-2と同じとします。)
[Result Alignment]は、”right”を選択。デジタルデータの格納位置を右詰め指定
[Positive Reference]は、”FVR”を選択。FVRモジュールを使い、内部リフェレンス 2.048V設定を行います。下記の”MCC機能を使い、FVRモジュールプログラム生成“を参照。
[Negative Reference]は、”VSS”選択。=0V。( Vref- )
⑤:アナログ入力ピンを2Pinに指定、左側ボタンクリック。

図4:ADCモジュール プログラム生成3

3.FVRモジュールのプログラム生成

内部リフェレンス 2.048Vを使用するため、”FVR”を設定します。

MCC機能を使い、FVRモジュールプログラム生成

⑥:”Peripherals”を左側ボタンダブルクリック
[FVR]を左側ボタンクリック

図5:FVRモジュール プログラム生成1

⑦:[FVR]の”+”を左側ボタンクリック
”FVR”が[Project Resources]側に追加されます。


図6:FVRモジュール プログラム生成2

⑧:[Enable FVR] “レ” 点、[FVR_buffer1 Gain] “2x” (2.048V)を選択

図7:FVRモジュール プログラム生成3

以上のADCとFVRモジュールの設定により、ADCモジュールプログラムを作成する事が出来ます。

4.Timer2モジュールのプログラム生成

PIC16F1938には、Timer0.1.2.4,6と5個のタイマーを内蔵しています。
今回は、Timer2のタイマースタート/ストップ、カウント書き込みと割り込みの機能を使いました。
以前、割り込み無しのタイマー関数を使ったプログラムは、ここを参照

Timer2のブロック図を下記に示します。
10秒タイマーを実現するため、
ハードでFOSC:16MHz ⇒ 0.1kHz(10ms)、次に ソフトで0.1kHz(10ms)⇒ 0.1Hz(10s)の
構成を考えました。

ハード部は、図17-1のブロック図の赤字の設定にして、0.1kHz(10ms)を出力させます。
MCC機能を使った設定は、下記の”MCC機能を使い、TMR2モジュールプログラム生成”を参照。
ブロック内の”x”=2です。(例えば、TxCKPS<1:0>⇒T2CKPS<1:0>です。)

PIC16F1938のデータシートから引用

Fosc/4:システムクロック/4=16MHz/4=4MHz
Prescaler: 1:16 は、入力した周期 4MHz/16 = 0.25MHzなり周期を長くします。
Comparator:0.25MHzのカウンター値とPRx(249)を比較 同じになるとEQ信号が
アクティブになります。次にTMRxカウンターを”0”に戻すために毎回1クロック分使います。
よって周期の計算では、
“(PRx+1)”の値が、周期計算式となります。
(MCC機能では、直接”PRxレジスタ”に書き込みはしませんが、 “PRxレジスタ”の設定値は、
“0xF9″です。)

周期計算式は、以下の式で求めます。

Sets Flag bit TMxIFの周期=1/ ( FOSC/4 ) × Prescaler × ( PRx+1 ) × Postscaler

上記を考慮して、MCC機能のGUIに入力します。

MCC機能を使い、TMR2モジュールプログラム生成

⑨:[Timer]を左側ボタンダブルクリック、 [TMR2]の “+”を左側ボタンクリック
”TMR2″が [Project Resources] 側に追加されます。

図8:TMR2モジュール プログラム生成1

⑩:[Enable Timer] タイマー許可 “レ”点、[Timer Clock] の [Postscaler] “1:10″選択、
[Prescaler] “1:16″選択、[Timer Period] “10ms” 入力、[Enable Timer Interrupt] 割り込み許可 “レ”点。図17-1のTIMER2/4/6のブロック図参照。ここまでは、ハード部の設定。
⑪:[Software Settings] “1000”入力、10ms × 1000回の割り込みをソフト生成して10sにします。

本TMR2モジュールは、ハード設定による割り込み(10ms 毎)と この割り込みを1000回処理するプログラム(10sタイマー)を ”Software Settings” 設定により自動で生成します。

図9:TMR2モジュール プログラム生成2

注意:図17-1の “PRxレジスタ” の値は、⑩ 設定から分るので、”PRxレジスタ”設定は、システム側で入力します。よってユーザー設定は省いています。


Generate“を実行

MCC機能を使い、1~4までの各モジュール生成ができました。これらをまとめる”main.c”(幹プログラム)を生成するために”Generate”を左側ボタンクリック、実行。
“Output”ウインドウに ”Generation complete” 表示で正常終了 確認。

図10:”Generate” の画面


次回は
上記、ソフト仕様 に合わせるために、今回生成したプログラムを編集する記事を投稿予定です。

コメント