当前位置: 首页 > 科技

瑞萨RA0单片机连载之SPI驱动WB2812B

1   前言

WS2812B是一种数字可编程LED灯条,也被称为NeoPixel。它由RGB(红、绿、蓝)三种颜色的LED组成,并集成了控制电路和信号处理功能。每个WS2812B LED 都有一个唯一的地址,并可以通过单个数据线进行串联连接。

WS2812B具有以下特点:

高度可编程性:每个LED可以独立地设置颜色和亮度,因此可以实现各种动态效果和彩色变化。

简单的控制接口:WS2812B使用单个数据线进行通信,通过发送特定的序列来控制每个LED的颜色和亮度。

低功耗:WS2812B采用高效的LED驱动技术,具有较低的功耗,适合电池供电的应用。

灵活的应用:WS2812B可广泛应用于室内装饰、灯光艺术、电子产品原型设计等领域,具有丰富的创意空间和应用场景。

24bit数据结构

G7 G6 G5 G4 G3 G2 G1 G0 R7 R6 R5 R4 R3 R2 R1 R0 B7 B6 B5 B4 B3 B2 B1 B0

注:高位先发,按照GRB 的顺序发送数据。

2   引脚图

引脚功能

功能描述

当然,在使用的过程中,我们往往会使用不止一个LED灯,会将多个灯级联成灯带或者灯板,我们这次使用的就是灯板。

具体级联方式如下:

典型应用数据:外围电路不需要加滤波电容

其中DIN作为数据的输入端,每个LED需要24位数据控制,多出的数据会通过DOUT 引脚传递给下一个LED,以此类推,当WS2812 接收到280us 以上的低电平时,数据被写入LED,灯的颜色改变。

以下是数据的表示方法:

数据传输时间

时序波形图

输入码型:

连接方法:

此次我采用SPI 的方式来驱动。SPI的时钟调整为8MHz,发送一字节正好是1.25us,给ws2812 发送0即通过SPI 总线发送11000000b,发送1 即通过SPI 总线发送11111100b,非常巧妙的一种方式。

根据以上原理,我先配置SPI的stack如下:

经查看原理图,配置SPI 的MOSI 为P101。

生成工程后,编写代码ws2812b.c 如下:

view plaincopy to clipboardprint?

1. #include “ws2812.h”

2.

3. static uint8_t spidate[SPIBUFL] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

4. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,

5. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,

6. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,

7. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,

8. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,

9.

10. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

11. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

12. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

13.

14. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

15. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

16. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

17.

18. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

19. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

20. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

21.

22. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

23. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

24. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

25.

26. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

27. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

28. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

29.

30. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

31. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

32. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

33.

34. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

35. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

36. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,

37.

38. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

39. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

40. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

41.

42. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

43. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

44. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

45.

46. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

47. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

48. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

49.

50. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

51. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

52. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

53.

54. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

55. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

56. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

57.

58. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

59. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

60. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,

61.

62. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

63. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

64. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,

65.

66. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8,

67. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8,

68. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8,

69.

70. 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8,

71. 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8,

72. 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8

73. };

74.

75. void ws2812Init(void)

76. {

77. R_SAU_SPI_Open(&g_spi0_ctrl, &g_spi0_cfg);

78.

79. }

80.

81. void show(void)

82. {

83. R_SAU_SPI_Write(&g_spi0_ctrl, spidate,SPIBUFL, SPI_BIT_WIDTH_8_BITS);

84. R_BSP_SoftwareDelay(80, BSP_DELAY_UNITS_MICROSECONDS);

85. }

86.

87. void clear(void)

88. {

89. memset(& spidate[NUMRES], 0xc0, (NUMPIXELS) * 3 * 8);

90. }

91.

92. void setPixelColor(uint16_t n, uint8_t g, uint8_t r, uint8_t b)

93. {

94. if (n < NUMPIXELS) {

95. uint8_t *p;

96. p = &spidate[NUMRES + n * 24];

97. for(uint8_t i = 0; i < 8; i++)

98. {

99. *(p + i) = (0 == (g & (1 << (7 - i)))) ? 0xc0 : 0xf8;

100. }

101. for(uint8_t i = 0; i < 8; i++)

102. {

103. *(p + i + 8) = (0 == (r & (1 << (7 - i)))) ? 0xc0 : 0xf8;

104. }

105. for(uint8_t i = 0; i < 8; i++)

106. {

107. *(p + i + 16) = (0 == (b & (1 << (7 - i)))) ? 0xc0 :0xf8;

108. }

109. }

110. }

