0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RA2E1通过SPI驱动灯带

RA生态工作室 2022-01-04 14:37 次阅读
poYBAGG2ot-AGNHBAABs_TTBnPY753.png



1.概述


本期分享的是使用RA2E1通过SPI的MOSI脚产生WS2812的控制时序,实现灯带控制的效果。

2.灯带介绍


WS2812是24位(1600万)色LED灯源芯片,集成了信号整形控制、电源反接保护等功能,5V安全供电,性价比高,在智能灯带市场中应用非常广泛。芯片以级联的方式串接起来,每颗灯源可单独寻址控制,根据需要的长度和间距,定制出各种显示效果,如直线灯带、环形、点阵屏等。很多创客喜欢用WS2812彩灯DIY一些酷炫的项目,可以说网上关于WS2812的资料是比较丰富的。有用不同的控制核心实现控制,以及通过不同的方式进行控制。我们选用RA的SPI(默认使能DTC)MOSI口实现WS2812控制时序的输出。

WS2812需要的时序是这样的:

c01ce818-6b23-11ec-ad3b-dac502259ad0.png

c02bd9ea-6b23-11ec-ad3b-dac502259ad0.png

需要注意的是不同厂家的产品时序略有差别,实际需要根据手册调整代码,以产生对应控制波形。

3.软件配置

e2studio中如下配置RA2E1的SPI:

c03e4aee-6b23-11ec-ad3b-dac502259ad0.png

8M的SPI波特率,一个位的时间等于1s ÷ 8 × 10^6,为0.125μs。

WS2812需要的0码对应SPI发送 0b 1100 0000

WS2812需要的1码对应SPI发送 0b 1111 1000

设置SPI发送下面数据:

c0487aa0-6b23-11ec-ad3b-dac502259ad0.png

4.烧录测试

烧录后实际测一下P213引脚波形

复位

c05a82b8-6b23-11ec-ad3b-dac502259ad0.png

0码

c064f022-6b23-11ec-ad3b-dac502259ad0.png

1码

c072ab54-6b23-11ec-ad3b-dac502259ad0.png

实际效果

c08311ec-6b23-11ec-ad3b-dac502259ad0.gif

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
    mcu
    +关注

    关注

    146

    文章

    16210

    浏览量

    345498
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8737

    浏览量

    363319
  • 开发板
    +关注

    关注

    25

    文章

    4601

    浏览量

    95112
  • 瑞萨电子
    +关注

    关注

    37

    文章

    2766

    浏览量

    71862
