如何做到两个设备在RS485总线上,无同步信号,LED闪烁同步?
如果设备1和设备2收到广播信号开始后,在定时器控制下,
LED灯同时亮1秒,再同时灭1秒。
过7,8分钟后,发现两台设备灯亮灭时间
完全失步,比如原来是同步亮灭的,后来出现,设备1号的灯跟设备2号的灯,变成一亮一灭了。
要怎么做到同步?
个人认为是由于单片机时钟晶振误差累积造成的。
第1种方式,可以把1号机做成主机,2号机做成从机。
主机发送同步信号给从机,这样2号机会跟1号机完全同步。
第2种方式,可以由主机定时发送广播同步信号给设备1和设备2.
但现在问题是,这两种方式都不能用。
设备1号和设备2号,只能接收总线上的数据。而且没有同步信号。
那要如何做到同步?请教 485 同时也可收别的设备数据,只是不要而以,要了不就解决了吗?
小CASE。 可能我表述不太清楚吧。
两个设备都是挂在RS485总线上的。
而且两个设备都处于从机接收数据状态。
主机(上位机)发送第一个同步广播信号后,两个从机开始同步闪烁。
然后过7,8分钟后,两个指示灯闪烁不同步。 主机只发了个起跑命令,然后让两个运动员自己开跑,还要跑得一致,在没有外部干预的情况下,那只能是这两个运动员从里到外都一样了。 你时钟一致就可以了噻
现在的时钟精度来看,你的以0.5秒应该都可以接受
以目前的MCU来看,不用加外部RTC,都应该可以满足你的要求。 软件实现的问题吧,就算50ppm的晶体也不至于几分钟就差了1秒。 两个从机的处理程序可能不一样,把亮灯的优先级设置为最高吧。 220v同步 两个从机的处理程序,肯定是一样的。定时器已经是最高优先级了。
我听说可以引入交流来进行同步,应该也是楼上这位楼主说的方案。
但不知道怎么做。 继续关注中,求大神指点。。。谢谢 在低压整流後而平滑电容之前,加串接一个二极管,便可提取100Hz讯号,再除100,便是一秒。 同意咕神意见,软件架构问题。
既然开始能实现同步闪烁,再次的振荡器也能保证数小时内一致。
高度怀疑有运行时间很长的子函数,使得主循环来不及响应半秒定时 软件架构有问题
不应该那么差的。RC震荡都不应该这样 这么是说我程序有问题?
再次的振荡器也能保证数小时内一致。
高度怀疑有运行时间很长的子函数,使得主循环来不及响应半秒定时?
那我做一下实验,在定时器中,只单独做一个LED灯闪烁。 本帖最后由 kebaojun305 于 2013-9-26 09:07 编辑
我也觉的是程序问题。才7、8分钟 之不可能有这么高的误差的。 如果运行两个小时内可以基本同步,但后面失步了,如果要同步该怎么做了?
如果要保证两者同步,是不是只有引入交流信号同步? 1。两个从机还有其它事情做吗?有其它中断吗?
2。LED的亮灭是定时器控制的,还是简单循环控制的? 1.还有其它的事情要做的,这里只用了两个中断,一个是定时器,一个是串口
2.LED灯的亮灭是定时器控制的。定时器里要做其它的事情,当然也是定时之类的东西。 wenking99 发表于 2013-9-27 15:03 static/image/common/back.gif
1.还有其它的事情要做的,这里只用了两个中断,一个是定时器,一个是串口
2.LED灯的亮灭是定时器控制的。定 ...
从你这个处理流程来看,你的程序有问题
怎么能在定时器中断里处理太多的事情呢
中断里要尽量少地工作,运算的一些事情放到main中去。
这么多大神说程序有问题了肯定是程序的问题了 你可以通过光耦,将220V转为5V电压进入单片机,然后将该信号作为定时器的时钟,这样肯定就不会不同步了。 你是说用外部中断,来检测这个50HZ信号过零检测?然后用来作为定时器的计数脉冲? 设备1和设备2收到广播信号这样只能保证两个设备的开始时刻是一致的,两个设备由于使用的各自的晶振,即使是一样大小的晶振,他们的时钟也是不同步的,这样就无法保证两个系统是同步,使用定时器也是不能解决问题的,这样硬件上的问题,软件是无法解决的。
同步一般包含两部分的内容:1.起始时刻一致,一般使用触发信号来保证2.时钟的一致,一般要使用同一个时钟信号 这个问题...... 再NB的晶体跑久了也会误差,还是主机定时同步比较靠谱 每秒或每分钟广播一次作为心跳报文。 1,串口接收中断的优先级放高,保证最小命令相应时间差,不过,目前看这个不是主要问题。
2,看起来不是很繁杂的系统,重复广播吧,每秒一次,10秒一次,自己看了。 在只能用做从机,要做到任何时候同步,在没有同步信号下,只有引入交流同步信号才可以了。 主机定时给一个心跳信号,让从机同步 现在问题是,主机不会给你一个同步信号。
主机就是上位机软件,有可能过几个小时,主机没有人去管它。
主机会不停的发送相同的一串数据,也就是说没有同步信号给你情况下,如何做到同步?
主机不停的发送相同的一串数据?如果间隔是一定的,可以作为同步帧的! 用的是DMX512通讯,控台过一段时间就没有人去管它了。
DMX512大概是20MS发送一次相同的数据,如果没有去动控台的话。
楼上说,如果间隔是一定的,可以作为同步帧的!这个怎么弄?
用一个同步信号,都是来自主机
页:
[1]