【平头哥RVB2601创意应用开发】 三、RVB2601之RGB三色呼吸灯
本帖最后由 kit7828 于 2022-3-10 14:00 编辑<p>平头哥的例程中有个ch2601_rgb_marquee_demo,是实现RGB LED灯珠三色跑马灯效果的demo。解压后,直接打开project文件(找不到在CDK中直接打开project文件的选项,不知道是不是要先打开workspace才会有这个功能?)</p>
<p> CDK中打开后依然有错误显示</p>
<p> 依然在sdk_chip_ch2601上面右键download相关组件</p>
<p>然后就能自动下载了</p>
<p> 下载后需要等待一会,安装的项目有点多</p>
<p> 安装完成后就可以编译和下载了</p>
<p> 下载完成后</p>
<p> 需要按下开发板右边的RST按钮才会运行</p>
<p>如果开启串口的话,可以看到串口有调试信息出现</p>
<p> 整体的效果如下</p>
<p> </p>
<p>代码中分别采用了GPIO和PWM两种方式控制这个三色RGB灯。</p>
<p>为进一步测试PWM效果,想把例程改成三色呼吸灯的效果</p>
<p>于是,首先在app_config.h中启用PWM方式</p>
<p> 然后在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(&r, 2 / 2);
csi_pwm_out_stop(&r, 4 / 2);
}
else if (g_ctr == 1)
{
csi_pwm_out_stop(&r, 7 / 2);
csi_pwm_out_stop(&r, 4 / 2);
}
else //2
{
csi_pwm_out_stop(&r, 7 / 2);
csi_pwm_out_stop(&r, 2 / 2);
}
}
if(g_dly <= 30) g_lux = g_dly;
else g_lux = 60 - g_dly;
if (g_ctr == 0)
{
ret = csi_pwm_out_config(&r, 7 / 2, 30, g_lux, PWM_POLARITY_LOW);
if (ret != CSI_OK) {
printf("===%s, %d\n", __FUNCTION__, __LINE__);
return ;
}
csi_pwm_out_start(&r, 7 / 2);
//csi_pwm_out_stop(&r, 2 / 2);
//csi_pwm_out_stop(&r, 4 / 2);
}
else if (g_ctr == 1)
{
ret = csi_pwm_out_config(&r, 2 / 2, 30, g_lux, PWM_POLARITY_LOW);
if (ret != CSI_OK) {
printf("===%s, %d\n", __FUNCTION__, __LINE__);
return ;
}
csi_pwm_out_start(&r, 2 / 2);
//csi_pwm_out_stop(&r, 7 / 2);
//csi_pwm_out_stop(&r, 4 / 2);
}
else //2
{
ret = csi_pwm_out_config(&r, 4 / 2, 30, g_lux, PWM_POLARITY_LOW);
if (ret != CSI_OK) {
printf("===%s, %d\n", __FUNCTION__, __LINE__);
return ;
}
csi_pwm_out_start(&r, 4 / 2);
//csi_pwm_out_stop(&r, 7 / 2);
//csi_pwm_out_stop(&r, 2 / 2);
}
}</code></pre>
<p>其中的g_dly为全局变量</p>
<p>这样发现呼吸效果很差,检查后发现主循环中的延时时间太长</p>
<p> 把延时参数减小10倍,就差不多能看到呼吸效果了</p>
<p>完成的效果如下</p>
<p> </p>
<p>PWM方式实现三色灯呼吸的效果实现了,由于对平头哥芯片的PWM控制方式不是很熟悉,目前是通过不断调整配置函数csi_pwm_out_config实现的,而不是直接修改寄存器方式实现的,所以整体效果不完美,希望后续能进一步了解这款芯片,实现更完美的控制。</p>
<p>RVB2601的RGB调节包括其他颜色的设置,在app_config.h文件中,切换宏定义,配置LED引脚的功能为CONFIG_PWM_MODE</p>
<p>配置占空比bright_ctr,改变明暗程度。</p>
<p>是的,太快了看不出什么效果,频率的改变一闪而过。</p>
Jacktang 发表于 2022-3-7 21:02
RVB2601的RGB调节包括其他颜色的设置,在app_config.h文件中,切换宏定义,配置LED引脚的功能为CONFIG_PWM_ ...
<p>好的,谢谢</p>
freebsder 发表于 2022-3-7 22:31
是的,太快了看不出什么效果,频率的改变一闪而过。
<p>就没有呼吸的效果了</p>
kit7828 发表于 2022-3-8 13:14
就没有呼吸的效果了
<p>是的,这个频率还不太好调,我也是上个月才第一次搞呼吸灯。快了没效果,满了明显有停顿感,要真实的模拟呼吸频率,还得费点事情。</p>
freebsder 发表于 2022-3-8 22:59
是的,这个频率还不太好调,我也是上个月才第一次搞呼吸灯。快了没效果,满了明显有停顿感,要真实的模拟 ...
<p>我这个评测比较偷懒,直接用线性方式调整的PWM,其实改成数组方式,非线性的话,效果要好很多</p>
<p> </p>
<p>CDK如何查看函数内部情况呢?</p>
<p> </p>
<p> 接连两个csi_pwm_out_stop是起什么作用呢</p>
梦溪开物 发表于 2022-3-15 15:49
CDK如何查看函数内部情况呢?
<p>昨天看到群里的问题汇总中有提到,首先要在CDK的Project菜单中parse all projects</p>
<p>然后就可以 点击右键 goto declaration</p>
梦溪开物 发表于 2022-3-16 09:43
接连两个csi_pwm_out_stop是起什么作用呢
<p>三色灯,所以关闭了其他两色的PWM通道,只亮一个颜色</p>
kit7828 发表于 2022-3-16 13:33
昨天看到群里的问题汇总中有提到,首先要在CDK的Project菜单中parse all projects
然后就 ...
<p>谢谢你</p>
kit7828 发表于 2022-3-16 13:34
三色灯,所以关闭了其他两色的PWM通道,只亮一个颜色
<p>csi_pwm_out_stop(&r,7/2),请问7/2通道是小数是怎么回事呢?</p>
页:
[1]