

PIC 24FJ64GB002使用 温度ロガー回路図
24FJ64GB002-I/SPは、PICの16ビットCPUで、プログラム・フラッシュメモリ64KB、SRAM 8KB、USB内蔵、28ピンDIPパッケージというデバイスです。
28ピンDIPパッケージなので使いやすいのですが、何分このピン数のデバイスはメモリ容量が64KBくらいまでですから、あまり大きなプログラムには使えません。64KBは、インストラクション・ワードでの容量にすると22KWくらいです。
今回の温度ロガーは、NTCサーミスターで計測した温度を表示するとともに、SDカードに記録するものです。
NTCサーミスターを使用した理由は、電子部品等の局所的な温度を計測したいという理由です。写真のようにサーミスタに何ら保護処置はせず、CPUチップなどにシリコングリスで熱結合させて使うためです。NTCサーミスターの出力は、16ビットADコンバータでデジタルに変換しています。
関連記事: NTCサーミスタ + MCP3425で温度を計測
SDカードに記録したデータは、USBケーブルでパソコンに接続するだけで外部記憶装置(MSD)として働く、いわゆるUSBメモリ機能も組み込みたかったのですが、残念ながら64KB(22KW)のメモリ容量では不足しました。
このため今回は計測したデータをSDカードに記録するだけのプログラムとなっています。パソコンに持っていくには、SDカードを抜いてリーダで読み込む必要があります。USBメモリ機能(MSD)のプログラムは別途PICに書き込んでやればよいのですが、わざわざそうするまでもないでしょう。

PIC 24FJ64GB002使用の温度ロガー
NTCサーミスタ + 16bit ΔΣADCで計測した温度データをSDカードに記録
この写真では計測インターバル1s、計測期間10m(10分)
145カウント目 24% 25.1度
下段の25.4度はHDC1000で計測した温度
アルミケースは加工が面倒なので透明アクリルケースに組み込みました。
使用例: LT1170使用の昇圧コンバータ
温度ロガーの主な仕様
電源: DC 4.0 - 12V (内部で3.3Vに変換)
温度センサー1: NTCサーミスター 10KΩ/25℃
温度センサー2: HDC1000高精度温湿度センサー(校正用)
計測インターバル: 1s, 5s, 10s, 30s, 1m, 5m, 10m から選択
計測期間: 10s, 1m, 10m, 1h, 3, 6h, 12h, 1d, 3d, 1w から選択
SDカード: FAT32でフォーマット
ファイル名: DATA0001.csvからDATA0005.csvを選択 削除可能
ファイル形式: テキストCSV形式
記録項目: カウント値,YY/MM/DD, HH/MM/SS, HDC1000温度,HDC1000湿度,サーミスター温度
サーミスタB定数指定: 標準3380, 3431, 3452, 3280, 3180, 3080 から選択
温度補正: サーミスターで計測した温度とHDC1000で計測した温度の差(10回の平均)を計算し、サーミスターの補正値とする。
RTC: 計測日時記録用、計測インターバル用インターバルタイマとして使用
開発環境
Microchip MPLAB X IDE v3.40
MLA v2016.08.08 Fileio、SD SPI Driver
XC16コンパイラー v.1.21
PICKIT3
計測例

LT1170 昇圧DC-DCコンバータの発熱の様子
出力電流1Aと2Aの場合
40分間計測
これはLT1170を使用した昇圧型DC-DCコンバータ動作時のチップの温度変化を本機で計測したものです。
プログラミング
コードの掲載は省略します。
開発環境のMPLAB X IDEは非常によくできたIDEです。至れり尽くせりです。さすがMicrochip社の細やかさがうがえます。が、難点はコンパイルエラーが分かりにくいことでしょうか。

核となるFILEIOは MLA(Microchip Library Application)を使用しました。
SDカードはSPIで接続し、これもMLAのSd SPIドライバを使用しました。
これらの関連ファイルはMLAをコンパイラから参照するのではなく、ファイルをコピーしてIDEのディレクトリに入れました。
fileio.c
fileio.h
sd_spi.c
sd_spi.h
drv_spi_16bit.c
system.c (MLAの24FJ256GB110のものを改造)
system.h
fileio_config.h
RTC(リアルタイム・クロック)はMLAのbspを使用することもできますが、今回は以前自作したものを流用しました。
system.cはベースとして24FJ256GB110のものを使用しましたが、24FJ64GB002に合わせて変更する必要があります。
コンフィグワード
システムイニシャライズ(クロック設定、IOポート、I2C初期化など)
SDカードの使用IOポートの定義など
上の写真のようにプログラムメモリがすでに86%なので、これにMSDを組み込むとオーバーします。メモリが128KB以上でUSBサポートのPIC(24FJ128GC006など)を使用する必要があります。
このようなロガーを作っておくと何かと便利です。
参考文献: 技術評論社 改訂新版 PICで楽しむUSB機器自作のすすめ 後閑哲也氏著
(JF1VRR)