『昼夜逆転』工作室
[トップページへ戻る]

AVR USI-TWI Master使用例:温度・湿度・気圧センサーBME280との接続

2017年7月
I2C接続のセンサーから値を読み込み、ディスプレイに表示するのに必要な線はSCL/SDAの2本。 Arduinoに使用されているATmega328PなどATmegaシリーズはI2C準拠のTWI機能を内蔵しており、I2Cデバイスと容易に接続できます。 ですがTWI機能のためだけに28ピンものAVRを使うのはもったいない気がします。8ピンAVRでできないでしょうか。

USI機能をTWI化する

AVRのATmegaシリーズはTWI(Two Wire Interface)機能を内蔵していますが、少ピンの品種はありません。
一方、ATtinyシリーズは8~20ピンの品種が豊富ですが、惜しいことにTWI機能が内蔵されていません。 しかしUSI(Universal Serial Interface)機能は内蔵されており、これを利用してSPIやTWI動作を実現することができます。
具体的な方法はアプリケーションノートで公開されています。今回の目的で利用するのはマスター側です。

AVR310のソース(C言語)は2013年に作成されたようですが、2017年時点の開発環境AtmelStudio7ではコンパイルが通りません。 また、プログラムの構造が整理されておらず(と筆者は感じた)、使いにくかったので全面的に改造しました。
※既存の自作TWIライブラリと同じインターフェイスで使えるようにした。

ソフトウェア
ダウンロード bme280test.zip
開発環境: Windows10/64bit, AtmelStudio7
上記ソフトウェアには、USI-TWI Masterプログラムの他、センサーモジュールBME280の自作APIも含みます (リファレンスAPIがBosch社から提供されています)。
キャラクタLCDは「AVR USI-TWI Slave使用例:キャラクタLCD-I2C化アダプタ Ver.2」で使用しているものです。

センサーモジュールBME280について

回路図
回路図

動作の様子 モジュール モジュール
LCD表示内容
作例では10分間隔で測定、表示しています。 '008A'は測定回数(138回)を表しています。

BME280モジュール
Bosch社の温度・湿度・気圧センサーBME280のモジュールを使用しています。
下記シリーズがあります。
 BMP180: 温度・気圧センサー(旧型)
 BMP280: 温度・気圧センサー(改良型、高精度)
 BME280: 温度・湿度・気圧センサー(高精度)
BME280のSDO端子でスレーブアドレスのLSBを決めることができます。
 GND とショートなら'0' → スレーブアドレス: 0x76 (初期状態)
 VDDIOとショートなら'1' → スレーブアドレス: 0x77
モジュール表面、3つのパッドは左から GND,SDO,VDDIO で、初期状態ではGND-SDOがつながっています。 ここをパターンカットし、SDO-VDDIOをハンダショートしてスレーブアドレスを0x77にしたり、 再度GND-SDOをハンダショートして0x76に戻したりできます。
また、このモジュールではI2Cのプルアップ抵抗として10kΩが実装済みです(モジュール背面)。

◆ ◆ ◆

ATtiny85(TWI機能がない8ピンAVR)にUSI-TWI Master機能を実装しました。I2Cでセンサー、LCDと接続できました。
ディスプレイをOLEDに変更したり、方位センサーや照度センサーを追加したり、 RTCモジュールとEEPROMを追加してログを記録したり、リチウムイオン電池駆動にしたり、 …I2C接続なら何でもつないでお好みのロガーが作れそうです。


 
(C) 『昼夜逆転』工作室
[トップページへ戻る]