一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: 倪大德
收起左侧

关于用PC控制的几种方式

  [复制链接]
发表于 2010-4-12 08:57 | 显示全部楼层
用并口控制外部设备还是很方便的
发表于 2010-4-12 22:44 | 显示全部楼层
本帖最后由 狗狗百里游 于 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下用汇编驱动电脑主板串口...

123.PNG
发表于 2010-4-17 05:24 | 显示全部楼层
学习 顶
发表于 2010-4-18 18:35 | 显示全部楼层
我用电脑主板的串口读取ds18b20,改进了一下程序,统计数据校验失败的次数,还是很好用的。

如果读取的数据校验失败,就最多重复读取16次。
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(0次错误) 温度=85.0000度 代码=0550 温度校验成功(2次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(0次错误) 温度=22.6875度 代码=016B 温度校验成功(1次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(0次错误) 温度=22.6875度 代码=016B 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(2次错误) 温度=22.6250度 代码=016A 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(2次错误) 温度=22.6250度 代码=016A 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(4次错误) 温度=22.6250度 代码=016A 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(13次错误) 温度=22.5625度 代码=0169 温度校验成功(3次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(7次错误) 温度=22.5625度 代码=0169 温度校验成功(4次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(7次错误) 温度=22.5625度 代码=0169 温度校验成功(1次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(6次错误) 温度=22.5625度 代码=0169 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(12次错误) 温度=22.5000度 代码=0168 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(2次错误) 温度=22.5000度 代码=0168 温度校验成功(3次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(5次错误) 温度=22.5000度 代码=0168 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(0次错误) 温度=85.0000度 代码=0550 温度校验成功(1次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(3次错误) 温度=85.0000度 代码=0550 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(3次错误) 温度=22.6875度 代码=016B 温度校验成功(1次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(3次错误) 温度=22.6875度 代码=016B 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(15次错误) 温度=22.5625度 代码=0169 温度校验成功(3次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(2次错误) 温度=22.5625度 代码=0169 温度校验成功(0次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(3次错误) 温度=22.5625度 代码=0169 温度校验成功(1次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(8次错误) 温度=22.5625度 代码=0169 温度校验成功(2次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(1次错误) 温度=22.5625度 代码=0169 温度校验成功(1次错误)
DS18B20外部电源供电! ID:2853DAD100000004 ID校验成功(5次错误) 温度=22.5000度 代码=0168 温度校验成功(8次错误)
未命名.PNG
发表于 2011-1-9 23:37 | 显示全部楼层
这里的朋友真大方,水平真高,学习!
发表于 2012-1-11 11:59 | 显示全部楼层
我用电脑主板的串口读取ds18b20,改进了一下程序,统计数据校验失败的次数,还是很好用的。
如果读取的数 ...
狗狗百里游 发表于 2010-4-18 18:35 https://www.yleee.com.cn/images/common/back.gif


我的点阵屏的温度显示值“偶尔”会明显出错——是S52mcu的驱动板——一般几天会“看到”一次;
不知道可否利用您的方法来验证,是18B20的硬件部分的问题,还是驱动软件处理的问题?
不过,我是“软件盲”,还没有看清楚您的PC软件、怎么样实际使用???
   
发表于 2012-1-11 20:33 | 显示全部楼层
上面的原理图,忽略24cxx的部分,
我是用主板自带的串口,降压取5v点,利用串口的IO读写18b20,然后用delphi编写读写串口IO的程序。
利用这个原理,也可以用主板自带的串口读出旋转编码器,旋转的方向步进。
 楼主| 发表于 2012-1-12 08:11 | 显示全部楼层
我的点阵屏的温度显示值“偶尔”会明显出错——是S52mcu的驱动板——一般几天会“看到”一次;
不知道 ...
无锡风 发表于 2012-1-11 11:59 https://www.yleee.com.cn/images/common/back.gif



               18B20在单位用了超千只,个人感觉还是软件问题!

现在一般自己玩18B20,在编写18B20程序时很少读ID,进行CRC校验。这是其一。

同时在编写18B20程序时一定要按严格时序要求,一些看似能正常读写温度,好象没问题。

如果用稍长的线引出,就会发现频频出错!
发表于 2012-1-12 09:34 | 显示全部楼层
18B20在单位用了超千只,个人感觉还是软件问题!
现在一般自己玩18B20,在编写18B ...
倪大德 发表于 2012-1-12 08:11 https://www.yleee.com.cn/images/common/back.gif


      正好要请教 倪工!
      您的“164驱动4-led的LED数码管”轮流显示时分、温度的程序,一直使用比较稳定——只是极偶尔,会温度显示跳动(好像无缘无故会瞬间显示41℃(好像是41?)。

      (去年)曾经两次请 沈兄两次买了几个 18B20,居然都忘记放到哪里去了!
      只好把这个“164驱动4-led的LED数码管”驱动板上面的 18B20,拆下来在别的地方使用......

      一开始,这个“164驱动4-led的LED数码管”驱动板上面的 18B20拆下来之后,温度显示值“固定显示”为15℃,心知肚明......呵呵......
      去年年底之前,可能是天冷了?温度显示值“交替显示”为69℃/70℃,看着“挺难受”的!
      不知道,为什么不是15℃了?
      不知道,怎么样让它“不跳”???

      谢谢先!
 楼主| 发表于 2012-1-12 18:52 | 显示全部楼层
正好要请教 倪工!
      您的“164驱动4-led的LED数码管”轮流显示时分、温度的程序,一直使用 ...
无锡风 发表于 2012-1-12 09:34 https://www.yleee.com.cn/images/common/back.gif



         要改写软件!

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-26 00:49 , Processed in 0.049426 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表