|
coody_sz 發表于 2025-4-29 17:47 能發程序上來學習一下嗎? |
| 我用STC的AI8051U驅動WS2812,用PWM或SPI都可以,DMA傳輸,不耗CPU時間,一次傳輸最多2700個燈。 |
| 要控制每一個脈沖的時間,這并不省事,如果本身程序有很多事情做,可以考慮再掛一塊單片機專門做這個事 |
| 用SPI模擬,不要用PWM |
World-semi 發表于 2025-4-3 17:04 你好,我也想要資料,謝謝! |
World-semi 發表于 2025-4-3 17:04 我也想要資料,文檔即可,謝謝 |
|
你好,我這邊是WS2811的原廠家,有關時序控制的問題,可以聯系我們,我們可以提供技術支持和源代碼,教你控制WS2811 |
| 一個周期造一個bit,可以先送幾個周期,確保數據是你想要的,再進行下一步,一般要配合dma |
Jasminedebug 發表于 2025-3-6 13:02 STC的PWMM頻率是不能設置的!它只能是時鐘的多少分之一的分頻 就算是有能設置的型號,320nS就是0.32uS,那就是說,最壞的情況就是,每0.32uS的時間就進入中斷一次,用來處理下一個字節 系統幾乎沒有時間去做其它的事了,沒有人這么干的 |
lkc8210 發表于 2025-3-6 10:26 void WS_Set1(unsigned long dat) { unsigned char i; for(i = 0; i < 24; i++) { if(0x800000 == (dat & 0x800000) ) { WPWM_OUT_SET(42);//48MHz:1碼,高電平920ns,低電平320ns } else { WPWM_OUT_SET(12);//48MHz:0碼,高電平320ns,低電平920ns } dat <<= 1; } } 請問這樣寫切換0、1碼和用PWM溢出中斷切換0、1碼有什么區別? 是因為這樣寫導致0、1碼切換過慢是嗎? |
lkc8210 發表于 2025-3-6 10:26 void WS_Set1(unsigned long dat) { unsigned char i; //EA = 1; for(i = 0; i < 24; i++) { if(0x800000 == (dat & 0x800000) ) WPWM_OUT_SET(42);//48MHz:1碼,高電平920ns,低電平320ns else WPWM_OUT_SET(12);//48MHz:0碼,高電平320ns,低電平920ns dat <<= 1; } } 我想了解一下我這樣寫有什么問題,是因為這樣寫PWM的0、1碼切換過于慢,所以要用PWM溢出中斷來切換0、1碼是嗎? |
|
用PWM驅動WS2811需要用PWM溢出中斷 在中斷內更新下一個PWM的占空比 |
| 這個芯片跟PWM是沒什么關系的,亮度是由寫入的數據決定的 |