打印

RS485通信与PWM调光之间兼容

[复制链接]
3262|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaomuhong26|  楼主 | 2010-11-11 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠:
           本菜鸟在做项目时,遇到一个棘手的问题,望大家给小弟指点迷津.
我是做舞台灯光的,灯光做效果时需要用到DMX512控台,此控台的作用就是以250Kbit/S的波特率不断发送数据到我的单片机(RS485通信),单片机收到数据后,再进行相应的处理。但是现在遇到一个问题就是我的12路PWM调光用的是IO模拟调光,如果我实时的(250Kbit/S)接收来自于控台的数据,那么我的PWM模拟调光(100级)就不能够正常工作了,他会不断的闪烁,无**常地工作。我想请问一下各位大侠有没有什么办法可以解决这个问题?

相关帖子

沙发
xiaomuhong26|  楼主 | 2010-11-11 17:10 | 只看该作者
补充:串口中断优先高于定时器中断
这个问题是不是由于串口不断地被接收中断触发,而PWM模拟调光的定时器无**常中断就导致了闪烁呢?

使用特权

评论回复
板凳
rodger_br| | 2010-11-11 21:58 | 只看该作者
你量化一下自己中断服务程序的开销,再去分析和解决问题。

使用特权

评论回复
地板
SmartEnergy| | 2010-11-12 09:51 | 只看该作者
看看MIPS是否够,巧妇难为无米之炊的。

使用特权

评论回复
5
airwill| | 2010-11-12 13:01 | 只看该作者
应该是中断开销的问题. 特别是 485 的接受中断的开销可能太大.
更改中断服务程序, 是否只接受和保持数据, 把处理的任务全部交给主程序来做?

使用特权

评论回复
6
xiaomuhong26|  楼主 | 2010-11-13 14:59 | 只看该作者
应该是中断开销的问题. 特别是 485 的接受中断的开销可能太大.
更改中断服务程序, 是否只接受和保持数据, 把处理的任务全部交给主程序来做?
airwill 发表于 2010-11-12 13:01

我的接收中断是只接收数据处保持数据,而数据处理也是在主程序中,现在也没有闪烁那么明显了,但是现在在LED不够亮时就会闪烁,比较亮时就看不出来不知这是为什么了?

使用特权

评论回复
7
xiaomuhong26|  楼主 | 2010-11-15 09:23 | 只看该作者
今天发现:控台的波特率是250KBIT/S向我单片机串口发数据,我将收到的数据不断地向PWM调光函数送过去进行PWM调光,在PWM亮度低的时候,LED就会闪烁,后来我发现如果将中断接收函数屏蔽了,PWM亮度低时也不会闪烁,因此我怀疑是控台不断发数据触发串口中断影响了PWM调光(100US定时器),我想请问各位高手有什么办法解决这个问题?

使用特权

评论回复
8
xiaomuhong26|  楼主 | 2010-11-15 09:27 | 只看该作者
补充定时器和串口中断函数:
void Time_Init(void)
{
        TMOD |=0x11;            
        TH0=(65536-T0_delay)/256;
        TL0=(65536-T0_delay)%256;   
        EA=1;
        ET0=1;                 
        TR0=1;
}

void Serial_Init(void)
{
        SCON   = 0x90;   //10010000B;工作方式2,使能接收,SM2=0,波特率=(16*10^6)/64=205Kbit/s
        PCON   = 0x00;        //SMOD =1;串行波特率加倍
        EA = 1;
        ES = 1;
        PS = 1;//串口中断优先
}

使用特权

评论回复
9
mengjicheng| | 2012-11-18 22:41 | 只看该作者
那没办法了,你要求的实时性太强,处理不过来的,就你用软件模拟PWM那么多路,已经是把程序的实时性发挥到极致了

使用特权

评论回复
10
jimodunanhua| | 2012-11-18 22:46 | 只看该作者
顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

85

帖子

1

粉丝