ws18b20c.h:

view plaincopy to clipboardprint?

1. #ifndef WS2812_H_

2. #define WS2812_H_

3. #include “hal_data.h”

4.

5. #define NUMPIXELS (8)

6. #define NUMRES (60)

7. #define SPIBUFL ((NUMPIXELS) * 3 * 8 + NUMRES)

8.

9. void ws2812Init(void);

10. void show(void);

11. void clear(void);

12. void setPixelColor(uint16_t n, uint8_t g, uint8_t r, uint8_t b);

13.

14. #endif /* WS2812_H_ */

在主函数中添加测测试代码如下:

view plaincopy to clipboardprint?

1. void sau_spi_callback(spi_callback_args_t *p_args)

2. {

3. (void)p_args;

4. /* TODO: add your own code here */

5. }

6.

7. /*******************************************************************************************************************//**

8. * main() is generated by the RA Configuration edi tor and is used to generate threads if an RTOS is us ed. This function

9. * is called by main() when no RTOS is used.

10.**********************************************************************************************************************/

11. void hal_entry(void)

12. {

13. /* TODO: add your own code here */

14. ws2812Init();

15.

16. while(1)

17. {

18. clear();

19.

20. for(uint8_t i = 0; i < NUMPIXELS; i++)

21. {

22. setPixelColor(i, i*8+2, i*2, i*15);

23. show();

24. R_BSP_SoftwareDelay(50, BSP_DELAY_UNITS_MILLISECONDS);

25. }

26.

27. }

28.

29.

30. #if BSP_TZ_SECURE_BUILD

31. /* Enter non-secure code */

32. R_BSP_NonSecureEnter();

33. #endif

34. }

代码的主要思路是,将写入buff先清零,然后向数据中写信指定个数的RGB 数据,最后刷新到spi 总线之中。

瑞萨 新浪众测 新浪众测 新浪科技公众号 新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

相关新闻
本文来源于网络,不代表安徽新闻网立场,转载请注明出处
转发到:
拓展阅读
  • 探寻交通迷们的天堂!最新交通运输游戏排行榜揭示,哪些作品深受玩家喜爱。这十款人气爆棚的游戏,从真实的驾驶体验到策略经营,满足你对公路、铁路或航空的无尽幻想。无论是追求刺激的模拟驾驶,还是喜欢深度策略设计,这里总有一款能满足你的探索欲望。即刻[全文]
    2025-07-16 01:02
  • 探索游戏艺术新境界!风格化游戏哪个最好玩?权威盘点揭晓十大必玩的创新之作。排行榜上前十名,每一款都是视觉与玩法的盛宴,带你领略突破传统边界的独特魅力。无论你是寻求创新体验还是寻找设计灵感,这将是你的不二之选。即刻起,踏上这场充满惊喜的游戏之[全文]
    2025-07-16 01:08
  • 新浪科技公众号 “掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注) [全文]
    2025-07-16 00:29
  • 1   前言WS2812B是一种数字可编程LED灯条,也被称为NeoPixel。它由RGB(红、绿、蓝)三种颜色的LED组成,并集成了控制电路和信号处理功能。每个WS2812B LED 都有一个唯一的地址,并可以通过单个数据线进行串联连接。[全文]
    2025-07-15 23:44
  • 当前,折叠屏手机在普及过程中仍面临机身厚重,耐用性、影像能力不足等核心问题。针对这些用户痛点,新一代三星 Galaxy Z Fold7 折叠屏手机重点聚焦设计、影像和 AI 三大关键领域,并进行了系统性升级,为消费者提供了更成熟的折叠屏体验[全文]
    2025-07-16 01:20
  • 国民“土味”汽水大窑,为何在巅峰时刻屡陷“卖身”疑云?夏日烧烤摊上,年轻人举着大窑嘉宾畅饮的情形并不少见。这个来自内蒙古的国民汽水,悄然占据着北方餐馆的各个餐桌,成为烤串、火锅的“标配”。从呼和浩特街头叫卖起步的大窑,传闻年销超30亿,超过[全文]
    2025-07-09 00:12
阿里云服务器
腾讯云秒杀
Copyright 2003-2025 by 安徽新闻网 anh.newsfc.cn All Right Reserved.   版权所有