DS18B20数字温度传感器

项目场景:

DS18B20数字温度传感器_第1张图片
DS18B20数字温度传感器_第2张图片
DS18B20数字温度传感器_第3张图片
DS18B20数字温度传感器_第4张图片
64位光刻ROM编码
每个DS18B20的片内ROM都存有一个独一无二的64位编码。
在该ROM编码的低8位保存有DS18B20的分类编码:28h;
中间的48位是独一无二的序列号;最高8位是前面56位的CRC循环冗余校验码(CRC=X8+X5+X4+1)。
因为每个DS18B20的序列号都不一样,所以一条总线上可以控制多个DS18B20。
DS18B20数字温度传感器_第5张图片

DS18B20数字温度传感器_第6张图片

DS18B20实现温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行初始化操作,初始化完成后发送一条ROM命令,最后发送RAM命令,这样才能对DS18B20进行预定的操作。
初始化
单总线上的所有操作符都必须以初始化为开始。初始化的序列由总线上的主设备发出的复位脉冲以及紧跟着从主设备回应的存在脉冲构成。该脉冲是让总线主设备知道DS18B20在总线上并准备好运行。
ROM命令
搜索ROM[F0h]、读ROM[33h]、匹配ROM[55h]、跳过ROM[CCh]、警报搜索ROM[ECh]
ROM命令
温度转换[44h]、写入暂存器[4Eh]、读取高速缓存器[BEh]、复制高速缓存器[48h]、召回EEPROM[B8h]、读取供电模式[B4h]

DS18B20数字温度传感器_第7张图片
DS18B20数字温度传感器_第8张图片


问题描述

提示:这里描述项目中遇到的问题:

例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:

@Override
	public void run() {
		bytes = mmInStream.read(buffer);
		mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
	}

原因分析:

提示:这里填写问题的分析:

例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。


解决方案:

提示:这里填写该问题的具体解决方案:

例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()

你可能感兴趣的:(fpga开发)