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 0000
WS2812需要的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.h"
static 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);
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
mcu
+关注
关注
146文章
17128浏览量
351003 -
ARM
+关注
关注
134文章
9087浏览量
367398 -
开发板
+关注
关注
25文章
5033浏览量
97378 -
瑞萨电子
+关注
关注
37文章
2861浏览量
72187
发布评论请先 登录
相关推荐
瑞萨电子RA8E1和RA8E2 MCU新品解读
Arm Cortex-M85 RA8系列于2024年11月推出RA8E1和RA8E2两款新产品。这两款新产品已正式量产上市,将高算力的RA8系列扩展到入门级领域的应用,降低BOM成本,
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】开发板介绍和环境搭建
A72DFL为主控芯片,拥有丰富的外设,集成度高功能非常强大,具有优越的性能和低功耗。
RA2E1 产品群是 RA 系列的入门级单芯片微控制器,基于48 MHz Arm® Cortex®-M23 内核,具有高**达
发表于 11-09 17:16
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】开发板介绍&环境搭建
A72DFL为主控芯片,拥有丰富的外设,集成度高功能非常强大,具有优越的性能和低功耗。
RA2E1 产品群是 RA 系列的入门级单芯片微控制器,基于48 MHz Arm® Cortex®-M23 内核,具有高**达
发表于 11-09 17:09
瑞萨电子推出RA8E1和RA8E2微控制器产品群
Arm Cortex-M85处理器的MCU,实现市场领先的6.39 CoreMark/MHz(注)性能。新款RA8E1和RA8E2 MCU在保持同等性能的同时,通过精简功能集降低成本,成为工业和家居自动化、办公设备、医疗保健和消
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第二篇)串口打印+SPI_OLED显示
串口打印
想要使用微库就必须将主堆栈设置大于0x1000(4K),就是这个东西,之前没有注意一直编译报错[难过]
通过手册可以得知R7FA2E1A72DFL并没有独立的UART,而是使用的SCI
发表于 11-09 01:30
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】简介、环境搭建、工程测试
、主控,其次介绍了 Renesas 官方 e2 studio 编译环境的配置,最后给出新建闪灯工程,以及固件烧录测试。
开发板简介
RA-Eco-RA2E1-48PIN-V1.0 开发板基于48
发表于 11-05 15:47
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】RA-Eco-RA2E1-48PIN-V1.0开发板基于Keil MDK环境搭建
RA-Eco-RA2E1-48PIN-V1.0开发板简介。
以瑞萨R7FA2E1A72DFL为主控芯片,拥有丰富的外设,集成度高功能非常强大,具有优越的性能和低功耗。
RA2E1 产品群是
发表于 11-04 22:58
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】开箱点灯
RA-Eco-RA2E1-48PIN-V1.0开发板。这不仅为我的嵌入式开发学习提供了宝贵的实践机会,也可以让我深入理解了该开发板的功能和特性,同时,也给我们学校的教学研究提供了帮助。在申请、沟通过程中,我深感电子发烧友平台的积极支持
发表于 10-26 22:47
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】2、SPI驱动LCD(ST7735)屏
本文描述用RA2E1分别用软件和硬件SPI两种方式驱动LCD(ST7735)屏。
一、软件SPI驱动LCD
连线图:
发表于 10-22 14:08
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】先来点个灯
收到瑞萨RA2E1开发板,十分小巧精致。
今天就来点个灯吧。
e2 studio(自带FSP)软件安装就不赘述了,详见:
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】
发表于 10-18 22:50
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】1、资料获取、环境搭建及简单验证
需要注册才可以下载
RA2E1的资料入口:
https://www.renesas.cn/zh/products/microcontrollers-microprocessors
发表于 10-18 13:07
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】软件驱动TFT屏幕
接上篇:【RA-Eco-RA0E1-32PIN-V1.0开发板试用】开发环境搭建及流水灯(附踩坑记录) - 瑞萨单片机论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com
发表于 08-26 21:45
基于瑞萨RA2E1 MCU芯片的蓝牙平衡小车设计
本项目由瑞萨RA2E1 MCU芯片作为主控,搭载电源模块、MPU6050模块、超声波模块、OLED模块、蓝牙模块、电机模块等组成的蓝牙平衡小车。该小车有平衡模式、跟随模式和避障模式三种运行模式。
评论