钻石会员
  
主题
帖子
积分11063
阅读权限50
注册时间2009-12-25
最后登录1970-1-1
在线时间 小时
|
本帖最后由 狗狗百里游 于 2010-4-18 06:12 编辑
我前几天在电脑上编了个上位机,直接用串口,操作IO,读ds18b20,了我多年的心愿,因为一直都没动手编........
读10次,有8次是数据是正确的,当然,如果拼命开游戏,复制文件调试,错误率更大
估计是有高频干扰从电脑串口输出,而不管我怎么调试硬件,都不能成功在串口上用寄生供电读18b20.估计是干扰太大,我没示波器,没办法测串口有没有干扰波形
因为读18b20需要15us之内的分辨率。
获取温度有crc8,10次对8次,都可以识别正确的温度,这到没什么,我就不明白,18b20设计读ID号的时候,为什么不返回crc8啊,这样就无法保证读取的id是正确的了。现在是用电脑串口读18b20温度可以,一机多用嘛,但读id就不保证是对的了
我上面说错了,其实ds18b20读id号的时候,返回有crc8的。
unsigned char id_buff[8]; //返回8个字节的ID码
//如果是18b20,id_buff[0]=28h
//如果是18b20,id_buff[7]=前面56位的CRC编码
//8位CRC/48位序列号/8位系列码
//每只DS18B20 都有一个唯一存储在ROM 中的64位编码。最前面8位是单线系列编码:28h。
//接着的48 位是一个唯一的序列号。最后8位是以上56位的CRC编码。
我是用小马PonyProg2000读写24cxx的电路,修改成读18b20两用,读写24cxx分辨率是1ms以上都可以,所以用电脑串口取电跟读写24cxx是可靠的,读18b20需要15us之内的分辨率。谁有条件,可以用示波器测两一下电脑串口有多大的波形干扰啊?谢谢
刚刚开窍,为什么不能成功在串口上用寄生供电读18b20
//而如果是在寄生电源模式下,设置命令后,需要10us内设置为强上拉
我的cpu是2500兆,设置串口IO高电平或低电平,跟读IO电平状态,3个命令完成花时间都是26 us到9 us 左右,
完成写串口IO,已经超过10us了,哎呀,26 us到9 us 左右的时间差,就是造成读出的数据有一定几率是错误的原因吧。看来还得等电脑速度再快10倍,才能把26 us到9 us 的时间缩短。或者在dos下用汇编驱动电脑主板串口...
|
|