気圧センサSCP1000を接続してみる(6)
SCP1000の使い方(2)

  SCP1000とのSPI通信は次のように行います。

 まず1バイトの指令データを書き込みます。指令データはSCP1000に書き込む指令とSCP1000からステータスや気圧などの測定データを読み込む指令があります。書き込む指令の場合は続けて書き込むデータをPCからSCP1000に送信します。SPI通信では、送信と同時に相手側からデータが送られてきますので、相手からのデータも読み込みます。
 ACP1000からデータを読み込む指令の場合、指令を書き込んだ後は、0xFFなどのダミーデータをPCからSCP1000に送信し、その際、SCP1000から送られてくるデータが目的の受信データとなります。

SCP1000への指令データの概要
  SCP1000へは、それぞれその目的に応じたレジスタ・アドレスとR/Wのどちらかを指定するビットをReadの場合0、Writeの場合1に設定します。この指令データはb7からb2の6ビットでレジスタアドレスを、b1でR/Wを指定し、b0は常に0にします。この指令データの主なものを次の表に示します。
     (次の表のRSTR、STATUSについて誤りがありましたので訂正しました。赤字の表記が訂正したものです。ご迷惑をおかけしました。) SPI060010.jpg

指令の設定例
  SCP1000の動作状態をオペレーション・レジスタに設定します。SCP1000は電源を投入、リセット後などは初期化処理を行いその後休止状態になります。連続測定などを行う場合はオペレーション・レジスタに動作モードを設定する必要があります。
◆オペレーション・レジスタの設定


(1) オペレーション・レジスタの設定codeを 0x0Eに設定して書き込む
(2) SCP1000からのダミーデータを読み込む
(3) 動作モードを設定するオペレーション・コードを書き込む
(4) SCP1000からのダミーデータを読み込む

 主に圧力、温度の測定に関するオペレーション・コードを次に示します。

オペレーション・コード
 オペレーション・コードは次の11種類が決められています。

0x00 電源投入後開始時、パワーダウン・モード、リセット後のデフォルト時はこのモードになります。何のオペレーションも行わない休止状態になります。
0x01、0x02、0x05、0x06、はEEPROMの操作などの処理に設定されています。
0x07 初期化処理を実行します。初期化処理完了はDATARD8を読み込み確認することができます。
     DATARD8=0x01 で正常に完了
     DATARD8=0x00 の場合チェックサム・エラーがあります
0x09 高速処理モード
0x0A 高精度モード
0x0B 超低消費電力測定
0x0C 外部トリガによる測定
0x0F セルフ・テストを行います。セルフ・テストの結果はDATARD8を読み込み確認することができます。
     DATARD8=0x01 セルフ・テストはで正常に完了
     DATARD8=0x00 セルフ・テストでエラーがありました

圧力、温度の測定
  高速処理モード、高精度モード、超低消費電力測定では、連続で測定が行われています。測定状態はSTATUSレジスタのビット5のDRDYビットのオン/オフで確認することができます。このビットは、DRDYピンと同じ動きを行います。ディジタル・ポートでDRDYピンのオン/オフを確認することもできます。

測定データの読み取り
 圧力データは、DATARD8、DATARD16の各レジスタを設定して8ビット、16ビットのデータを読み取り、不要なビットをカットして圧力データとします。
 温度の測定データは、TEMPOUTレジスタを設定して16ビットのデータとして読み取ります。それぞれ読み取った値に係数を掛けて測定値とします。

具体的な測定データの読み取り
 具体的な測定データの読み取りは、次のような手順となります。

◆DATARD8の読み取り


(1) code 0x7C をSCP1000に書き込む
(2) SCP1000からのダミーデータを読み取る
(3) SCP1000からのデータを読み取るために、SCP1000にダミーデータを書き出す
(4) SCP1000からの測定データを読み取る

◆DATARD16の読み取り

(1) code 0x80 をSCP1000に書き込む
(2) SCP1000からのダミーデータを読み取る
(3) SCP1000からの最初データを読み取るために、SCP1000にダミーデータを書き出す
(4) SCP1000からの最初の測定データを読み取る
(5) 次のデータを読み取るためにSCP1000にダミーデータを書き出す
(6) SCP1000からの次の測定データを読み取る


 以上の操作で2バイトの測定データを読み取ります。
 温度の測定データの場合は、TEMPOUTレジスタを設定して温度データを読み取ります。DATARD16の場合のcode0x80を0x84として、同じ処理を行うことで得られます。

 次回、以上の処理をArduinoのスケッチにして実際の動作を確認してみます。

                                               <神崎康宏>

SCP1000への指令の表でコマンドのアドレスと指令コードに誤りがありました。
ご迷惑をおかけしました。お詫びして訂正します。赤字の表記が訂正された正しい値です。
2010年8月20日訂正



 


トラックバック(0)

このブログ記事を参照しているブログ一覧: ArduinoにSPI通信を行う機器を接続する(6)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/4448







newハイパー・マイコンmbedでインターネット電子工作


マイコンと電子工作 No.6


マイコンと電子工作 No.4


マイコンと電子工作No.1
サポート・ページはこちら