1、 计科 111-201100814121-曹新想第 1 页 共 7 页实验五 温湿度传感器实验一、实验目的 理解温/湿度传感器采集温/湿度的工作过程。 理解温/湿度传感器驱动的编写。 二、实验环境 硬件:PC 机,EBDCC2530 节点板(附带 SHT1X 型温湿度传感器) ,USB 接口仿真器,6Pin 串口线,交叉串口线。 软件:Windows 98/2000/NT/XP,IAR 集成开发环境,串口调试助手。 三、实验原理 温/湿度传感器 SHT1X 有四个引脚接口,它和 EBDCC2530 节点板的连接方式如下图所示:传感器的 DATA 引脚和 SCK 引脚连接到 CC2530 的 P
2、0.4 和 P1.5 上,SCK 引脚是传感器的时序输入,主机可以通过 P1.5 引脚输出高低变换的时序控制传感器的工作;DATA 引脚为传感器的双向数据输入/输出引脚,用来向传感器发送命令或者读取采集的温/湿度值。 该传感器的工作时序类似于 IIC 总线,每个命令对应着一个特殊的时序输出,根据 SHT1X 的时序特点,依次控制 DATA 和 SCK 的输出,可以实现对传感器的命令写入和数据读出。 首先通过设置至少 9 个周期的 DATA 高电平来初始化 SHT1X;然后发送“传输开始”命令开始数据的采集;如果传感器正确的接收到命令,会在 DATA 引脚回复一个先低后高 ACK 信号,否则继续
3、发送“传输开始”命令。在正确接收到 ACK 应答后温度采集将等待大约320ms(温度采集的分辨率为 14 位,为此手册给出的 14 位分辨率的最大等待时间) ,湿度采集将等待 80ms(湿度采集的分辨率为 12 位,为此为手册给出的 12 位分辨率的最大等待时间)内传感器就能计算出采集到的温/湿度值,并且通过在 DATA 引脚输出低电平表示计算的完成。判断出这个低电平到来之后,接下来每个周期内采集一个 bit,直到采集两个字节的温/温度值,最后处理器应当通过下拉 DATA 通知传感器该采集过程的结束。若等待了最大转换时间 DATA 仍未变低,则直接退出采集过程。若没有采集到数据,程序将向串口打
4、印的结果为 0。计科 111-201100814121-曹新想第 2 页 共 7 页四、实验步骤 1、首先,请在 EBDCC2530 节点板(附带 SHT1X 温湿度传感器)上闭合 J7 的 12 引脚选通tempsck。正确连接 USB 仿真器的下载线和 EBDCC2530 节点板。把 6Pin 串口线的一端连接到 EBDCC2530 节点板的 UART 接口,另一端连接到交叉串口线的母头端口,交叉串口线的另一端连接到 PC 机的公头端口。 2、打开实验源码 sht1x.eww(路径为:出厂光盘 DISK-EMBV210-WSN05-Example3 传感器接口实验3.2 Sensor_SH
5、T1X) ,编译工程,依次选择“Project”“Download and Debug”,下载到 CC2530 节点板。 3、把仿真器左侧的 USB 接口拔掉,然后拔掉连接在 EBDCC2530 节点板 DBG 位置的调试接口。我们打开 EBDCC2530 节点板右下方的电源开关。 (在不拔掉仿真器的情况下,我们可以通过相关的调试进一步观察程序的运行情况。 )4、在 PC 机上打开串口调试助手软件,设置正确的串口号(即端口的 COM 号) ,波特率为57600,校验位为 NONE,数据位为 8 位,停止位为 1 位。则可以看到传感器采集到的温度值、湿度值。五、实验结果六、附录(部分源代码)in
6、t main( void ) unsigned char high,low;unsigned short result;float temper;float rh1,rh2;unsigned char i;xtal_init();计科 111-201100814121-曹新想第 3 页 共 7 页Uart0Init(0x00,0x00);while(1)high=0;low=0;/获取温度值 initport(); /初始化 DATA 和 SCK 位 init_SHT1x();start_send();send_command(MEASURE_TEMP_COMMAND);P0DIR SCK=0
7、; halWait(2);halWait(2);SCK = 1;halWait(3);SCK =0;while(DATA=0);halWait(250);halWait(70);while(DATA=1)SCK=1;halWait(3);SCK=0;halWait(3); high = read_data(8);high P0DIR |= 0x10;DATA = 0;SCK = 1;halWait(3);SCK = 0;halWait(3); 计科 111-201100814121-曹新想第 4 页 共 7 页P0DIR halWait(2);low = read_data(8);result
8、 = (unsigned short)high(7-i); SCK=0;halWait(4);DATA=(move/Uart_Send_char (DATA+48);halWait(4);SCK=1;halWait(4);计科 111-201100814121-曹新想第 7 页 共 7 页read_data:从 DATA 端读取相应位数的信息unsigned char read_data(unsigned char count)unsigned char i,data; data=0x00;for(i=0x80;i0;i/=2)SCK = 1;halWait(1);if(DATA=1)data |= i; /DATA is read when SCK is high halWait(1);SCK = 0;halWait(2);return data;7、实验总结本实验是记录温湿度传感器的数据,也是通过串口调试工具的可视化界面显示出来,需要注意的是温度显示的是芯片的温度而不是室内的温度。