BMP280温度センサー・その5(I2Cデバイスクラスに関して)

簡易目次 

 実際のプログラムに入る前にプロジェクトフォルダーをGitHubに作成しました。

 I2Cデバイスのベースとなるクラスは以下の通りとなる。

class CSPI2CDeviceAccessBase
{
	friend class CSPI2CManager;
public:
	CSPI2CDeviceAccessBase(uint8_t ui8DeviceAddress);
	virtual ~CSPI2CDeviceAccessBase();

	inline uint8_t GetDeviceAddress()
	{
		return this->m_ui8DeviceAddress;
	}

	inline bool GetLoopAccess()
	{
		return this->m_bLoopAccess;
	}

	virtual bool AfterProcess();

protected:
	CSPI2CDeviceAccessBase * m_pNextAccess;

	CSPI2CData m_listDataProcess;
	CSPI2CManager * m_pManager;

	bool m_bLoopAccess;

	uint8_t m_ui8DeviceAddress;
};
このクラスのインスタンスをBMP280温度センサー・その4(I2C通信スレッド)で述べたマネージャークラスに登録することによって、I2Cとの通信が行われることになる。

I2Cで送受信するデータはCSPI2CData型のリストにCSPI2CDataElement型のデータを登録することにより行う。CSPI2CDataElement型のデータはCSPI2CDataElementからの派生クラスであるCSPI2CDataRegisterReaderかCSPI2CDataRegisterWriter,
CSPI2CDataCommandWriterを使用する。

BMP280に関して、以下の3つのクラスを定義する

class CSPI2CBMP280ConfigCtrl
:温度センサーのコンフィギュレーションを設定するためのクラス。BMP280のメモリーマップは以下の通りとなっている。
これによると、アドレス番号0xF5および0xF4にはデータの書き込みを行うことが出来る。
0xF4の上位3bitはosrs_tでデータシートによると温度のオーバーサンプリング数とある。
次の3bitはosrs_pで圧力のオーバーサンプリング数
最後の2bitはコントロールパワーモードとある。
0xF5の上位3bitはt_sbとあり、スタンバイ時間のモードとある。
次の2bitはfilterで、IIRフィルターの設定
最後の1bitはインタフェースモードとなる。

CSPI2CBMP280ConfigCtrlクラスのインスタンスを作成し、コンフィグレーションをセットすることにより、BMP280の設定を行うことが出来る。

class CSPI2CBMP280Calib
:BMP280は温度値と圧力値を12bitのバイナリー値で取得できる。このバイナリー値をどのように計算すれば温度(℃)と圧力(Pa)になるかと言う計算式がある。
BMP280はその計算式に与える定数が、センサー毎に異なるようである。それで、BMP280の特定のメモリーから計算用の定数を取得し、温度と圧力を計算する際に使用する必要がある。

CSPI2CBMP280Calibクラスはその定数を取得するために使用する。

class CSPI2CBMP280TempPress
:実際に温度および圧力の値を取得し、計算を行う。

コメント

このブログの人気の投稿

プロジェクトのきっかけ・コンセプト・未来

Raspberry Pi セットアップ