【平头哥RVB2601创意应用开发】环境监测终端01-开箱及设计炫彩呼吸灯
[复制链接]
RVB2601开发板收到有一段时间了,一直在抓空研究其电路和程序,这两天趁着假期把学习成果发一下。
一、开箱
拿到开发板第一件事就是开箱拍照。如图1所示,整个开发板看上去以黑色为主,固定在两片亚克力之间。正面CH2601主芯片和OLED显示屏最是显眼,背面则是被一个圆圆的扬声器吸引眼球,整体看上去酷酷的样子。配备2根microUSB数据线,一个用于USB串口交互信息,另一个用于下载、调试程序。
图1、开箱照
平头哥RVB2601是基于平头哥生态芯片CH2601的开发板,板载JTAG调试器,WiFi&BLE芯片W800,音频ADCES7210,音频DACES8156,128x64 OLED屏幕,RGB三色指示灯,用户按键,及兼容Arduino的扩展接口CH2601是基于玄铁E906的RISC-V生态芯片,最高主频220MHz,支持AliOS Things物联网操作系统、平头哥YoC软件平台及平头哥剑池开发工具(CDK)。主要资源如下图所示。
图2、开发板资源
二、集成开发工具
剑池CDK是基于wxWidgets图形库构建的跨平台集成开发环境,全称(C-SKY development kit)。剑池CDK内置了工程管理单元,集成了CSKY的二进制开发工具,向用户提供了图形化的嵌入式开发环境,降低了嵌入式开发的学习曲线。
剑池CDK下载地址:
https://occ.t-head.cn/development/series/index?spm=a2c6h.12873639.0.0.1ee118a2NX72Fy&id=3864775351511420928&type=kind&softPlatformType=4&key=download#sticky
我下载的是官方推荐的V2.12.1版本,在三台WIN10笔记本电脑上都顺利安装,没有遇到网友的那些问题。整个安装过程基本上就是傻瓜式,按照提示一直下一步就行,相对于IAR或Keil耗时还要短一些。整体界面如下,跟其他的集成开发环境基本相似,上手比较容易。
图3、CDK界面
三、上电测试
两个USB接口插上任意一个都可以给开发板供电。第一次上电,开发板默认程序带的那个语音嗷的一嗓子,把我吓一跳,主要是夜半人静的时候弄的,当真小心脏突突了一下。上电后,会在串口输出一些板卡信息,支持命令行操作,如下图所示。
图4、上电
接下来按照教程实际操作一下。从主页搜索“led”会出现一个现成的跑马灯程序,如下图,创建工程下载进去看效果。
图5、搜索实例创建工程
程序运行后只有绿灯和蓝灯闪烁,红灯不亮,想到例程应该不会错,那就有可能是板子配置的不对,按照电路图和布局图查找,如下图,果然发现是红灯的跳线块没接上,插上去红灯就跟着闪烁起来了。
图6、三色灯电路
四、改造程序,实现炫彩呼吸灯
从《app_config.h》代码中可以看到,当前三色灯驱动配置的为PWM模式,但是三个灯闪烁效果跟IO口直接控制没啥区别吗,这也没体现出PWM控制的优越性啊,这个不能忍,得改成带效果的。
图7、实例程序三色灯效果
《app_config.h》代码如下:
#ifndef __APP_CONFIG_H__
#define __APP_CONFIG_H__
/* 控制APP中是否输出LOGD的打印内容 */
#ifndef CONFIG_DEBUG
#define CONFIG_DEBUG 0
//#undef CONFIG_DEBUG
#endif
/* You can add user configuration items here. */
#define CONFIG_PWM_MODE //PWM模式
//#define CONFIG_GPIO_MODE
#define CONSOLE_UART_IDX 0
#endif
分析实例代码,发现PWM控制只是在《led.c》里面初始化了一下,后续闪灯就没有改变占空比,而且每次只有一个灯使能,所以出现的就是单纯的三色轮流闪烁。我参照led_pinmux_init()这个初始化函数将led_refresh()进行了一下改造,每次调用时都改变三个灯的占空比,就可以是实现每个灯都在不停变化,组合出多种颜色。
代码如下:
void led_refresh()
{
g_ctr++;
if (g_ctr > 29) {
g_ctr = 0;
}
csi_pwm_out_config(&r, 2 / 2, 30, g_ctr, PWM_POLARITY_LOW);
csi_pwm_out_config(&r, 4 / 2, 30, 30 - g_ctr, PWM_POLARITY_LOW);
csi_pwm_out_config(&r, 7 / 2, 30, 30 % g_ctr, PWM_POLARITY_HIGH);
// if (g_ctr == 0)
// {
// 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)
// {
// csi_pwm_out_start(&r, 2 / 2);
// csi_pwm_out_stop(&r, 7 / 2);
// csi_pwm_out_stop(&r, 4 / 2);
//
// }
// else //2
// {
// csi_pwm_out_start(&r, 4 / 2);
// csi_pwm_out_stop(&r, 7 / 2);
// csi_pwm_out_stop(&r, 2 / 2);
//
// }
}
实际运行后发现变化很慢,效果不理想,然后把demo_task()主循环加速,将其中的延时改小了,代码如下:
static void demo_task(void *arg)
{
lv_init();
oled_init();
lable_test();
led_pinmux_init();
while (1)
{
lv_task_handler();
udelay(1000 * 100);
lv_tick_inc(1);
led_refresh();
}
}
最终基本实现了炫彩呼吸灯的效果,如下图。
图8、炫彩效果
我这个实例中,三个LED只是用最简单的算式按照不同的规律驱动,实现的效果比较单一,如果想要更炫的效果,可以修改led_refresh()函数中三个灯的PWM驱动规则,可以实现各个各样的幻彩效果。
|