第34回 チャレンジ課題(2)

SPI通信とデバッグ機能のチャレンジ課題です。

SPI通信で湿度データを1バイト読み取る

これまでの記事で、SPI通信でセンサのチップIDの値(1バイト)を取得するプログラムを、デバッグ機能を利用して実行しました。

チャレンジ課題の1つ目として、湿度データを読み取ってみたいと思います。

湿度データはメモリマップで以下の場所にあります。

Pic practice 34 bme280 memory map

湿度データは2バイト、つまり16ビットで構成されています。アドレス0xFDには湿度データの上位1バイト、0xFEには下位1バイトが格納されています。

なお、取得できるデータですが、センサは電源投入後は測定指示しない限り、温湿度・気圧データはデフォルトの値が入っています。メモリマップにデフォルト値も書かれている通り、湿度データの上位1バイト(アドレス0xFD)は0x80が入っています。

そこで、湿度データの上位1バイトを取得するプログラムを作成し、デバッグ機能を利用して実際に0x80が取得できるか確認してみてください。

 

SPI通信で湿度データを2バイト読み取る

湿度データは実際には2バイトです。そこで、湿度データ格納用に以下の16ビットの変数を宣言し、この変数に湿度データが入るプログラムを作成してみてください。

uint16_t humidity;

なお、湿度データの上位1バイト、下位1バイトについて、それぞれアドレスを指定して読み取ることもできますが、このセンサのSPI通信は、以下のようにアドレス指定後、クロックを継続して送ると、センサは次のアドレスのデータ、その次のアドレスのデータ、というようにアドレスを1つずつ増やしながらデータを送ってきてくれます。ぜひこの機能を利用してプログラムを作成してみてください。

Pic practice 34 spi sequence hd

すでに8ビット送信の関数、8ビット受信の関数は作成していますので、これらの関数を使用してSPI通信手順を実現すれば連続データ読み取りができるはずです!