kit7828 发表于 2022-3-6 15:30

【平头哥RVB2601创意应用开发】 三、RVB2601之RGB三色呼吸灯

本帖最后由 kit7828 于 2022-3-10 14:00 编辑

<p>平头哥的例程中有个ch2601_rgb_marquee_demo,是实现RGB LED灯珠三色跑马灯效果的demo。解压后,直接打开project文件(找不到在CDK中直接打开project文件的选项,不知道是不是要先打开workspace才会有这个功能?)</p>

<p>&nbsp;CDK中打开后依然有错误显示</p>

<p>&nbsp;依然在sdk_chip_ch2601上面右键download相关组件</p>

<p>然后就能自动下载了</p>

<p>&nbsp;下载后需要等待一会,安装的项目有点多</p>

<p>&nbsp;安装完成后就可以编译和下载了</p>

<p>&nbsp;下载完成后</p>

<p>&nbsp;需要按下开发板右边的RST按钮才会运行</p>

<p>如果开启串口的话,可以看到串口有调试信息出现</p>

<p>&nbsp;整体的效果如下</p>

<p> &nbsp;</p>

<p>代码中分别采用了GPIO和PWM两种方式控制这个三色RGB灯。</p>

<p>为进一步测试PWM效果,想把例程改成三色呼吸灯的效果</p>

<p>于是,首先在app_config.h中启用PWM方式</p>

<p>&nbsp;然后在led.c中修改void led_refresh()</p>

<pre>
<code>void led_refresh()
{
        csi_error_t ret;
        uint32_t g_lux = 0;
       
        //udelay(10);
   
        g_dly ++;
        if(g_dly == 60) {
                g_dly = 0;
               
                g_ctr++;
                if (g_ctr == 3) g_ctr = 0;
                if (g_ctr == 0)
                {
                        csi_pwm_out_stop(&amp;r, 2 / 2);
                        csi_pwm_out_stop(&amp;r, 4 / 2);

                }
                else if (g_ctr == 1)
                {
                        csi_pwm_out_stop(&amp;r, 7 / 2);
                        csi_pwm_out_stop(&amp;r, 4 / 2);
                }
                else //2
                {
                        csi_pwm_out_stop(&amp;r, 7 / 2);
                        csi_pwm_out_stop(&amp;r, 2 / 2);
                }
        }
       
        if(g_dly &lt;= 30) g_lux = g_dly;
        else g_lux = 60 - g_dly;
               
    if (g_ctr == 0)
    {
                ret = csi_pwm_out_config(&amp;r, 7 / 2, 30, g_lux, PWM_POLARITY_LOW);
                if (ret != CSI_OK) {
                                printf("===%s, %d\n", __FUNCTION__, __LINE__);
                                return ;
                }
      csi_pwm_out_start(&amp;r, 7 / 2);
      //csi_pwm_out_stop(&amp;r, 2 / 2);
      //csi_pwm_out_stop(&amp;r, 4 / 2);

    }
    else if (g_ctr == 1)
    {      
                ret = csi_pwm_out_config(&amp;r, 2 / 2, 30, g_lux, PWM_POLARITY_LOW);
                if (ret != CSI_OK) {
                                printf("===%s, %d\n", __FUNCTION__, __LINE__);
                                return ;
                }
      csi_pwm_out_start(&amp;r, 2 / 2);
      //csi_pwm_out_stop(&amp;r, 7 / 2);
      //csi_pwm_out_stop(&amp;r, 4 / 2);

    }
    else //2
    {
                ret = csi_pwm_out_config(&amp;r, 4 / 2, 30, g_lux, PWM_POLARITY_LOW);
                if (ret != CSI_OK) {
                                printf("===%s, %d\n", __FUNCTION__, __LINE__);
                                return ;
                }
      csi_pwm_out_start(&amp;r, 4 / 2);
      //csi_pwm_out_stop(&amp;r, 7 / 2);
      //csi_pwm_out_stop(&amp;r, 2 / 2);

    }
       
}</code></pre>

