Si701x/2x 设备是 Silicon Labs 第二代相对湿度和温度传感器系列。此设备系列的所有产品均配备经过工厂完全校准的湿度和温度传感器元件、模拟-数字转换器、信号处理功能和一个 I2C 主机接口。使用获得专利认可的低导电聚合物介电质能获得高精度、长期稳定度,以及低漂移和低滞后。创新性 CMOS 设计还为相对湿度和温度传感器提供业内最低功耗。
设计师将感受 Si701x/2x 系列提供的一组独特性能。凭借完全的工厂校准,Si701x/2x 设备在 PCB 装配期间不需要额外的相对湿度/温度校准。为了在 PCB 回流焊设备运行期间免受灰尘、污垢和化学污染物,Si701x/2x 系列的所有产品均配备一个可选的工厂安装的防护罩。另外,需要 2 区温度感应的设计将得益于 Si7013 中使用可编程线性化植入的辅助传感器。
产品页面:
http://cn.silabs.com/products/se ... s/si7013-20-21.aspx
-
- /*******************************************************************************
- * Copyright (C), 2014, ?? Tech. Co., Ltd.
- * FileName: main.c
- * Author: littleshrimp
- * Version : 1.0
- * Date: 2014-7-30 9:23
- * Description:
- * Function List: //
- * 1. -------
- * History:
- * <author> <time> <version > <desc>
- * zhangfeng 2014-7-30 9:23 1.0 build this moudle
- ******************************************************************************/
-
- /*******************************************************************************
- * * INCLUDES
- * */
-
- #include "LPC8xx.h"
- #include "si7020.h"
- /*******************************************************************************
- * * MACROS
- * */
-
- /*******************************************************************************
- * * CONSTANTS
- * */
-
- /*******************************************************************************
- * * TYPEDEFS
- * */
-
- /*******************************************************************************
- * * GLOBAL VARIABLES
- * */
-
- /*******************************************************************************
- * * EXTERNAL VARIABLES
- * */
-
- /*******************************************************************************
- * * EXTERNAL FUNCTIONS
- * */
-
- /*******************************************************************************
- * * LOCAL VARIABLES
- * */
-
- static float rh,tmp;
- /*******************************************************************************
- * * PROFILE CALLBACKS
- * */
-
- /*******************************************************************************
- * * LOCAL FUNCTIONS
- * */
-
- /*******************************************************************************
- * * PUBLIC FUNCTIONS
- * */
- /*******************************************************************************
- * Function: myDelay
- * Description: 延时一毫秒
- * Calls:
- * Input: uint32_t ulTime//毫秒数
- * Return: void
- ******************************************************************************/
- void myDelay (uint32_t ulTime)
- {
- uint32_t i;
-
- while (ulTime--) {
- for (i = 0; i < 2401; i++);
- }
- }
- /*******************************************************************************
- * Function: main
- * Description: 主函数
- * Calls:
- * Input: void
- * Return: int
- ******************************************************************************/
- int main (void)
- {
- SystemInit();//系统初始化
- Si7020_Init();//初始化si7020
- while(1)
- {
- tmp = ReadTemperature();//读温度
- rh = ReadHumidity();//读湿度
- myDelay(500);//延时500ms
- }
- }
- /*******************************************************************************
- * Copyright (C), 2014, ?? Tech. Co., Ltd.
- * FileName: i2c.c
- * Author: littleshrimp
- * Version : 1.0
- * Date: 2014-7-30 9:22
- * Description:
- * Function List: //
- * 1. -------
- * History:
- * <author> <time> <version > <desc>
- * zhangfeng 2014-7-30 9:22 1.0 build this moudle
- ******************************************************************************/
-
- /*******************************************************************************
- * * INCLUDES
- * */
-
- #include "LPC8xx.h"
-
- /*******************************************************************************
- * * MACROS
- * */
-
- /*******************************************************************************
- * * CONSTANTS
- * */
-
- #define I2C_SLV_WRITE (slvAddr & 0xfe)
- #define I2C_SLV_READ (slvAddr | 0x01)
- /*******************************************************************************
- * * TYPEDEFS
- * */
-
- /*******************************************************************************
- * * GLOBAL VARIABLES
- * */
-
- /*******************************************************************************
- * * EXTERNAL VARIABLES
- * */
-
- /*******************************************************************************
- * * EXTERNAL FUNCTIONS
- * */
-
- /*******************************************************************************
- * * LOCAL VARIABLES
- * */
-
- static uint8_t slvAddr;
- /*******************************************************************************
- * * PROFILE CALLBACKS
- * */
-
- /*******************************************************************************
- * * LOCAL FUNCTIONS
- * */
-
- /*******************************************************************************
- * * PUBLIC FUNCTIONS
- * */
-
- /*********************************************************************************************************
- ** Function name: I2CInit
- ** Descriptions: I2C主机初始化
- ** input parameters: 无
- ** output parameters: 无
- ** Returned value: 无
- *********************************************************************************************************/
- void I2CMSTInit (uint8_t _slvAddr)
- {
- slvAddr = _slvAddr;
- LPC_IOCON->PIO0_10 &= ~(0x3 << 8); /* 引脚属性 */
- LPC_IOCON->PIO0_10 |= (0x2 << 8); /* 使能I2C_SDA 增强快速模式 */
- LPC_IOCON->PIO0_11 &= ~(0x3 << 8);
- LPC_IOCON->PIO0_11 |= (0x2 << 8); /* 使能I2C_SCL 增强快速模式 */
-
- LPC_SWM->PINASSIGN7 &= ~(0xFFUL << 24); /* 管脚分配 */
- LPC_SWM->PINASSIGN7 |= (10 << 24); /* I2C_SDA ~ P0.10 */
- LPC_SWM->PINASSIGN8 &= ~(0xFF << 0);
- LPC_SWM->PINASSIGN8 |= (11 << 0); /* I2C_SCL ~ P0.11 */
-
- /*
- * 时钟换算关系: I2C_Pclk = MAIN_CLK / SYSAHBCLKDIV;
- * I2C_Fclk = I2C_Pclk / DIVVAL;
- * I2C_SCLclk = I2C_Fclk / (MSTSCLLOW + MSTSCLHIGH + 4);
- *
- * 系统时钟: MAIN_CLK = 24 MHz, SYSAHBCLKDIV = 1;
- * I2C增强快速模式: I2C_SCLclk = 400 kHz;
-
- * CAT24C02要求: I2C_Fclk = 8 * I2C_SCLclk = 3.2 MHz, MSTSCLLOW = 2, MSTSCLHIGH = 0;
- * DIVVAL = I2C_Pclk / I2C_Fclk - 1= 24 / 3.2 - 1 = 7;
- */
- LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 5); /* 初始化I2C AHB时钟 */
- LPC_I2C->DIV = 7;
- LPC_I2C->MSTTIME |= (2 << 0) | (0 << 4); /* SCL_LOW = SCL_HIGH = 2 * CLK */
- LPC_I2C->CFG |= (1 << 0) | (0 << 3); /* 使能主机模式,禁止超时 */
- }
-
- /*********************************************************************************************************
- ** Function name: I2CWriteByte
- ** Descriptions: I2C写单字节
- ** input parameters: uiSubAddr: 器件子地址
- ** ucData: 写入数据
- ** output parameters: 无
- ** Returned value: 无
- *********************************************************************************************************/
- void I2CWriteByte (uint32_t uiSubAddr, uint8_t ucData)
- {
- while (!(LPC_I2C->STAT & 1)); /* 等待空闲 */
- LPC_I2C->MSTDAT = I2C_SLV_WRITE;
- LPC_I2C->MSTCTL = (1 << 1) | (1 << 0); /* 发送起始位 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = uiSubAddr;
- LPC_I2C->MSTCTL = (1 << 0); /* 发送子地址 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = ucData;
- LPC_I2C->MSTCTL = (1 << 0); /* 发送数据 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTCTL = (1 << 2) | (1 << 0); /* 发送停止位 */
- }
-
- /*********************************************************************************************************
- ** Function name: I2CReadByte
- ** Descriptions: I2C读单字节
- ** input parameters: uiSubAddr: 器件子地址
- ** pucData: 保存读出数据的指针
- ** output parameters: 无
- ** Returned value: 无
- *********************************************************************************************************/
- void I2CReadByte (uint32_t uiSubAddr, uint8_t *pucData)
- {
- while (!(LPC_I2C->STAT & 1)); /* 等待空闲 */
- LPC_I2C->MSTDAT = I2C_SLV_WRITE;
- LPC_I2C->MSTCTL = (1 << 1) | (1 << 0); /* 发送起始位 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = uiSubAddr;
- LPC_I2C->MSTCTL = (1 << 0); /* 发送子地址 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = I2C_SLV_READ;
- LPC_I2C->MSTCTL = (1 << 1) | (1 << 0); /* 重新发送起始位 */
-
- while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1)); /* 等待数据可以读取状态 */
- *pucData = LPC_I2C->MSTDAT;
- LPC_I2C->MSTCTL = (1 << 0); /* 接收数据 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTCTL = (1 << 2) | (1 << 0); /* 发送停止位 */
- }
- void I2CRead2Byte (uint32_t uiSubAddr, uint8_t *pucData)
- {
- while (!(LPC_I2C->STAT & 1)); /* 等待空闲 */
- LPC_I2C->MSTDAT = I2C_SLV_WRITE;
- LPC_I2C->MSTCTL = (1 << 1) | (1 << 0); /* 发送起始位 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = uiSubAddr;
- LPC_I2C->MSTCTL = (1 << 0); /* 发送子地址 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = I2C_SLV_READ;
- LPC_I2C->MSTCTL = (1 << 1) | (1 << 0); /* 重新发送起始位 */
-
- while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1)); /* 等待数据可以读取状态 */
- *pucData++ = LPC_I2C->MSTDAT;
- LPC_I2C->MSTCTL = (1 << 0); /* 接收数据 */
-
- while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1)); /* 等待数据可以读取状态 */
- *pucData++ = LPC_I2C->MSTDAT;
- LPC_I2C->MSTCTL = (1 << 0); /* 接收数据 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTCTL = (1 << 2) | (1 << 0); /* 发送停止位 */
- }
- void I2CReadByte16bitAddr (uint32_t uiSubAddr, uint8_t *pucData)
- {
- while (!(LPC_I2C->STAT & 1)); /* 等待空闲 */
- LPC_I2C->MSTDAT = I2C_SLV_WRITE;
- LPC_I2C->MSTCTL = (1 << 1) | (1 << 0); /* 发送起始位 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = uiSubAddr>>8;
- LPC_I2C->MSTCTL = (1 << 0); /* 发送子地址 */
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = uiSubAddr;
- LPC_I2C->MSTCTL = (1 << 0); /* 发送子地址 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTDAT = I2C_SLV_READ;
- LPC_I2C->MSTCTL = (1 << 1) | (1 << 0); /* 重新发送起始位 */
-
- while ((LPC_I2C->STAT & (7 << 1)) != (1 << 1)); /* 等待数据可以读取状态 */
- *pucData = LPC_I2C->MSTDAT;
- LPC_I2C->MSTCTL = (1 << 0); /* 接收数据 */
-
- while (!(LPC_I2C->STAT & 1)); /* 等待操作 */
- LPC_I2C->MSTCTL = (1 << 2) | (1 << 0); /* 发送停止位 */
- }
-
- /*********************************************************************************************************
- ** Function name: I2CWriteString
- ** Descriptions: I2C写字符串
- ** input parameters: uiSubAddr: 器件子地址
- ** pucData: 指向发送字符串的指针
- ** uiLen: 发送数据的长度(字节)
- ** output parameters: 无
- ** Returned value: 1:成功 0:失败
- *********************************************************************************************************/
- uint8_t I2CWriteString (uint32_t uiSubAddr, uint8_t *pucData, uint32_t uiLen)
- {
- while (uiLen--) {
- I2CWriteByte(uiSubAddr++,*pucData++);
- }
- return 1;
- }
-
- /*********************************************************************************************************
- ** Function name: I2CReadString
- ** Descriptions: I2C读字符串
- ** input parameters: uiSubAddr: 器件子地址
- ** pucData: 指向接收字符串的指针
- ** uiLen: 读出数据的长度(字节)
- ** output parameters: 无
- ** Returned value: 1:成功 0:失败
- *********************************************************************************************************/
- uint8_t I2CReadString (uint32_t uiSubAddr, uint8_t *pucData, uint32_t uiLen)
- {
- while (uiLen--) {
- I2CReadByte(uiSubAddr++,pucData++);
- }
- return 1;
- }
本帖最后由 littleshrimp 于 2014-8-27 12:28 编辑