« SSDAC用FPGA pofファイル公開のお知らせ | トップページ | RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証 »

2022年2月16日 (水)

PIC16F1705とBME280による温湿度気圧計

Pic_bme280
写真1.ブレッドボードに組んだ温湿度気圧計
PIC16F1705で温湿度気圧センサBME280モジュールを駆動し、LCD(AQM0802)に表示する。


今回はPICマイコンの開発環境MPLAB X IDEでMCC(Microchip Code Configurator)を使って、温湿度気圧センサBME280をI2Cで駆動して、測定した温湿度気圧をI2CのLCDパネルに表示する温湿度気圧計の試作をした。
PICマイコンのレジスタ設定等をGUIで行えるMCCを使う練習をするのが今回の主な目的だ。

これまで、PICの開発はMCCを使わずにやっていたが、最近のPICマイコンは機能が増え、レジスタ設定が非常に複雑になってきたため、手作業でレジスタ設定を行うことが困難になり始めていた。
Microchip側としてもそのあたりを考慮して、GUIで簡単にレジスタ設定ができるMCCをリリースした。
MCCを使うと、レジスタ設定は非常に簡単に行えるようになるが、その反面レジスタ分類ごとにファイルが生成されるため、慣れないとどこで何を設定しているのかがわかりにくく、全体として見通しが悪くなる。そのためいままで敬遠してきたが、今回使ってみて、慣れてくるととても便利だということがわかった。

【温湿度気圧計仕様】
今回試作した温湿度気圧計の仕様と開発環境は次のとおり。

PICマイコン      PIC16F1705-I/P
温湿度気圧センサ     BME280(I2C)
LCD           AQM0802(I2C)
開発環境         MPLAB X IDE v5.35
             XC8 v2.31
             MCC v4.0.2 ※
測定間隔         270.6秒
電源電圧         2.6~4.2V
消費電流         0.2~0.25mA

※MCCはMPLAB X IDEにプラグインとしてインストールする。


【回路】
16f1705_bme280sch_20220216104701

図1.回路図


図1に今回製作した回路図を示す。
温湿度気圧センサBME280は、3.3VLDOを搭載したモジュールを使用した。(写真2)

Bme280module
写真2.BME280モジュール
amazonやaliexpressなどで購入可能。

表示用LCDは秋月のAQM0802を使用した。これは安価でコンパクトなので、実験によく使用する。
ただ、電源電圧が変わると表示のコントラストが変わってしまう。そのため、今回はPICマイコンのA/Dコンバータ(ADC)で電池電圧をモニタし、電圧が3.5V以下に下がるとLCDコントラストを濃くするように調整している。
ADCには電池電圧を100kΩx2で分圧して入力しているが、ここで電流を消費しないように、測定時のみMOSFET AO3406で抵抗分圧をONしている。
主要部品の動作電圧範囲は、
PIC1705  2.3~5.5V
BME280   1.71~3.6V(LDOなしのBME280単体)
AQM0802  2.7~5.5V
となっており、BME280モジュールは3.3VLDO搭載なので、リチウムポリマ電池(最大4.2V)をそのまま使用した。
BME280とAQM0802はI2Cインタフェイスなので、SCLとSDAにプルアップ抵抗が必要だが、今回はBME280モジュールとAQM0802内部にそれぞれ10kΩが搭載されており、合成でそれぞれ5kΩのプルアップ抵抗になっている。

【ソフトウェア】
今回のソースファイルをプロジェクトホルダごとアーカイブしてこの記事の末尾にリンクしておく。
PICマイコンは、測定、表示が済むとSLEEPに入り、WDT(ウォッチドッグタイマ)によってSLEEPから目覚めて測定表示、再びSLEEP、を繰り返す。測定時は目印として一瞬LEDを点灯する。
WDTの最大時間は、MCCでポストスケーラーを最大値の8388608に設定したとき270.6秒となる。つまり、4分30秒に一度測定、表示更新をする。
WDTでSLEEPから目覚めたときは、SLEEPの直後の命令から復帰する。リセットではないので注意が必要だ。
LCDのコントラストが電池電圧によって変わってしまい、電圧が3Vを切るとほとんど見えなくなってしまうため、ADCで電池電圧をモニタし、3.5Vを堺にコントラスト設定を変えている。これはmain.cで電圧低下フラグBattLowを立ててi2c_lcd.cの113行目からの記述で行っている。

【動作】
SLEEP状態での消費電流はおよそ0.2mAで、測定時には瞬間的に1mA程度(LED点灯含む)となる。平均電流はおおむね0.2~0.25mA程度。
400mAhのリチウムポリマ電池での実動作では72日程度の動作を確認した。
SLEEP状態での消費電流は、BME280モジュールに搭載されたLDOのIqが大きいのではないかと思っていたが、実際に確認してみるとIqでの消費はきわめて小さく、LCD(AQM0802)の消費電流が支配的だった。

【ソース】

ダウンロード - 20220214bmeaqm_1705adc_000ok.x.zip


そういうわけでMCCはとても便利なので、どんどん使いましょう(^-^)
MCCの使い方は、トランジスタ技術2021年9月号別冊付録「PIC開発マニュアル2021」を参考にしました。

|

« SSDAC用FPGA pofファイル公開のお知らせ | トップページ | RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« SSDAC用FPGA pofファイル公開のお知らせ | トップページ | RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証 »