最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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幻彩燈帶的評論 (共 條)

分享到微博請遵守國家法律
威宁| 镇雄县| 邳州市| 韩城市| 留坝县| 屯门区| 太保市| 景宁| 贡嘎县| 策勒县| 黎城县| 嘉兴市| 临澧县| 南通市| 昭觉县| 平塘县| 新乡县| 永泰县| 江陵县| 中江县| 柳江县| 资源县| 普格县| 周宁县| 宣威市| 巴里| 抚宁县| 广水市| 遂平县| 遵义市| 山阳县| 尖扎县| 黎城县| 汉寿县| 库尔勒市| 阜城县| 焉耆| 赣榆县| 亳州市| 辉县市| 商南县|