/******************************************************************************* * skSHT3x.c - 温湿度センサ(SHT3x-DIS)用関数ライブラリ * (SHT30/SHT31/SHT35 共通) * * SHT3x_Init - デバイスの初期化を行う処理 * SHT3x_CMDsend - デバイスへコマンドを送信する処理 * SHT3x_SoftRST - デバイスへソフトリセットを送信する処理 * SHT3x_Heater - デバイスのヒーターを起動/停止させる処理 * SHT3x_StatusRead - デバイスの情報を読み込む処理 * SHT3x_MeasureRead - デバイスの測定データを読み込み物理量値へ換算する処理 * SHT3x_ContiStart - デバイスへ連続測定開始を送信する処理 * SHT3x_ContiStop - デバイスへ連続測定中止を送信する処理 * * ============================================================================ * VERSION DATE BY CHANGE/COMMENT * ---------------------------------------------------------------------------- * 1.00 2020-01-23 きむ茶工房(きむしげ) Create * ============================================================================ * MPLAB X(v5.30) * MPLAB(R) XC8 C Compiler Version 2.00 * * PIC24F用ライブラリに改修 * 2022/10/8 N.Ishii *******************************************************************************/ #include #include "skSHT3x_PIC24F.h" #include "skI2C_PIC24F_lib.h" #include "colorlcd_libdsPICVH.h" // 遅延関数のみ利用 static int Sensor_adrs; // デバイスのI2Cアドレスを保存する変数 /******************************************************************************* * ans = SHT3x_CMDsend(*command) * デバイスへコマンドを送信する処理 * *command : 送信するコマンドの格納先を指定する(2byte書込む) * ans : 0=正常 1=異常(相手からACKが返ってこない) * -1=他のマスターとのバス衝突発生 * ============================================================================ * * PIC24F用に改修(エラーチェック無し) * HDC1000の送信関数はレジスタアドレスと書込みデータを送信していたが * SHT31の送信関数はコマンドが格納されているアドレスの上位8bitと * 下位8bitを送る間接アクセス * * 2022/10/5 N.Ishii *******************************************************************************/ void SHT3x_CMDsend(unsigned char *command) { I2C_Start(Sensor_adrs,RW_0); // スタートコンディションを発行する I2C_Send(*command); // コマンドのMSBを送信する command++; I2C_Send(*command); // コマンドのLSBを送信する I2C_Stop(); // ストップコンディションを発行する } /******************************************************************************* * ans = SHT3x_SoftRST() * デバイスへソフトリセットを送信する処理 * ans : 0=正常 1=異常(相手からACKが返ってこない) * -1=他のマスターとのバス衝突発生 * ============================================================================ * * PIC24F用に改修(エラー処理無し) * 2022/10/5 N.Ishii *******************************************************************************/ void SHT3x_SoftRST() { unsigned char data[2]; data[0] = 0x30; // ソフトリセットコマンドのMSB data[1] = 0xA2; // ソフトリセットコマンドのLSB SHT3x_CMDsend(data); delay_ms(10); } /******************************************************************************* * ans = SHT3x_Heater(onoff) * デバイスのヒーターを起動/停止させる処理 * onoff : 1=起動(SHT3X_HEATER_ON) 0=停止(SHT3X_HEATER_OFF) * ans : 0=正常 1=異常(相手からACKが返ってこない) * -1=他のマスターとのバス衝突発生 * ============================================================================ * * PIC24F用に改修(エラー処理無し) * 2022/10/5 N.Ishii *******************************************************************************/ void SHT3x_Heater(char onoff) { unsigned char data[2]; data[0] = 0x30; // ヒーターコマンドのMSB if (onoff == SHT3X_HEATER_ON) data[1] = 0x6D; // ヒーターコマンド(起動)のLSB else data[1] = 0x66; // ヒーターコマンド(停止)のLSB SHT3x_CMDsend(data); } /******************************************************************************* * ans = SHT3x_StatusRead(*sts) * デバイスの情報を読み込む処理 * ヒーターの動作状態、アラートに関する状態、直前に受信したコマンドの * 実行状態及び直前に受信した書込みデータのチェックサム照合結果の情報を返す * *sts : デバイスの情報格納先を指定する * ans : 0=正常 1=異常(相手からACKが返ってこない) * -1=他のマスターとのバス衝突発生 * ============================================================================ * * PIC24F用に改修(エラー処理無し) * 2022/10/5 N.Ishii *******************************************************************************/ void SHT3x_StatusRead(unsigned int *sts) { unsigned int data[3]; I2C_Start(Sensor_adrs,RW_0); // スタートコンディションを発行する I2C_Send(0xF3); // ステータスコマンドのMSBを送信する I2C_Send(0x2D); // ステータスコマンドのLSBを送信する I2C_rStart(Sensor_adrs,RW_1); // リピート・スタートコンディションを発行する data[0] = I2C_Receive(ACK); // HIGHバイト読出し data[1] = I2C_Receive(ACK); // LOWバイト読出し data[2] = I2C_Receive(NOACK); // CRCバイト読出し(無チェック) *sts = (data[0] << 8) | data[1]; I2C_Stop(); // ストップコンディションを発行する } /******************************************************************************* * ans = SHT3x_ContiStop() * デバイスへ連続測定中止を送信する処理 * ans : 0=正常 1=異常(相手からACKが返ってこない) * -1=他のマスターとのバス衝突発生 * ============================================================================ * * PIC24F用に改修(エラー処理無し) * 2022/10/5 N.Ishii *******************************************************************************/ void SHT3x_ContiStop() { unsigned char data[2]; data[0] = 0x30; // 連続測定中止コマンドのMSB data[1] = 0x93; // 連続測定中止コマンドのLSB SHT3x_CMDsend(data); delay_ms(15); // 測定完了を待つ } /******************************************************************************* * ans = SHT3x_ContiStart(mps,accuracy) * デバイスへ連続測定開始を送信する処理 * mps : 測定頻度を指定します(連続測定コマンドのMSB) * accuracy : 繰返し精度レベルを指定します(連続測定コマンドのLSB) * ans : 0=正常 1=異常(相手からACKが返ってこない) * -1=他のマスターとのバス衝突発生 * ============================================================================ * * PIC24F用に改修(エラー処理無し) * 2022/10/5 N.Ishii *******************************************************************************/ void SHT3x_ContiStart(unsigned char mps,unsigned char accuracy) { unsigned char data[2]; data[0] = mps; // 周期的連続測定コマンドのMSB:例=連続測定頻度1回(1秒に1回) data[1] = accuracy; // 周期的連続測定コマンドのLSB:例=繰返し精度レベル高 SHT3x_CMDsend(data); } /******************************************************************************* * ans = SHT3x_Init(address) * デバイスの初期化を行う処理 * デバイスのI2Cアドレス登録とソフトリセットを行う。 * address : デバイスのI2Cアドレスを指定する * ans : 0=正常 1=異常(相手からACKが返ってこない) * -1=他のマスターとのバス衝突発生 * ============================================================================ * * PIC24F用に改修(エラー処理無し) * 2022/10/8 N.Ishii *******************************************************************************/ void SHT3x_Init(int address) { Sensor_adrs = address; SHT3x_SoftRST() ; }