SHT7X、2X使用笔记

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

温湿度传感器SHT7X和SHT2X系列的个人笔记:

官方资料下载:

/download_sd.aspx

1:使用时硬件部分注意:

A:电源端需接100nF或以上退偶电容。

B:DATA、SCK需要接上拉电阻到其正电源端。

C:若走线过长,DATA与SCK之间最好加地线或电源线隔离。

D:MCU不能用带+5V输出的I/O口去直接驱动。MCU需用不带内上拉电阻的集电极输出端或外加+3V转换隔离电路去连接SHT,否则出错或损坏SHT。

E:上电后,需等待至少11ms的时间让SHT进入休眠状态(即等待状态)后再驱动SHT。

2:软件:

A:SHT7X系列和SHT2X系列驱动方式或协议有区别,SHT2X 的D系列是IIC方式,而SHT7X并非标准IIC协议,具体看手册。SHT2X还有SDM比特流、PWM的接口系列,这里我们仅讨论常用的IIC系列。

B:SCK时钟线相对其它数字芯片,运行频率过低。驱动时需按手册上做相应延时。

C:测量命令发出,给充足等待时间,实验时设置>200ms,实验通过之后,再进行多次小幅减小等待时间测试,直到稳定、高速。但测量频率不宜过高,随着测量频率增加,其电能损耗会使自身温度有相

应上升,会影响测量精度。在满足产品要求的前提下尽量延长测量周期,当然并非无限延长,一般控制在1秒钟1~3次的测量为宜,具体测量上限频率按照手册和根据实际要求情况而定。

网站资料有C历程,但过于庞杂,特别是SHT2X系列,没必要每句都读到,大家可以挑着重点分析,主要是通讯过程细节实现和CRC 校验。

3:关于CRC校验:

具体原理大家看相应文献,这里主要强调以下:

A:SHTXX使用CRC8校验,沉余多项式:P(x)=x^8+x^5+x^4+1=100110001=0x131;(手册中多项式不包括最末位1)

B:校验原始数据:SHT7X系列需从开始的地址到命令符直至测量数据全部进行CRC沉余运算;而SHT2X系列只需对测量结果:CRC 码前16位温湿度二进制数据进行CRC沉余运算。

C:CRC添加到信息帧中顺序:SHT7X系列需高低位翻转后即MSB 变为LSB```LSB变为MSB,加到信息帧末尾。而SHT2X系列不需高低位翻转,CRC直接加到信息帧末尾。

4:关于PROTEUS仿真:仿真软件中SHT7X系列CRC并未进行翻转,若翻转CRC校验会报错,跟实际使用不符,这里大家要注意;笔者当初卡这老半天,最后才发现。至于SHT2X——完全没响应!仿真时一直有莫名错误,实际已完全正常,包括CRC,但仿真时仍有错误。主要公司需要保留过程全部资料文档,包括仿真历程,

希望有明了SHT2X仿真问题原因的,告知大家,由于工程有限,笔者不能继续仿真测试,此次工程过后再分析。(使用的版本是:PROTEUS7.10破解非正版,貌似此原因跟非正版没多大关系)

其余补充说明:

在KEIL编译时,例如若定义一个整形变量:unsigned int i,进行/求模运算时:例:22000/320,结果不正确,而改为22000.0/320.0时结果正确。恕笔者才疏学浅,学校时没好好听课,不知此现象具体原因。若定义菲整形如float i,怎么都正确。自己找资料看吧。在此对后面计算编写出错时,有类似现象的作下参考。以下附上SHT71和SHT21完整调试程序,全部全局变量:(使用MAX7219驱动共阴数码管显示)(不含寄存器操作,局部注释)SHT21:

#include

#include

#include

#include

#include

#define uint unsigned int

#define uchar unsigned char

uchar code table[]={ //共阴数码管:0、1、2、3、4、5、6、7、8、9、-、不显示;0x7e,0x30,0x6d,0x79,

0x33,0x5b,0x5f,0x70,

0x7f,0x7b,0x01,0};

uint i,ii,yyi,crc1;

uchar vv,crc0,imm,error=0;

float TEMP=0,HUMI=0;

sbit DIN=P2^0; //MAX7219接口定义,数据总线

sbit LOAD=P2^1; //MAX7219接口定义,片选位

sbit CLK=P2^2; //MAX7219接口定义,时钟信号端

sbit SCL_sht=P0^0; //SHT21接口定义,时钟信号端

sbit SDA_sht=P0^1; //SHT21接口定义,数据总线

sbit TES=P2^6; //正常一次测量完成信号,低电平有效,外接一LED

sbit ERR=P2^7; //故障位定义,低电平有效,外接一LED;

void MAX7219_init(); //MAX7219初始

void LEE(uint e); //MAX7219子函数,SPI方式

void MM(); //显示数据送往MAX7219

void EEi_sht(); //SHT2x主函数

void SHT2x(uchar yi); //SHT2x子函数

void write_sht(uchar yii); //IIC_WRITE

void read_sht(bit x_ack);

void SAT_sht();

void SOP_sht();

void soft_rest_sht();

void crc_8(); //CRC校验;生成多项式:P(x)=x^8+x^5+x^4+1=100110001=0x131; void delay();

void init();

void main()

{

init();

while(1)

{}

}

void init()

{

MAX7219_init(); //MAX7219初始

TMOD=0x01; //定时器0初始,方式1

EA=1;

ET0=1;

TR0=1;

TH0=0;

TL0=0;

}

void MAX7219_init()

{

LEE(0xff01);

LEE(0xf900);

LEE(0xfa0e); //段电流设定

LEE(0xfb07);

LEE(0xfc01);

LEE(0xff00);

}

void LEE(uint e)

{

uint zz;

LOAD=0;

for(zz=0x8000;zz>0;zz>>=1)

相关文档
最新文档