又到了周末了,想起来芯源的开发板测评。我手里拥有一个dht11的温湿度传感器,就想着先把它驱动起来吧。只需要连接信号线和电源线,整个接线图如下:
DHT11是一种单总线的温湿度传感器,这种通信方式只有一根数据线。设备可以通过漏极开路或三态端口连接到数据线上,以允许设备在不发送数据时释放总线并让其他设备使用。为了让总线保持高电平状态,通常需要外接一个约4.7kΩ的上拉电阻。由于DHT11器件采用主从结构,只有在主机呼叫从机时,从机才能作出响应。因此,主机访问DHT11器件时必须严格遵循单总线序列,否则器件将不会响应主机。
读取数据的时序图如下:
我打算在提供的例程基础上进行开发,就在上次的闪灯程序基础上吧。首先需要增加一个dht11.c文件专门用于传感器相关的函数编写。按照dht11的时序图,首先是需要将数据线引脚设置模式,相关函数如下:
接着是dht11的复位函数,需要将信号线拉低18ms后再拉高,相关函数如下:
还有一个检测是否连接传感器的函数,用于在读取数据以前先测试一下是否连接了传感器,函数如下:
最后就可以读取数据了,单片机的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms(最大不得超过 30ms),然后单片机的 I/O 设置为输入状态,由于上拉电阻,单片机器的 I/O 即 DHT11 的 DATA 数据线也随之变高,等待 DHT11 作出回答信号,整个过程代码如下:
调试结果能正确读出温湿度:
本次测试进一步加强了自己的动手能力,同时也再次感谢平台提供的试用机会。
|