MBI5043输出抖动,求建议或驱动代码

2020-03-08 19:22发布

本帖最后由 21ic小管家 于 2017-10-27 14:39 编辑

MCU:STM8S00F3
产生PWM的芯片:MBI5043



下面是驱动代码:

void send_one_data(unsigned char c_ch,unsigned int i_data)
{
        unsigned char i;

        for(i=0;i<15;i++)
        {
                if(i_data&0x8000)
                {
                        SDI_ON();//输出1bit 1
                }
                else
                {
                        SDI_OFF();//输出1bit 0
                }
                CLK_ONOFF();
                i_data=i_data<<1;
        }
        if(c_ch==0)
                LE1_ON();
        else
                LE2_ON();
        if(i_data&0x8000)
        {
                SDI_ON();//输出1bit 1
        }
        else
        {
                SDI_OFF();//输出1bit 0
        }
        CLK_ONOFF();

        if(c_ch==0)
                LE1_OFF();
        else
                LE2_OFF();
}

/******************************************************************************
功能说明:        整体锁栓
输入参数:        无
输出参数:        无
返回值:        无
******************************************************************************/
void lock_data(void)
{
        unsigned char i;

        for(i=0;i<13;i++)
        {
                SDI_OFF();//输出1bit 0
                CLK_ONOFF();
        }
        TIM1_CR1   &= ~(0x01);
        LE1_ON();
        LE2_ON();
        for(i=13;i<16;i++)
        {
                SDI_OFF();//输出1bit 0
                CLK_ONOFF();
        }
        LE1_OFF();
        LE2_OFF();

        _asm("nop");
        _asm("nop");
        
        TIM1_CR1   |= 0x01;
}


下面是测试代码:

void main()
{
        unsigned char i = 0;
        MBI5043init();

        while(1)
        {
                for(i=0;i<16;i++)
                {
                        send_one_data(1,32768);//50%的占空比
                }
                lock_data();
        }
}

按以上的方式测试,输出会抖动

void main()
{
        unsigned char i = 0;
        MBI5043init();
        for(i=0;i<16;i++)
        {
                send_one_data(1,32768);//50%的占空比
        }
        lock_data();
        
        while(1)
        {
               
        }
}

这样输出就不会抖动,所以问题是出在驱动代码中,求大神指教


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
hu459846936
1楼-- · 2020-03-09 14:03
 精彩回答 2  元偷偷看……
hu459846936
2楼-- · 2020-03-09 18:29
本帖最后由 hu459846936 于 2020-1-1 20:32 编辑

关于楼主的抖动问题,确实是软件的原因。第一种方式,会重复像IC写入数据。也就是说会一直刷新数据。所以有抖动。第二种方式不会,因为只写了一次数据。后面的就循环在WHILE(1)里面了。 MBI5043init();楼主能发下这个的内容吗?MBI5043需不需要初始化?

一周热门 更多>