6704|5

62

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

分享湿度计的读写时序和编程 [复制链接]

湿度计的读写时序包括读时序和写时序,写时序如下:向 SH T21写8 个数据位 ,然后在第9 个时钟周期 ,读取 SHT21 的应答位 ,应位为 0 ,表示SHT21正确接收到了一个字节 ,也就是 8 个写时序加 1 个读时序。SH T21 读写数据的规则是:DA TA在 SCK时钟的下降沿之后改变状态 ,并在 SCK时钟的上升沿有效。从微控制器向 SHT21 写数据的角度来看 ,可以理解为上升沿将触发 SHT21 锁存数据 ,即微控制器在下降沿输出数据 ,再给出上升沿触发 SHT21 锁存数据。下降沿和上升沿之间的时间间隔需要满足 SHT21 的数据建立时间 TSU (最小值为 100ns) ,上升沿之后数据也需要保持一段时间 ,这段时间用于满足 SHT21 的数据保持时间 THO(典型值为 10ns) 。写时序的 C语言程序如下:
   int write_byte (int val)
  {int i ,er ror = 0 ;
  for (i = 0x80 ;i > 0 ;i = i > > 1)
   {if (i &val) outp ut_float (DA TA) ;
   el se outp ut_low(DA TA) ;/ /数据准备好
   outp ut_bit (SCK,1) ;/ /上升沿锁存数据
   outp ut_bit (SCK,0) ;/ /时钟线恢复为低电平
   }
   outp ut_float (DA TA) ;/ / MCU 释放数据线
   outp ut_bit (SCK,1) ;
  er ror = inp ut (DA TA) ;/ /读取应答信号
   outp ut_bit (SCK,0) ;
  ret urn er ror ;
  }
  写时序子程序的入口参数为待发送的数据 ,返回参数用于标识 SH T21 是否正确接收到数据。由于微控制器采用 4MHz的晶振 ,指令周期为 1μs ,能够满足 SHT21 的数据建立时间与数据保持时间 ,
故程序中没用使用延时指令。
  当 SHT21 完成测量后 ,微控制器需要发布读时序将测量结果读回。实现读时序首先需要实现 8个数据位的读取。SHT21 读写数据的规则是:DA2TA 在 SCK时钟的下降沿之后改变状态 ,并在 SCK时钟的上升沿有效。从微控制器读数据的角度理
解 ,时钟线的下降沿将触发 SHT21 接口内的锁存器输出数据 ,输出数据在时钟线上升沿之后达到稳定 ,下降沿和上升沿之间的时间间隔要大于 SH T21的输出数据有效时间 Tv (典型值为 250ns) ,即微控制器需要先给出下降沿 ,延时一段时间待数据稳定
后再读取数据。此外 ,微处理器需要在第 9 个时钟给出应答位 ,这属于写时序 ,写时序可参考前文的论述。读时序的 C语言程序代码如下 ,程序的入口参数为 0 或 1 ,0 代表给出应答位 ,继续接收后续数据;1 表示终止通信。

   int read_byte (int acknowledge)
   {int i ,val = 0 ;
  for (i = 0x80 ;i > 0 ;i = i > > 1)
  {outp ut_bit (SCK,1) ;
   if (inp ut (DA TA) ) val = val| i ;/ /时钟上升沿读取数据
   outp ut _ bit (SCK,0) ;/ /下降沿启动 SH T10输出下一位数据
  }
  if (acknowledge) outp ut_low(DA TA) ;
  el se outp ut_float (DA TA) ;
  outp ut_bit (SCK,1) ;/ /上升沿锁存数据   delay_us (3) ;/ /延时 3us让 SHT锁存数据
  outp ut_bit (SCK,0) ;/ /时钟线恢复为低电平
  outp ut_float (DA TA) ;/ / MCU 释放数据线
   ret urn val ;
   }
   综合写时序和读时序即实现温湿度的测量任务。微控制器首先发布一个启动传输时序 ,接着调用写时序发布温度或湿度(取决于入口参数)的测量命令 ,之后等待测量的完成 ,在测量完成后 ,调用读时序读回测量结
果。需要注意的一点是 ,仅当通信错误标志 er ror为 0 时,才说明通信正确 ,读回的结果有效。在主程序中若检测到通信错误标志 error 非零 ,需要使用复位时序 ,来复位串行端口 ,然后重新进行测量。

 

 

 

 


 

[ 本帖最后由 qwertyuiop11111 于 2010-8-19 15:24 编辑 ]

最新回复

  硬件SMBus与SHT21、PCF8563通信 https://bbs.eeworld.com.cn/thread-154322-2-1.html  详情 回复 发表于 2010-8-20 09:29
点赞 关注
 

回复
举报

66

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
谢谢分享谢谢分享谢谢分享谢谢分享
 
 

回复

640

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
好文章,学习了!  谢谢共享!
    问一下: SH21是I2C接口,
    1、如果软件模拟需要了解这些细节,模拟所有的这些信号。
    2、如果MCU有标准的I2C接口就可以使用I2C接口通讯,不了解这些细节可以使用SH21吗? 只是简单的写入、读取I2C的寄存器可以吗?因为我选了C8051F320套件,发现大家的程序就是用了C8051F320的硬件I2C也需要软件模拟SDA\SCK的信号,所以十分疑惑。
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 
不错,谢谢分享。。。。
个人签名我的博客
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

5
 

回复 板凳 zhdphao 的帖子

硬件应该不需要吧,注意速度就可以了。。。
个人签名我的博客
 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

6
 

原帖由 zhdphao 于 2010-8-20 07:01 发表 好文章,学习了! 谢谢共享! 问一下: SH21是I2C接口, 1、如果软件模拟需要了解这些细节,模拟所有的这些信号。 2、如果MCU有标准的I2C接口就可以使用I2C接口通讯,不了解这些细节可以使用SH21吗? ...

 

硬件SMBus与SHT21、PCF8563通信

https://bbs.eeworld.com.cn/thread-154322-2-1.html

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表