文章来源:http://www.emtronix.com/article/article2009316.html
英创嵌入式主板以其优异的稳定性、独特的设计及方便使用等优点,在嵌入式领域占有一席之地。在工业现场,经常有监测环境温度的需求,本方案应用DS18B20为温度采集芯片,与英创嵌入式主板的GPIO相连,就可以组成完整的测温系统。由于DS18B20每条总线上可以最多接8个测温点,那么英创嵌入式主板至少可以接64个测温点。
TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
图1 DS18B20管脚示意图
表1 DS18B20详细引脚功能描述:
序号 |
名称 |
引脚功能描述 |
1 | GND | 地信号 |
2 | DQ | 数据输入/输出引脚。开漏单总线接口引脚。 当被用着在寄生电源下,也可以向器件提供电源。 |
3 | VDD | 可选的VDD引脚。当工作于寄生电源时,此引脚必须接地。 |
图2 嵌入式主板与DS18B20连接示意图
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将嵌入式主板作为主设备,单总线器件作为从设备。每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件送回数据,在进行写命令后,主机需要启动读时序完成数据接收。数据和命令的传输都是低位在先。
下面是18B20的时序图,根据时序的要求,改变GPIO的电平,可以完成18B20的操作。
DS18B20复位时序
根据以上DS18B20的时序,初始化的函数如下:
Init18b20()
{
char flag;
OutBit(1);
Delayus(1);
OutBit(0);
Delayus(600); //复位信号480—960us
OutBit(1);
Delayus(60); //等待15-60us
if(ReadBit()) //检查存在电平,如果为低,说明18B20正确复位
{
printf('init fail');
return false; //detect 1820 fail!
}
else
{
Sleep(1);
OutBit(1);
return true; //detect 1820 success!
}
}
DS18B20的数据读写时通过时间间隙处理位和命令字来确认信息交换。
【查看全文】
【技术交流】
【更多文章】
【关于英创】