WS2812
WS2812 是彩色灯珠控制芯片,可以控制 RGB 三色灯珠混合呈现出 16M 种颜色,WS2812 有单颗芯片形式,需要外接 RGB 灯珠,也有集成 WS2812 的 RGB 灯珠。
WS2812 通过单总线方式控制,只需一个 IO 口,就可以点亮数千个灯珠。
这里使用 RA6E2 点亮 WS2812 灯珠,效果如下:

WS2812 可以使用 IO 模拟时序控制,也可以使用 PWM 和 SPI 方式控制,IO 口模拟时序会占用较多 CPU 时间
这里使用 SPI 控制方式,接口定义如下:
通过 SPI 的 MOSI 引脚,可以模拟出 WS2812 所需的时序
使能硬件 SPI0 功能,在 RASC 上配置如下:
引脚配置:

SPI 外设配置:

配置 SPI0 速率 4Mbps,使能后即可使用以下函数初始化 SPI0 接口:
fsp_err_t err = R_SPI_Open(&g_spi0_ctrl, &g_spi0_cfg)
使用以下函数发送数据:
fsp_err_t err = R_SPI_Write(&g_spi0_ctrl, &dat, 1, SPI_BIT_WIDTH_8_BITS);
WS2812 的控制时序一般是 800Kbps 左右,这里使用 1Mbps,SPI 配置为 4Mbps, 使用 4bit SPI 数据模拟 1 bit 单总线数据 ,1 像素图像数据需要占用 12 字节内存
设置好 SPI 接口后,就可以进行初始化寄存器配置和图像显示了,SPI 发送 0x0E 代表发送 bit1,发送 0x08 表示发送 bit0,先发 G 再发 R 最后发 B,高位在前
最后进行 HSV 转 RGB 的色域转换过程,HSV 会使颜色过渡更为自然
for (j=0; j<8; j++)
{
for (i=0; i<8; i++)
{
Canvas_SetPenColor(canvas, Color_HSV_RGB888(360/8*((i+x)%8), 1, 0.01));
Canvas_Point(canvas, i, j);
}
}
WS2812_Draw(Image_DataPtr(image), 64);
绘制效果见视频
|