【平头哥RVB2601创意应用开发】 三、RVB2601之RGB三色呼吸灯
[复制链接]
本帖最后由 kit7828 于 2022-3-10 14:00 编辑
平头哥的例程中有个ch2601_rgb_marquee_demo,是实现RGB LED灯珠三色跑马灯效果的demo。解压后,直接打开project文件(找不到在CDK中直接打开project文件的选项,不知道是不是要先打开workspace才会有这个功能?)
CDK中打开后依然有错误显示
依然在sdk_chip_ch2601上面右键download相关组件
然后就能自动下载了
下载后需要等待一会,安装的项目有点多
安装完成后就可以编译和下载了
下载完成后
需要按下开发板右边的RST按钮才会运行
如果开启串口的话,可以看到串口有调试信息出现
整体的效果如下
代码中分别采用了GPIO和PWM两种方式控制这个三色RGB灯。
为进一步测试PWM效果,想把例程改成三色呼吸灯的效果
于是,首先在app_config.h中启用PWM方式
然后在led.c中修改void led_refresh()
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);
}
}
其中的g_dly为全局变量
这样发现呼吸效果很差,检查后发现主循环中的延时时间太长
把延时参数减小10倍,就差不多能看到呼吸效果了
完成的效果如下
PWM方式实现三色灯呼吸的效果实现了,由于对平头哥芯片的PWM控制方式不是很熟悉,目前是通过不断调整配置函数csi_pwm_out_config实现的,而不是直接修改寄存器方式实现的,所以整体效果不完美,希望后续能进一步了解这款芯片,实现更完美的控制。
|