一 背景
前段時間發現在驅動WS2812B燈條的時候會有突然顯示其他顏色的情況,后來排查發現是時序被其他任務打斷了,在控制時序的時候需要做原子性訪問來保證時序的正確性。
二 WS2812B數據手冊
2.1 邏輯0和邏輯1
2.2 發送時序
綠色數據先發,高位在前
三 寫數據
3.1 精準ns和us級別延時的實現
一個__NOP()的時間是一個時鐘周期,如果主頻設置的是64MHz,那么一個時鐘周期就是1/64000000 = 15.625ns,這里只需要實現一個330ns延時,2個330ns就是660ns了。
void delay_330ns(void)
{
volatile uint8_t cnt = 21;
while(cnt--)
{
__NOP();
}
}
void delay_660ns(void)
{
volatile uint8_t cnt = 21*2;
while(cnt--)
{
__NOP();
}
}
void ws2812b_write_data(uint8_t data){
for(uint8_t i=0;i< 8;i++)
{
if(data & 0x80)//高位先發
{
GPIOA- >BSRR = GPIO_PIN_8;
delay_660ns();
GPIOA- >BRR = GPIO_PIN_8;
delay_660ns();
}
else
{
GPIOA- >BSRR = GPIO_PIN_8;
delay_330ns();
GPIOA- >BRR = GPIO_PIN_8;
delay_660ns();
}
data< <=1;
}
}
#define CONFIG_LED_COUNT 12
void updata_light(uint8_t green,uint8_t red,uint8_t blue)
{
rt_base_t level = rt_hw_interrupt_disable();//關閉中斷
for(int i=0;i< CONFIG_LED_COUNT;i++)
{
WS2812_Send(green); //發送當前需要亮的燈的顏色
WS2812_Send(red);
WS2812_Send(blue);
}
rt_hw_interrupt_enable(level);//開啟中斷
rt_hw_us_delay(300);//復位顯示
}
四 總結
當燈的數量比較多的時候,就不能用這種延時方式了,長時間的關閉中斷可能會引起一些中斷無法及時響應造成數據丟失,在發現問題的時候或者調試新算法的時候,需要基于數據來分析問題,有了數據自然就會有答案了。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
驅動器
+關注
關注
53文章
8254瀏覽量
146465 -
led燈
+關注
關注
22文章
1592瀏覽量
108057 -
GPIO
+關注
關注
16文章
1205瀏覽量
52139 -
串口中斷
+關注
關注
0文章
64瀏覽量
13921 -
WS2812B
+關注
關注
1文章
38瀏覽量
2191
發布評論請先 登錄
相關推薦
使用ESP8266驅動WS2812B型RGB LED智能燈制作分享
這個智能燈方案很不錯,只用了一個無線WIFI esp8266芯片,驅動ws2812b型RGB LED,效果很贊,在群里看到的,特分享下,若是侵犯了版權,聯系我刪除就行了
發表于 07-16 04:35
怎樣使用PWM+DMA的方式去驅動WS2812B呢
PWM+DMA 驅動 WS2812一、項目要求(主要目的)使用 PWM+DMA 的方式驅動 WS2812B, 并每隔 800ms 隨機顯示不
發表于 02-22 06:42
用ws2812b led燈條做遠程區域面板控制器的教程
描述WS2812B 遠程區域面板控制器我用ws2812b led燈條做了一個面板,你可以把覆盆子前面的動畫放到面板上使用此板,您可以控制面板并將其放置在任何有 wifi 的地方PCB代
發表于 07-29 07:16
使用WS2812b Led燈條的diy光劍光劍控制器
描述使用 WS2812b Led 燈條的 diy 光劍光劍控制器,包括用于聲音的微型 SD 插槽、用于運動跟蹤的 6 軸傳感器和用于光劍聲音的揚聲器。通過板載 USB 端口和 Arduino IDE 進行編程。
發表于 08-25 07:40
【LuckFox Pico Plus開發板免費試用】05_使用SPI驅動WS2812B
使用SPI驅動WS2812B 前面把開發環境全部搭好,工具也都準備好了,這次就來做點小demo,正好手上有一個WS2812B的小燈條,上面有
發表于 10-29 19:15
Arduino WS2812B LED燈帶設計方案
Arduino WS2812B LED燈帶可單獨控制每個LED的亮度和顏色,提供了一種簡單而酷炫的LED效果體驗。
發表于 04-24 08:36
?1.3w次閱讀
迷你乒乓球含Arduino Nano WS2812B LED燈條
電子發燒友網站提供《迷你乒乓球含Arduino Nano WS2812B LED燈條.zip》資料免費下載
發表于 11-02 11:00
?0次下載
適用于Azure Sphere的WS2812B LED燈帶驅動器
電子發燒友網站提供《適用于Azure Sphere的WS2812B LED燈帶驅動器.zip》資料免費下載
發表于 12-06 14:42
?0次下載
評論