<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【晶心科技ADP-Corvette-T1開發板試用體驗】使用Arduino的SPI庫,直接驅動WS2812B炫彩點陣板

開發板試用精選 ? 來源:開發板試用 ? 作者:電子發燒友論壇 ? 2022-11-11 11:31 ? 次閱讀

本文來源電子發燒友社區,作者: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 擴展庫,方法如下:
poYBAGKv8u6AMKDtAAMzO4CEeRM505.png


安裝完成后,開發板選擇ADP-Corvette-T1,然后點擊編譯。
沒想到,杯具的事情發生了,錯誤提示:Adafruit NeoPixel 擴展庫不支持該開發板。
不甘心,這么通用的WS2812B,一定要辦法驅動起來。

仔細看了 ADP-Corvette-T1 的官方資料,了解到如下信息
poYBAGKv9EmAKbE0AAAxnuWe8AA802.png

在開發板上,提供了SPI數據傳輸接口,而WS2812B真是使用SPI來驅動的。

詳細查看板子的定義:
pYYBAGKv8u-AW9_UAAthN4ClyXU969.png

IO11可復用為SPI/MOSI,剛好可以用作WS2812B的數據控制。

參考開頭提供的文章,最終具體的連線如下:
poYBAGKv8vGABASGABPHxQlDoa4637.png


具體的實物連線如下:
pYYBAGKv8vSAH9plAFdgibYwXs858.jpeg


直接使用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

具體代碼文件:
代碼展示:
pYYBAGKv9i6AKVVvABecAPWHWHQ412.png


上述代碼的具體說明:
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.beginTransaction()
通過傳入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對應值,高位優先,操作模式為默認值。

編寫好代碼后,編譯下載,就能運行起來:
poYBAGKv8vmAd57DAAqRTwFNl78041.png

打開串口,Ardunio的串口工監視器,就能看到串口輸出的信息,會顯示當前要點亮的燈珠;
把板子翻過來,可以看到背后的LED3在狂閃,因為代碼中設置的delay為100毫秒,1秒得有10次。
再看WS2812B炫彩8*8點陣,燈珠按順序點亮并熄滅。
具體效果,如視頻所示。

如在前兩篇分享的控制WS2812B的文章中所說,你可以根據自己的需要,讓這塊WS2812B炫彩8*8點陣呈現出更復雜的效果,行動起來吧!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 晶心科技
    +關注

    關注

    0

    文章

    93

    瀏覽量

    18082
  • 開發板試用
    +關注

    關注

    3

    文章

    299

    瀏覽量

    1946
收藏 人收藏

    評論

    相關推薦

    STM32F030 MDA+PWM驅動ws2812b,起始的50US的低電平是怎么產生?

    STM32F030 MDA+PWM 驅動 ws2812b,起始的50US的低電平怎么產生? 現在dma+pwm,倒是可以產生一個800K hz的驅動數據,但是WS2812要求有50US
    發表于 04-12 07:23

    瑞薩e2studio(28)----SPI 驅動WS2812燈珠

    本文介紹了如何使用瑞薩RA微控制器,結合E2STUDIO配置工具和SPI通訊接口,來驅動和控制WS2812 LED燈帶。這是一個集硬件連接、軟件配置和編程開發于一體的綜合性項目,目標是
    的頭像 發表于 12-01 16:48 ?1182次閱讀
    瑞薩e2studio(28)----<b class='flag-5'>SPI</b> <b class='flag-5'>驅動</b><b class='flag-5'>WS2812</b>燈珠

    STM32C0開發(1)----SPI 驅動WS2812燈珠

    本文介紹了如何使用STM32微控制器,結合STM32CubeMX配置工具和SPI通訊接口,來驅動和控制WS2812 LED燈帶。這是一個集硬件連接、軟件配置和編程開發于一體的綜合性項目
    的頭像 發表于 12-01 16:47 ?1477次閱讀
    STM32C0<b class='flag-5'>開發</b>(1)----<b class='flag-5'>SPI</b> <b class='flag-5'>驅動</b><b class='flag-5'>WS2812</b>燈珠

    基于瑞芯微 RV1103 芯片,微型 Linux 開發板LuckFox Pico Plus開發實踐

    了。 >>>點此查看全文 6.使用SPI驅動WS2812B 前面把開發環境全部搭好,工具也都準備好了,這次就來做點小demo,正好手上有一個
    發表于 11-30 14:10

    【LuckFox Pico Plus開發板免費試用】05_使用SPI驅動WS2812B

    使用SPI驅動WS2812B 前面把開發環境全部搭好,工具也都準備好了,這次就來做點小demo,正好手上有一個WS2812B的小燈條,上面有
    發表于 10-29 19:15

    ws2812B需要多高頻率的單片機才能驅動?串聯驅動最多能驅動幾個?

    ws2812B需要多高的頻率的單片機才能驅動?串聯驅動最多能驅動幾個?
    發表于 10-28 06:45

    ws2812b的中文規格書

    我在網絡找了好多ws2812b的規格書都是不是這里錯就是哪里錯。這是我修正的一個文檔供大家參考使用。
    發表于 10-20 17:07 ?9次下載

    【悟空派H3開發板免費體驗】基于spi驅動WS2812

    ; } } int fd = -1; void WS2812_ShowRGB(u_int8_t r,u_int8_t g,u_int8_t
    發表于 10-10 22:33

    全志R128芯片應用開發案例——驅動 WS2812 流水燈

    數據會在第 n 個 LED 的數據前發送,不過這些數據將會是原來 n-1 個 LED 的亮度數據。 由于擁有獨立的 LEDC 模塊,在 R128 平臺上驅動 WS2812 類似的 RGB LED
    發表于 10-10 14:08

    WS2812B燈多了怎么保證時序的正確?

    WS2812B燈多了,怎么保證時序的正確。
    發表于 09-20 08:14

    WS2812B最后一個燈的顏色總是不對,是什么原因造成的?

    WS2812B最后一個燈的顏色總是不對
    發表于 09-20 07:24

    使用M032系列微控制器將WS2812B通過SPI0或USPI0的MOSI驅動到光RGB-LED條

    應用:此樣本代碼是執行控制 SPI M032 傳輸協議,通過 USB HID 接口從PC 側到驅動 WS2812B LED 條。 BSP 版本: M031 BSP CMSIS V3.03.000
    發表于 08-29 07:56

    驅動WS2812B燈條時顯示其他顏色咋辦?

    前段時間發現在驅動WS2812B燈條的時候會有突然顯示其他顏色的情況,后來排查發現是時序被其他任務打斷了,在控制時序的時候需要做原子性訪問來保證時序的正確性。
    的頭像 發表于 07-21 15:38 ?2043次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>WS2812B</b>燈條時顯示其他顏色咋辦?

    什么是WS2812B?WS2812B燈帶是怎么連接的呢?

    WS2812B是一款全彩LED控制IC,單總線控制,何為單總線我的理解就是數據線在一根線上傳輸的控制方式就是單總線。
    的頭像 發表于 07-08 14:53 ?7460次閱讀
    什么是<b class='flag-5'>WS2812B</b>?<b class='flag-5'>WS2812B</b>燈帶是怎么連接的呢?

    【感芯科技MC3172開發板體驗】WS2812音樂燈帶

    (MC3172沒有,但開發板上的ch32v203有8個ADC已經引出),其中SPI負責驅動WS2812燈帶,ADC則負責采集MAX9814模塊的音頻信息,串口則負責接收ADC的數據。一
    發表于 06-09 00:49
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>