JL690X(2)驱动RGB灯带
AC690X驅動WS2812(SM16703P)點亮RGB燈帶
????????在使用AC690X系列藍牙時,需要設計驅動幾十個RGB燈帶的程序,經一段時間學習后成功驅動,現在把實現過程分享給大家共同學習。
??????1.芯片說明
????????此類芯片協議采用的是單極性歸零碼,每一個碼元都必須有高低電平。本協議的每個碼元起始為高電平,高電平時間寬度決定“0”碼或者“1”碼。
| T0H | 0碼,高電平時間 | — | 0.3 | — | us |
| T1H | 0碼,低電平時間 | — | 0.9 | — | us |
| T0L | 1碼,高電平時間 | — | 0.9 | — | us |
| T0H | 1碼,低電平時間 | — | 0.3 | — | us |
| Trst | Reset碼,低電平時間 | — | 80 | — | us |
????????關于其他的參數,級聯等,芯片手冊均有說明,這里不再贅述。作者在查閱資料時發現關于歸零碼高低電平時間的定義有多種,只要范圍在如下時間左右基本都可實現驅動,零碼:高電平時間400ns,低電平時間800ns;‘1’碼:高電平時間800ns,低電平時間400ns,‘0’碼:高電平時間400ns,低電平時間800ns。
??????2.驅動方法
????????作者通過SPI驅動RGB燈條,在AC690X的SDK基礎上利用SPI1的PB12和PB11分別作為數據線和時鐘線進行驅動,此驅動方法的弊端就是PB11會有時鐘信號輸出不能再用于其他功能,PB10只要設置SPI1為單向通訊即可做普通IO使用。
??????3.代碼設計
????????SPI1驅動的方式是8 Bit 模擬一個歸零碼的一個‘0’或者‘1’;因此‘0’碼對應的數據為0xC0,‘1’碼對應的數值為0xFC。讀者亦可使用三個時鐘周期模擬一個‘0’碼或者‘1’碼,這種方式一個IC的24BIT剛好是1Byte的時鐘周期,注意兩種模擬方式時鐘周期不同?;貧w正題,首先在lcd_spi.c文件做出如下修改:
//#if LCD_128X64_EN #if 1????????盡量不要在sdk_cfg.h中直接修改LCD_128X64_EN 的值為1,這樣的操作會編譯不需要的代碼。 開啟此SPI相關函數定義之后,在初始化時初始SPI相關寄存器(SDK直接調用SPI1_init()函數即可,速度設置為8M)。
while(1) {clear_wdt();SPI1_DmaWrite(RGBData,24*RGBNum); }RGBNum為RGB燈珠的數目,可依據實際數目進行設置參數;若實際RGB顏色出現混亂的現象,RGBData數據組成修改為:N個0x00 + RGB數據 + M個0x00,N和M的取值用戶自行設置驗證。
??????4.結束語
????????以上便是本人使用AC690X設計RGB驅動的實現過程,鄙人才疏學淺,文章如存在錯誤之處望大家不吝賜教,贈于鄙人學習的機會。歡迎大家進行交流學習,企鵝583671536。
總結
以上是生活随笔為你收集整理的JL690X(2)驱动RGB灯带的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓应用程序开发培训!整理几个重要的An
- 下一篇: 【pandas】set_index函数详