<p>其中的g_dly为全局变量</p>

<p>这样发现呼吸效果很差,检查后发现主循环中的延时时间太长</p>

<p>&nbsp;把延时参数减小10倍,就差不多能看到呼吸效果了</p>

<p>完成的效果如下</p>

<p>&nbsp;</p>

<p>PWM方式实现三色灯呼吸的效果实现了,由于对平头哥芯片的PWM控制方式不是很熟悉,目前是通过不断调整配置函数csi_pwm_out_config实现的,而不是直接修改寄存器方式实现的,所以整体效果不完美,希望后续能进一步了解这款芯片,实现更完美的控制。</p>

Jacktang 发表于 2022-3-7 21:02

<p>RVB2601的RGB调节包括其他颜色的设置,在app_config.h文件中,切换宏定义,配置LED引脚的功能为CONFIG_PWM_MODE</p>

<p>配置占空比bright_ctr,改变明暗程度。</p>

freebsder 发表于 2022-3-7 22:31

<p>是的,太快了看不出什么效果,频率的改变一闪而过。</p>

kit7828 发表于 2022-3-8 13:13

Jacktang 发表于 2022-3-7 21:02
RVB2601的RGB调节包括其他颜色的设置,在app_config.h文件中,切换宏定义,配置LED引脚的功能为CONFIG_PWM_ ...

<p>好的,谢谢</p>

kit7828 发表于 2022-3-8 13:14

freebsder 发表于 2022-3-7 22:31
是的,太快了看不出什么效果,频率的改变一闪而过。

<p>就没有呼吸的效果了</p>

freebsder 发表于 2022-3-8 22:59

kit7828 发表于 2022-3-8 13:14
就没有呼吸的效果了

<p>是的,这个频率还不太好调,我也是上个月才第一次搞呼吸灯。快了没效果,满了明显有停顿感,要真实的模拟呼吸频率,还得费点事情。</p>

kit7828 发表于 2022-3-9 12:41

freebsder 发表于 2022-3-8 22:59
是的,这个频率还不太好调,我也是上个月才第一次搞呼吸灯。快了没效果,满了明显有停顿感,要真实的模拟 ...

<p>我这个评测比较偷懒,直接用线性方式调整的PWM,其实改成数组方式,非线性的话,效果要好很多</p>

<p>&nbsp;</p>

梦溪开物 发表于 2022-3-15 15:49

<p>CDK如何查看函数内部情况呢?</p>

<p>&nbsp;</p>

梦溪开物 发表于 2022-3-16 09:43

<p> &nbsp;接连两个csi_pwm_out_stop是起什么作用呢</p>

kit7828 发表于 2022-3-16 13:33

梦溪开物 发表于 2022-3-15 15:49
CDK如何查看函数内部情况呢?

&nbsp;

<p>昨天看到群里的问题汇总中有提到,首先要在CDK的Project菜单中parse all&nbsp;&nbsp;projects</p>

<p>然后就可以&nbsp; 点击右键 goto declaration</p>

kit7828 发表于 2022-3-16 13:34

梦溪开物 发表于 2022-3-16 09:43
&nbsp;接连两个csi_pwm_out_stop是起什么作用呢

<p>三色灯,所以关闭了其他两色的PWM通道,只亮一个颜色</p>

梦溪开物 发表于 2022-3-17 09:46

kit7828 发表于 2022-3-16 13:33
昨天看到群里的问题汇总中有提到,首先要在CDK的Project菜单中parse all&nbsp;&nbsp;projects

然后就 ...

<p>谢谢你</p>

梦溪开物 发表于 2022-3-19 23:36

kit7828 发表于 2022-3-16 13:34
三色灯,所以关闭了其他两色的PWM通道,只亮一个颜色

<p>csi_pwm_out_stop(&amp;r,7/2),请问7/2通道是小数是怎么回事呢?</p>
页: [1]
查看完整版本: 【平头哥RVB2601创意应用开发】 三、RVB2601之RGB三色呼吸灯