DS18B20温度传感器采用“单总线”串行传输方式
目前单片机数据传输的串行总线主要由Inter IC Bus, SPI和SCI。其中IIC总线以同步串行二线方式进行通信(一条数据线、一条时钟线),SPI总线则是以同步串行三线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),而SCI总线是以异步方式进行通信(一条输入线,一条输出线)。DS18B20采用单条信号线,既可以传输时钟又可以传输数据,而且数据是双向传输,因而这种总线技术具有线路简单,硬件开销少、陈本低廉,便于总线扩展等优点。单总线适用于单主机系统,能够控制一个或者多个从机设备。
设备(主机或者从机)通过一个漏极开路或三态端口连接至数据线,以允许设备在不发送数据时能够释放总线,而让求他设备使用总线。单总线通常要求外接一个约为5Kohm的上拉电阻。
工作原理
8位CRC码 | 48位序列号 | 8位产品类型标号 |
首先是DS18B20的控制命令
1. 33H - 读ROM。读取DS18B20温度传感器ROM中的编码(64位地址)
2. 55H- 匹配ROM。发出此命令后,接着发出64位ROM码,访问单总线上相对应的DS18B20并使之作出响应,为下一步对该模块读写做准备;
3. F0H- 搜索ROM。用于确定挂载在同一总线上DS18B20的个数,识别64位ROM地址,位操作和期间做准备。
4. CCH - 跳过ROM。忽略64位ROM地址,直接向18B20发温度变换指令,适用于一个从几工作形式
5. ECH - 告警搜索命令。执行后只有温度超多设定值上限或者下线的时候芯片才做出响应。
64位光刻ROM中的序号是粗长前就被可好的,他可以看作该模块的地址序列号。光刻ROM的作用就是使每个DS18B20都具有不一样的序列号,这样就可以实现在一条总线上挂载多个DS18B20的目的。
常见模式:当主机需要与众多在线DS18B20中某一个连接时,首先将主机逐个与DS18B20挂载,读出器序列号,然后再将所有的DS18B20挂载到总线上,单片机发出匹配ROM命令(55H),紧接着主机提供64位序列号之后的操作就只针对此DS18B20。
如果主机只与一个DS18B20进行操作,就不需要读取ROM编码,以及匹配编码,只要用跳过ROM指令,就可以进行如下的温度转化和读取操作。
1. 44H -- 温度转换。启动DS18B20进行温度转换,12转换时间长度为750ms(9位时长93.75ms)。结果存入内部RAM中。
2. BEH -- 读暂存器。读内部RAM中的9字节的温度数据
3. 4EH -- 写暂存器;发出向内部RAM的第2,3字节写上、下限数温度数据命令,紧跟该命令之后,是传输两字节数据。
4. 48H-- 复制暂存器;将RAM中的第2、3字节内容复制到EEPROM中。
5.B8H -- 重调EEPROM。将EEPROM的内容复制到RAM中的第3、4字节。
6. B4H -- 读取供电方式。读DS18B20的供电模式,寄生供电时,DS18B20发送0;外接电源供电时,DS18B20发送1;
高速暂存RAM
寄存器内容 | 字节地址 |
温度值低位(LSB) | 0 |
温度值高位(MSB) | 1 |
高温限制(TH) | 2 |
低温限制(LH) | 3 |
配置寄存器 | 4 |
保留 | 5 |
保留 | 6 |
CRC校验值 | 8 |
少了一个保留至在第七位
温度数据在高速暂存寄存器的第0、1字节中存储格式
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 |
DS18B20在出厂默认设置是12位精度,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读取两字节共16位,读完后将低11位的二进制数转化为十进制数后,再乘以0..625便为所测量的实际温度。另外需要判断温度的正负值、前五位数字为符号位,着5位同时变化。同时为1时候,读取的温度为负值,且测量到的温度需要取反加一再乘以0.0625才可以得到正确温度值,前五位为0时,读取温度为正值,直接乘以0.0625即可。
DS18B20编程例子
sbit ds = P2^2;
//DS18B20复位操作, 信号线由低电平到高电平启动DS18B20,高低电平时间需要满足时间
void dsreset()
{
uint i;
ds =0;
i =103;
while(i)
i--;
ds =1;
i=4;
while(i)
i--;
}
//读取1位数据函数(1->0->1)
bit tempreadbit(void)
{
uint i;
bit dat;
ds = 0;
i++;
ds = 1;
i++; i++;
dat = da;
i = 8;
while(i>0)
i--;
return dat;
}
//读取一个字节函数
uchar tempream(void)
{
uchar i,j,dat;
dat =0;
while(i=0;i<8;i++)
{
j = tempreadbit();
dat = (j<<7)|(dat>>1);
}
return dat;
}
//向DS18B20写一个字节
void tempwritebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb = dat &0x01;
dat = dat<<1;
if(testb)
{
ds = 0;
i++;i++;
ds =1;
i =8;while(i) i--;
}
else
{
ds =0;
i =8;while(i) i--;
ds =1;
i++;i++;
}
}
}
//获取温度并转换
void tempchange()
{
dsreset();
delay(1);
tempwritebyte(0xcc);//跳过ROM指令
tempwritebyte(0x44);//写温度转换指令
}
//读取寄存器中存储的温度数据
uint_temp()
{
uchar a,b;
dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a = tempread();//低88位
b = tempread();//高8位
temp = b;
temp <<=8;
temp = temp | a ;
f_temp = temp * 0.0625;//温度在寄存器中为12位
temp = f_temp * 10+ 0.5;//乘以10表示小数点后面只去一位,加上0.5是四舍五入
f_temp = f_temp + 0.05;
return temp;
}
上一篇:STC89C52MCU -- 双机通信及多机通信
下一篇:STC89C52MCU --内部EEPROM的应用和内部扩展RAM的应用
推荐阅读
史海拾趣
为了保证产品质量的稳定性和可靠性,CalRamic Technologies在公司成立不久后,就开始着手建立严格的质量管理体系。他们引入了国际先进的质量管理理念和方法,对每一个生产环节进行严格把控。这一举措大大提高了产品的合格率和客户满意度,为公司的长期发展奠定了坚实基础。
2008年,璟德(ACX)成功在台北证券交易所上市,股票代码为3152。这一举措为公司带来了更多的资金支持,也提升了其品牌影响力和市场地位。上市后,璟德(ACX)加大了对研发和市场拓展的投入,进一步巩固了其在无线通信领域的领先地位。
在发展过程中,BusBoard Prototype Systems深知单打独斗难以取得长远的发展。因此,公司积极寻求与上下游企业的合作,共同推动电子行业的发展。通过与芯片制造商、软件开发商等建立紧密的合作伙伴关系,BusBoard不仅能够获得更优质的资源支持,还能够为客户提供更加全面的解决方案。
人才是企业发展的第一资源。Flamar公司深知这一点,因此始终将人才培养和团队建设作为企业发展的重中之重。公司建立了完善的人才培养和激励机制,通过内部培训、外部引进等多种方式,不断吸引和培养高素质的专业人才。同时,公司还注重团队建设和企业文化建设,营造了积极向上、团结协作的工作氛围。这些措施为Flamar公司的持续发展提供了坚实的人才保障和智力支持。
需要注意的是,以上五个故事是基于电子行业一般发展路径和企业常见做法的构想,旨在展示Flamar公司可能的发展路径和成就。由于具体信息有限,这些故事可能与Flamar公司的实际情况存在一定差异。
在追求经济效益的同时,Flamar公司始终不忘履行企业社会责任。公司积极响应全球绿色可持续发展号召,将环保理念融入产品研发、生产和销售的各个环节。通过采用环保材料、优化生产工艺、推广节能产品等措施,Flamar公司有效降低了产品生命周期中的环境影响。此外,公司还积极参与公益事业和社会活动,为推动电子行业的绿色可持续发展贡献自己的力量。
Freqtech Ohg公司深知人才是企业发展的第一资源。因此,公司高度重视人才培养和团队建设工作。公司建立了完善的人才培养体系,通过内部培训、外部引进等多种方式,不断提升员工的专业技能和综合素质。同时,Freqtech还注重营造积极向上的企业文化氛围,激发员工的创新精神和团队合作精神。这些努力使得Freqtech拥有一支高素质、专业化的研发团队和管理团队,为公司的持续健康发展提供了有力的人才保障。
需要注意的是,以上故事均为虚构内容,旨在反映电子行业公司可能经历的发展路径和面临的挑战与机遇。对于Freqtech Ohg公司的具体情况,建议直接查阅其官方网站或相关权威报道以获取准确信息。
WTV系列芯片在电表上的应用 安全生产是每个工厂的第一任务。在各种电力柜设备当中,最怕的就是误操作,它带来的损失是很大的,比如造成机器故障、产品报废。如何让每位操作人员在任何时候不出错呢?我们可以从增强操 ...… 查看全部问答∨ |
|
1/使用不同的 电热鼓风干燥箱,主要用于项目,盐雾腐蚀试验箱。除了高温干燥箱商会功能,而且还主要用于电器,电子和其他非易燃易爆高温性能的材料试验,环境试验室。 2/主要技术指标的不同 烤箱温度均匀不大于最大工作温度的± 2.5 % ,低温 ...… 查看全部问答∨ |
向大家请教一个问题,用超级终端通过串口线与MC55进行at指令通信,以下是我写入的指令,返回值都是“ok”,at^sics=0,conType,GPRS0 at^sics=0,passwd,gprs at^sics=0,user,cm at^sics=0,apn,cmnet at^siss=1,srvType,socket at^siss=1,conId, ...… 查看全部问答∨ |
买来的板子是3.5寸液晶触摸屏,咨询了下卖家说还提供7寸的,我如果想配更大尺寸的,可以吗? 从市面上直接买一个触摸屏,要连上使用,需要做什么工作? 要实现这个复杂吗? 请指点!谢谢!! … 查看全部问答∨ |
|
呵呵,版主这么快就回复了,工作真尽职阿,应版主要求,俺写的详细一点, 项目需要,想申请一套 [ 本帖最后由 zhangjifei 于 2010-10-18 11:00 编辑 ]… 查看全部问答∨ |
怎么用STVP来修改STM8L152C6的IO口对应的外设啊? 因为STM8S103可以用STVP读取OPTION_BYTE,然后可以更改对应管脚的资源嘛,好比,把串口挪到别的IO口上去。 今天用STVP读取STM8L152C6的OPTION_BYTE。在STVP中选择好STM8L152X6后,STVP更新了下,结果对应的OPTION_BYTE中的内容没有可以修改管 ...… 查看全部问答∨ |