完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
基本数据:
供电范围:2.4V~5.5V,湿度误差±1.5,温度误差±0.2。 设备地址选择脚,ADDR(PIN2)接GND,设备写地址为0x88(0x44<<1),读地址为0x89(0x45<<1)。 读取的信息顺序是:温度数据(16位)+校验和(8位)+适度数据(16位)+校验和(8位)。 湿度:RH=100*(1.0*SRH / 65535),摄氏温度:T=-45+175*(1.0*ST / 65535); 单次数据采集模式: 可设置重复性和时钟延展。数据采集频率和重复性影响传感器测量时间和功耗。 例如:指令0x2c06,启用高重复性测量和时钟延展。 单次模式读取数据:注意单次下传感器测量时间间隙, 例如:发送0x2c06指令后,传感器工作(大概10ms)→发送“读报头”→传感器响应→SDA被拉低(大概2ms)→读出数据。 备注:时钟延展只适用于单次采集模式。 周期数据采集模式: 采用固定周期测量数据,有0.5mps,1mps,2mps,4mps,10mps。1mps采样频率,即1s采集一次。 循环模式读取数据:读取数据前要开启循环采集(指令0x2130,1mps,高重复性), 再重新发送指令0xE000,每次读完传感器数据寄存器都会清除。 如果传感器处于此模式,且正在采集数据,发送中断指令(0x3903),传感器将完成此次测量,进入单次采集模式。 下面是主要部分代码 #define SHT30_ADDR_WRITE 0x88 #define SHT30_ADDR_READ 0x89 #define ONE_SHOT 0x2c06 /*******************************************************/ #define PERIODIC_MODE_05S 0x2032// 0.5mps #define PERIODIC_MODE_1S 0x2130// 1mps #define PERIODIC_MODE_2S 0x2236// 2mps #define PERIODIC_MODE_4S 0x2334// 4mps #define PERIODIC_MODE_10S 0x2737// 10mps #define FETCH_DATA 0xe000 /********************************************************/ void sht30_single_mode(); void sht30_periodic_readdata(); void sht30_periodic_init(); void sht30_readdata(uchar m***,uchar l***); uint sht30_data[4]; extern uchar flag_1s; //1s读取一次数据发送到串口 int main() { usart_init(); sda=1; scl=0; delayms(10); sht30_periodic_init(); //sht30_single_mode(); while(1) { if(flag_1s==1) { flag_1s=0; sht30_readdata(0xe0,0x00); } } } void sht30_periodic_init() { i2c_start(); i2c_write_byte(SHT30_ADDR_WRITE); i2c_write_byte(0x21); i2c_write_byte(0x30); i2c_stop(); } void sht30_readdata(uchar m***,uchar l***) { float RH,T; i2c_start(); i2c_write_byte(SHT30_ADDR_WRITE); i2c_write_byte(m***); i2c_write_byte(l***); i2c_stop(); i2c_start(); i2c_write_byte(SHT30_ADDR_READ); sht30_data[0]=i2c_read_byte(1); sht30_data[0]<<=8; sht30_data[0]|=i2c_read_byte(1); sht30_data[1]=i2c_read_byte(1); sht30_data[2]=i2c_read_byte(1); sht30_data[2]<<=8; sht30_data[2]|=i2c_read_byte(1); sht30_data[3]=i2c_read_byte(0); i2c_stop(); T=-45+175*(1.0*sht30_data[0] / 65535); RH=100*(1.0*sht30_data[2] / 65535); ES=0; TI=1; printf("温度:%2.2f ℃,湿度:%2.2f %%RHn",T,RH); while(!TI); TI=0; ES=1; } |
|
|
|
只有小组成员才能发言,加入小组>>
2516 浏览 0 评论
1096浏览 2评论
707浏览 1评论
459浏览 0评论
200浏览 0评论
342浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 20:05 , Processed in 1.231886 second(s), Total 51, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号