最近入手一個多彩LED模組 WS2812,使用Arduino要讓它"亮起來"很容易,但我想用Silicon lab的單晶片讓它工作,沒想到比我想像中的困難。
最後的成果是搭配示波器所完成,並且是工作在48MHz的情況下。
單晶片型號:EFM8UB2F64G @ 48MHz
多彩LED模組:WS2812-12
開發環境:Keil uVision V5.38.0.0
參考資料:WS2812B datasheet
我觀察到這一顆單晶片的1個機械週期需要2個系統時脈(不是很確定),效率比"很久之前"學單晶片的12個系統時脈高多了。
程式碼如下:(程式中紅色底的 "delay++" 是延遲用)

其實程式碼非常簡單,值得注意的是,for迴圈使用++的方式,跟使用--的方式,編譯出來的效能不同(使用--的方式較快)。變數我用1個位元組的unsigned char,這樣搬來搬去或是運算會比較快。
以示波器觀察如下:






T0L(e)及T1L(e)這兩個是每傳完8個bit (for j迴圈結束)後,跳至下一個8bit時,會有延遲問題。但沒關係,因為這些時間誤差都在WS2812的容許誤差裡(正負150nS)
成果如下:
加上一層衛生紙,有一種朦朧美^^
後記:
使用單晶片EFM8BB1控制WS2812LED模組(組合語言)
文章標籤
全站熱搜