收藏 人收藏

    评论

    相关推荐

    51单片机STC8H8K64U通过RA8889/RA8876如何控制彩屏(SPI源码下载)

    In(接RA8889的SDI) sbit SPI_SCK= P2 ^ 4; // Serial Clock sbit SPI_RST= P2
    发表于 06-26 14:13

    第五讲:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

    输出文件大,单片机的FLASH需要选择更大容量,SRAM也需要更大容量,方可运行开所有演示代码。 我们在STC89C516RD+、STC12C5A60S2等单片机上均已测试通过。 实际演示效果: *源码下载:STC89C52_RA888
    发表于 06-13 17:23

    第一讲:单片机STC89C52+RA8889驱动控制彩屏 极简方案(源码公开)

    本章介绍如何使用51单片机来驱动控制彩屏,控制器彩用瑞佑的RA8889,通信方式采用SPI-4线(IO模拟时序)
    的头像 发表于 06-04 08:45 218次阅读
    第一讲:单片机STC89C52+<b class='flag-5'>RA</b>8889<b class='flag-5'>驱动</b>控制彩屏 极简方案(源码公开)

    RA UART实现SW Standby Mode唤醒流程

    RA系列能够实现休眠模式下的超低功耗,以RA2E1为例,在常温下的休眠功耗只有约0.25uA(典型值)。
    的头像 发表于 04-15 14:03 340次阅读
    <b class='flag-5'>RA</b> UART实现SW Standby Mode唤醒流程

    基于瑞萨RA2E1 MCU芯片的蓝牙平衡小车设计

    本项目由瑞萨RA2E1 MCU芯片作为主控,搭载电源模块、MPU6050模块、超声波模块、OLED模块、蓝牙模块、电机模块等组成的蓝牙平衡小车。该小车有平衡模式、跟随模式和避障模式三种运行模式。
    的头像 发表于 01-08 12:17 1355次阅读
    基于瑞萨<b class='flag-5'>RA2E1</b> MCU芯片的蓝牙平衡小车设计

    基于RASC的keil电子时钟制作(瑞萨RA)(5)----驱动LED数码管

    本篇文章主要介绍如何使用e2studio对瑞萨RA2E1开发板进行数码管的驱动
    的头像 发表于 12-01 15:01 378次阅读
    基于RASC的keil电子时钟制作(瑞萨<b class='flag-5'>RA</b>)(5)----<b class='flag-5'>驱动</b>LED数码管

    电子时钟制作(瑞萨RA)(4)----驱动LED数码管

    本篇文章主要介绍如何使用e2studio对瑞萨RA2E1开发板进行数码管的驱动
    的头像 发表于 12-01 14:03 308次阅读
    电子时钟制作(瑞萨<b class='flag-5'>RA</b>)(4)----<b class='flag-5'>驱动</b>LED数码管

    电子时钟制作(瑞萨RA)(1)----使用串口进行打印

    本篇文章主要介绍如何使用e2studio对瑞萨RA2E1开发板进行串口打印配置。
    的头像 发表于 12-01 13:56 443次阅读
    电子时钟制作(瑞萨<b class='flag-5'>RA</b>)(1)----使用串口进行打印

    RA2E1定时器带死区互补PWM中断延时问题分析

    RA2E1定时器带死区互补PWM中断延时问题分析
    的头像 发表于 10-27 10:56 505次阅读
    <b class='flag-5'>RA2E1</b>定时器带死区互补PWM中断延时问题分析

    使用RA2E1的NFC无线充电联合解决方案

    使用RA2E1的NFC无线充电联合解决方案
    的头像 发表于 09-28 18:06 656次阅读
    使用<b class='flag-5'>RA2E1</b>的NFC无线充电联合解决方案

    如何使用M0516驱动TM1812通过SPI驱动TM1812

    : Nutiny-EVB-M051_V3.0 本样本代码使用M0516将TM1812通过SPI0的MOSI驱动到光 RGB-LED条。 您可以在下列时间下载样本代码http://www.nuvoton.com/resource
    发表于 08-29 06:46

    如何使用M0516通过SPI接口驱动DM9051

    : Nutiny-EVB-M051_V3.0 本样本代码使用 M051 驱动 DM9051 通过 SPI1 接口实现 uIP/ httpd 函数 。 您可以在下列时间下载样本代码http://www.nuvoton.com/r
    发表于 08-23 06:21

    使用M0516将TM1812通过SPI0的MOSI驱动到光RGB-LED条

    : Nutiny-EVB-M051_V3.0 本样本代码使用M0516将TM1812通过SPI0的MOSI驱动到光 RGB-LED条。 您可以在下列时间下载样本代码http://www.nuvoton.com/resource
    发表于 08-22 06:23

    使用瑞萨e² studio FSP基于RA2E1定时器配置PWM输出

    使用瑞萨e² studio FSP基于RA2E1定时器配置PWM输出
    的头像 发表于 08-01 00:13 317次阅读
    使用瑞萨e² studio FSP基于<b class='flag-5'>RA2E1</b>定时器配置PWM输出

    CPK-RA2L1/RA2E1 评估板入口

    CPK-RA2L1/RA2E1 评估板入口
    发表于 07-03 19:44 0次下载
    CPK-<b class='flag-5'>RA</b>2L1/<b class='flag-5'>RA2E1</b> 评估板入口