5680|2

17

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM8 IO口模拟单总线从设备 [复制链接]

看了下DS18B20的时序图,单总线对时间要求比较严格。
对于主设备个人觉得好理解,发送完命令就堵塞接收,超时退出即可。但是对于从设备,我就有点模糊了。下面是我定的协议。
从设备平时处于睡眠状态,总线正常处于高电平(空闲)。主设备拉低总线5ms表示起始信号,之后以120us为1bit的周期连续发送8位。占空比80us为1,占空比40us表示0。8位发送完即释放总线。
我现在有几个问题
1. 从设备采用外部中断来捕捉起始信号后,采用什么方法去验证起始信号有效呢。程序堵在外部中断里面去计时吗?
2. 起始信号有效后,由于没位数据时间非常短,必然采用堵塞的方法去读取。我通信一包数据有20个字节,这样发完至少得损耗20ms。我的其他中断几乎就不能响应了
3.每包数据是否需要增加ACK

本人新手,希望给位大牛不吝赐教!
此帖出自stm32/stm8论坛

最新回复

1. 不要卡在中断里。检测的外部中断后,开启定时器,检测到电平再次变高,停止计数,读取当前计数值,根据定时器频率,算出时间,是不是大概5ms。 另一种方式,检测到外部中断,主循环用一个变量计数,记录脉冲宽度。这个准确度稍微差一些。你看看能不能正确判断大概脉宽。 2.你看看不能被丢掉的中断有几个,要是比较多的话,可以考虑用两个单片机。要是少的话,看看能不能把中断处理函数内语句写的很少。快速执行完。不破坏单总线数据。 3.很久没碰了。早忘了。看时序说明把。没说就不用。  详情 回复 发表于 2017-3-8 21:46
点赞 关注
个人签名千古情怀何寄!
 

回复
举报

3471

帖子

13

TA的资源

五彩晶圆(高级)

沙发
 
1. 不要卡在中断里。检测的外部中断后,开启定时器,检测到电平再次变高,停止计数,读取当前计数值,根据定时器频率,算出时间,是不是大概5ms。 另一种方式,检测到外部中断,主循环用一个变量计数,记录脉冲宽度。这个准确度稍微差一些。你看看能不能正确判断大概脉宽。
2.你看看不能被丢掉的中断有几个,要是比较多的话,可以考虑用两个单片机。要是少的话,看看能不能把中断处理函数内语句写的很少。快速执行完。不破坏单总线数据。
3.很久没碰了。早忘了。看时序说明把。没说就不用。
此帖出自stm32/stm8论坛

点评

想到个方法: 定义两个计时变量(x,y),直接配置总线为边沿触发中断。每次进中断(电平翻转)赋值定时变量(TIM1->CNTRH),并根据x,y的差值来判定时序是否有效。检测完成后赋值完成标志让上层去解析。 准确去实  详情 回复 发表于 2017-3-9 09:02
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
ienglgge 发表于 2017-3-8 21:46
1. 不要卡在中断里。检测的外部中断后,开启定时器,检测到电平再次变高,停止计数,读取当前计数值,根据 ...

想到个方法:
定义两个计时变量(x,y),直接配置总线为边沿触发中断。每次进中断(电平翻转)赋值定时变量(TIM1->CNTRH),并根据x,y的差值来判定时序是否有效。检测完成后赋值完成标志让上层去解析。
准确去实践下
此帖出自stm32/stm8论坛
 
个人签名千古情怀何寄!
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表