国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何使用STC15W204S單片機控制WS2812幻彩燈帶

2022-01-18 16:41 作者:手工俠  | 我要投稿

????最近一期視頻中的大刀的Solidworks模型源文件和STC15W204S單片機的燒寫代碼下載地址:https://pan.baidu.com/s/1P8xO8DFufDx4yR0TkeDPXg?pwd=9932 提取碼:9932?

????代碼的LED部分沿用了上一期視頻破敗王劍的基礎功能,以后可能會繼續(xù)沿用下去

????STC15W204S單片機最小系統(tǒng) 是我在某寶能找到的最小的“最小系統(tǒng)”,就是程序空間4K小了點,寫不了太繁雜的代碼;且功能引腳也較少,僅一塊難以同時控制LED與電機兩個系統(tǒng);于是突發(fā)奇想使用兩塊單片機互聯(lián),引腳設定如下:

1號單片機(控制LED)


2號單片機(控制電機)

??

????RGB燈帶是在某寶找到的5V“幻彩燈帶”,控制芯片是WS2812

????關于如何使用STC15W204S單片機去生成控制WS2812能讀懂的二進制信息,我參考了幾個國內(nèi)大神的帖子,比如以下的2篇:

https://blog.csdn.net/u013062709/article/details/85217281

https://blog.csdn.net/weixin_38476200/article/details/115519393

????不過文中關于其使用的時鐘頻率,和我自己現(xiàn)實實踐下來仍然存在出入,畢竟他們使用的單片機是STC15W4K32S4和STC15F104E,而不是STC15W204S;

????要讓WS2812芯片聽話,其關鍵就在于發(fā)送給他的信號的信號時序一定要精確到其能接受的范圍內(nèi);

????首先是“0”和“1”如何約定,這一點極其關鍵!芯片只要讀出了0和1,就能讀出從0~255的二進制數(shù)字:

WS2812對0和1的定義

????當然“0”和“1”所組成的一大串數(shù)字,中間得有間隔,比如給WS2812的信息就是每隔24*N個(這里N是燈珠的數(shù)量)二進制數(shù)字發(fā)一個“空格”(空格的時間是微秒級),也就是上圖所示的“RESET碼”,一旦WS2812收到了“RESET碼”,后面?zhèn)鬟M來的信息,就會覆蓋上一輪的信息,從而實驗變色;

? ??WS2812芯片安裝在燈帶的每一個燈珠當中,數(shù)據(jù)傳輸給其中一個燈珠的芯片時,這塊芯片會把屬于自己的24位保留下來設置自己的顏色,另外的的24*(N-1)位數(shù)字會輸出給下一個燈珠中的芯片;

????24位的0和1,就是三個8位的0和1,也就是3組8位二進制數(shù),8位二進制能夠表達的數(shù)字,最大是“11111111”,換成十進制就是255;0~255,剛好夠?qū)崿F(xiàn)R、G、B三者其中一個色相的256色

WS2812信號的發(fā)送格式

? ? 而事實上我們寫入單片機的程序中,任何一句代碼的執(zhí)行基本上都會占用一定的時鐘周期:

C語言編譯后的匯編代碼中各個語句的時鐘周期

????對于工作頻率在11MHz~35MHz之間的STC15W204S單片機來說,一個時鐘周期,就是1/35M ~1/11M 的秒鐘數(shù),大約是28~91ns

(1/35兆)秒的換算
(1/11兆)秒的換算

????而WS2812對于時序的要求是納秒級的:

WS2812對于時序的要求

????因此,在程序中使用的用來傳輸信號的語句,必須嚴格控制代碼的精簡度!

????參照以上大神的代碼,經(jīng)過自己的一番摸索,我終于實現(xiàn)了讓WS2812聽話!

具體需要多少個_nop_靠實驗來定

????并且這一段程序,僅在工作頻率35MHz下才有效,否則燒寫后燈帶的顏色會不聽話,也就是剛好及格;

燒寫程序時設定的工作頻率
工作頻率設定為35Mhz

????以上對于STC15W204S的時序數(shù)據(jù),也許并不可靠,我實驗下來也是疑惑重重,所以,也許還有更加合理的代碼,不過目前我夠用啦!

????非計算機專業(yè),C51語言是大學畢業(yè)設計時期自學的,代碼中應該還有不規(guī)范和不嚴謹之處,所以僅供參考,哈哈~


如何使用STC15W204S單片機控制WS2812幻彩燈帶的評論 (共 條)

分享到微博請遵守國家法律
伊宁市| 波密县| 天津市| 乌鲁木齐市| 寿阳县| 郸城县| 缙云县| 博乐市| 霸州市| 南乐县| 临颍县| 广宁县| 永州市| 佛冈县| 天柱县| 建始县| 大方县| 岳阳市| 南溪县| 金山区| 玛多县| 呼图壁县| 沙田区| 卓资县| 东乌| 分宜县| 太保市| 老河口市| 合阳县| 曲靖市| 淄博市| 微山县| 德安县| 肃宁县| 武川县| 花莲市| 增城市| 六安市| 方山县| 罗田县| 静安区|