登录
【晶心科技ADP-Corvette-T1开发板试用体验】使用Arduino的SPI库,直接驱动WS2812B炫彩点阵板
开发板试用精选
2022-11-11
2401
分享海报
开发板试用精选
807 文章
87.3w阅读
143粉丝
+关注
描述
本文来源电子发烧友社区,作者:HonestQiao, 帖子地址:
https://bbs.elecfans.com/jishu_2287848_1_1.html
效果演示(开发板体验视频,详见作者原帖子文章)
昨天我在 DFRobot Beetle ESP32-C3
开发板
开发板上,成功用 Adafruit NeoPixel 扩展库,驱动了WS2812B炫彩点阵。具体可见文章:
Arduino编程控制WS2812B炫彩LED
既然ADP-Corvette-T1开发板也能用Arduino,那应该可以把类似的程序,按照ADP-Corvette-T1开发板的Arduino支持,使用Adafruit NeoPixel 扩展库来驱动WS2812B。
说干就干,先在Adafruit NeoPixel 扩展库的Arduino开发环境中,安装Adafruit NeoPixel 扩展库,方法如下:
安装完成后,开发板选择ADP-Corvette-T1,然后点击编译。
没想到,杯具的事情发生了,错误提示:Adafruit NeoPixel 扩展库不支持该开发板。
不甘心,这么通用的WS2812B,一定要办法驱动起来。
仔细看了 ADP-Corvette-T1 的官方资料,了解到如下信息:
在开发板上,提供了SPI数据传输接口,而WS2812B真是使用SPI来驱动的。
详细查看板子的定义:
IO11可复用为SPI/MOSI,刚好可以用作WS2812B的数据控制。
参考开头提供的文章,最终具体的连线如下:
具体的实物连线如下:
直接使用SPI底层设备来驱动,需要使用到Arduino官方的SPI库,其官方网址为:
SPI - Arduino Reference
而在此之前,我还分享过另外一篇控制WS2812B的文章:
Debian-StarFive下的SPI驱动WS2812B炫彩灯珠
,在该篇文章中,就详细的说明了,想要控制,应该如何发送数据。
在上面的这篇分享中,控制的是单颗LED灯珠。在ADP-Corvette-T1开发板上,这次我们要控制8*8点阵共64颗LED灯珠。
通过对Arduino官方的SPI库资料的学习,最终完成了演示代码,实现了流水灯的效果。
在该演示代码中,同时包括:
1. 串口调试输出
2. 板载LED控制
3. SPI控制WS2812B
具体代码文件:
ADP-Corvette-T1_SPI_WS2812B.zip
(1.32 KB, 下载次数: 3 )
代码展示:
上述代码的具体说明:
1. 全局定义:
1). 使用SPI.h,确定使用SPI库
2
)
. 定义灯珠、引脚信息
3
)
. 定义要发送的数据信息;关于其具体的定义,可以查看
Debian-StarFive下的SPI驱动WS2812B炫彩灯珠
4). 定义当前要点亮的灯珠
5. 定义lgiht_n函数,表示通过SPI发送控制数据,当前灯珠发送点亮数据,其他的发送熄灭数据;具体颜色,根据i值取余取前面定义的颜色。
2. 启动设置部分:setup()
1). 设置串口速度
2). 设置D13为输出,用于控制板载的LED3(在板子背面)
3). 定义SPI的传送参数;具体的参数说明,后面详细的说。
3. 循环部分:loop()
1). 串口输出当前要点亮的LED灯珠
2). 根据当前要点亮的灯珠序号取2的余,来亮灭LED3
3). 点亮指定的LED灯珠
4). 延时
5). 指向下一刻灯珠;如果达到最大,则从头开始。
在上面的代码中,SPI参数设置部分,尤为重要。
要设置SPI参数,有两种办法:
1). SPI.setClockDivider():相对于系统时钟设置SPI时钟分频器。
关于分频器的基本知识,我在
定时器使用基础:使用系统时基定时器和基本定时器闪烁LED
分享中,有讲过。
因为 ADP-Corvette-T1开发板 的最高频率为 96MHz,我们找一个接近 6.4MHz的分频。
分频器可以使用的系统定义为:
SPI_CLOCK_DIV2,SPI_CLOCK_DIV4,SPI_CLOCK_DIV8, SPI_CLOCK_DIV16,SPI_CLOCK_DIV32,SPI_CLOCK_DIV64,SPI_CLOCK_DIV128
在其中,16分之一接近6.4MHz,所以这里可以使用
SPI_CLOCK_DIV16。
在该方式下,其他的参数使用默认值即可。
2). SPI.beginTransac
ti
on()
通过传入
SPISettings()获取的定义参数来初始化SPI设备;
SPISettings()具体定义为:
SPISettings(speedMaximum,dataOrder,dataMode)
其中:
speedMaximum:表示时钟
dataOrder:表示数据发送优先顺序,
MSBFIRST表示高位优先,
LSBFIRST表示低位优先。
dataMode:表示SPI的
四种操作模式:
2.1) 模式0:默认值,时钟通常为低电平(CPOL = 0),数据在从低电平到高电平(前沿)(CPHA = 0)的转换时采样。
2.2)
模式1
:
时钟通常为低电平(CPOL = 0),数据在从高电平到低电平(后沿)(CPHA = 1)的转换时采样。
2.3)
模式2
:
时钟通常为高电平(CPOL = 1),数据在从高电平到低电平(前沿)(CPHA = 0)的转换时采样。
2.4)
模式3
:
时钟通常为高电平(CPOL = 1),数据在从低电平到高电平(后沿)(CPHA = 1)的转换时采样。
演示代码中,具体传入的为:SPISettings(6400000, MSBFIRST, SPI_MODE0),表示时钟为6.4MHz对应值,高位优先,操作模式为默认值。
编写好代码后,编译下载,就能运行起来:
打开串口,Ardunio的串口工监视器,就能看到串口输出的信息,会显示当前要点亮的灯珠;
把板子翻过来,可以看到背后的LED3在狂闪,因为代码中设置的delay为100毫秒,1秒得有10次。
再看WS2812B炫彩8*8点阵,灯珠按顺序点亮并熄灭。
具体效果,如视频所示。
如在前两篇分享的控制WS2812B的文章中所说,你可以根据自己的需要,让这块WS2812B炫彩8*8点阵呈现出更复杂的效果,行动起来吧!
打开APP阅读更多精彩内容
点击阅读全文
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
晶心科技
开发板试用
【RISC-V专题】
晶
心
科技
ADP-Corvette-T1
开发板
首发
试用
2022-04-14
0
【DFRobot Beetle ESP32-C3
开发板
试用
体验】
Arduino
编程控制
WS2812B
炫
彩
LED
2022-06-20
0
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】使用
Arduino
的
SPI
库
,
直接
驱动
WS2812B
炫
彩
点阵
板
2022-06-20
0
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】 脑电波检测拓朴结构以及泰凌微IDE安装使用
2022-06-25
0
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】
ADP-Corvette-T1
开发板
使用的第三方IDE——
1
.手动为
Arduino
添加
Corvette-T1
开发板
2022-07-06
0
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】
ADP-Corvette-T1
开发板
使用的第三方IDE——2.手动为
Corvette-T1
开发板
添加
驱动
(win10)
2022-07-06
0
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】
ADP-Corvette-T1
开发板
使用的第三方IDE——3.嵌入式工程师即将诞生,Hello,World!
2022-07-06
0
晶
心
ADP-Corvette-T1
编程
驱动
WS2812B
炫
彩
LED
2022-06-30
1268
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】开箱使用报告
2022-11-11
1405
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】
ADP-Corvette-T1
开发板
使用的第三方IDE——3.嵌入式工程师即将诞生,Hel
2022-11-11
753
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】
ADP-Corvette-T1
开发板
使用的第三方IDE——2.手动为
Corvette-T1
开发板
添加驱
2022-11-11
894
【
晶
心
科技
ADP-Corvette-T1
开发板
试用
体验】
ADP-Corvette-T1
开发板
使用的第三方IDE——
1
.手动为
Arduino
添加
Corvette-T1
开
2022-11-11
713
【
试用
体验】
晶
心
ADP-Corvette-T1
编程
驱动
WS2812B
炫
彩
LED
2022-06-27
971
全部
0
条评论
快来发表一下你的评论吧 !
发送
登录/注册
×
20
完善资料,
赚取积分