1.概述
本期分享的是使用ra2e1通过spi的mosi脚产生ws2812的控制时序,实现灯带控制的效果。
2.灯带介绍
ws2812是24位(1600万)色led灯源芯片,集成了信号整形控制、电源反接保护等功能,5v安全供电,性价比高,在智能灯带市场中应用非常广泛。芯片以级联的方式串接起来,每颗灯源可单独寻址控制,根据需要的长度和间距,定制出各种显示效果,如直线灯带、环形、点阵屏等。很多创客喜欢用ws2812彩灯diy一些酷炫的项目,可以说网上关于ws2812的资料是比较丰富的。有用不同的控制核心实现控制,以及通过不同的方式进行控制。我们选用ra的spi(默认使能dtc)mosi口实现ws2812控制时序的输出。 ws2812需要的时序是这样的:
需要注意的是不同厂家的产品时序略有差别,实际需要根据手册调整代码,以产生对应控制波形。
3.软件配置
e2studio中如下配置ra2e1的spi:
8m的spi波特率,一个位的时间等于1s ÷ 8 × 10^6,为0.125μs。ws2812需要的0码对应spi发送 0b 1100 0000ws2812需要的1码对应spi发送 0b 1111 1000
设置spi发送下面数据:
4.烧录测试
烧录后实际测一下p213引脚波形
复位
0码
1码
实际效果
5.例程获取
欢迎follow我们的gitee仓库获取更多示例代码及相关资料:https://gitee.com/ramcu/ra-eco-ra2-e1-48-pin 模块已接口化实现,方便调用
/* * ws2812.h * * created on: 2021年12月21日 * author: ramcu */#ifndef ws2812_h_#define ws2812_h_#include hal_data.h#define numpixels (16)#define numres (60)#define spibufl ((numpixels) * 3 * 8 + numres)void ws2812init(void);void show(void);void clear(void);void setpixelcolor(uint16_t n, uint8_t g, uint8_t r, uint8_t b);#endif /* ws2812_h_ */
/* * ws2812.c * * created on: 2021年12月21日 * author: ramcu */#include ws2812.hstatic uint8_t spidate[spibufl] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8, \ 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8 };void ws2812init(void){ r_sci_spi_open(&g_spi0_ctrl, &g_spi0_cfg);}void show(void){ r_sci_spi_write(&g_spi0_ctrl, spidate, spibufl, spi_bit_width_8_bits); r_bsp_softwaredelay(80, bsp_delay_units_microseconds);}void clear(void){ memset(& spidate[numres], 0xc0, (numpixels) * 3 * 8);}void setpixelcolor(uint16_t n, uint8_t g, uint8_t r, uint8_t b){ if (n < numpixels) { uint8_t *p; p = &spidate[numres + n * 24]; for(uint8_t i = 0; i < 8; i++) { *(p + i) = (0 == (g & (1 << (7 - i)))) ? 0xc0 : 0xf8; } for(uint8_t i = 0; i < 8; i++) { *(p + i + 8) = (0 == (r & (1 << (7 - i)))) ? 0xc0 : 0xf8; } for(uint8_t i = 0; i < 8; i++) { *(p + i + 16) = (0 == (b & (1 << (7 - i)))) ? 0xc0 : 0xf8; } }}
void hal_entry(void){ /* todo: add your own code here */ ws2812init(); while(1) { clear(); for(uint8_t i = 0; i < numpixels; i++) { setpixelcolor(i, 0, 0, i + 4); show(); r_bsp_softwaredelay(50, bsp_delay_units_milliseconds); } }
六步方波控制波形赏析讨论
照明LED的封装有哪些方法?应用在哪些领域?
英伟达的自动驾驶蓝图:四大进展引关注
如何利用示波器模板(Mask)功能触发所有未知的异常波形
美管制AI科技出口 苹果遭受冲击
RA2E1通过SPI驱动灯带
中科大提出:LLMs的个性化综述,详述大模型与个性化的挑战与机遇
风机主轴密封位冲刷磨损如何处理
Dialog推出全球首颗超低功耗集成电路SmartPulse
华为在美国法院挑战FCC对中国5G技术的禁令
友达光电成功将Micro LED导入车载市场
手机基带电路设计20问(1)
亚马逊发布第三代神龙云服务器,并建立超级数据中心
各种燃料电池发电技术综合比较
ate测试系统一般由哪些电源测试设备组成?
一文解析:机器人选用何种工业防水连接器?
爱芯元智在车载智驾领域助力中国汽车行业实现智能化升级
【瞭望者】“低慢小”无人机对传统探测技术的严峻挑战
温补晶振的工作原理?温补晶振的补偿方式有哪些?
汽标委电动车辆分标委在深圳组织召开2020年标准审查会