![]() |
發布時間: 2024-5-6 15:55
正文摘要:懂WS2812的師傅們,請教個問題如圖,我示波器的圖跟規格書的圖,如何去看波形對不對?要看哪些參數?如何去看波形和規格書?請教各位師傅們了 |
Y_G_G 發表于 2024-5-8 17:40 萬分感謝師傅百忙抽時間回復我,謝謝!剩下的交給徒弟我了。 |
hai2369513 發表于 2024-5-8 09:26 示波器如果是英文的,它會有一個cursor的按鍵,使用方法大多是一樣的,或者是相似的 你先在一個測量波形的界面,按下停止按鍵,就像你現在上傳的這個波形一個 然后按一下cursor按鍵,左右旋轉一下旋鈕,大概操作就是這樣子的,一時半會兒說不明白,你可能百度一下 然后,你再去測量一下示波器上的的1KHZ時鐘,用來驗證一下 如果你的示波器沒有這個cursor按鍵,那它可能是叫"光標" |
Y_G_G 發表于 2024-5-7 12:50 師傅,您說的那個測時間長度的功能叫什么?比如?? |
cnos 發表于 2024-5-7 16:03 感謝師傅,學習了! |
論壇里面已經有帖子把2812的時序用通俗語言解釋得較為清楚了,我也簡單在他們的基礎上進一步總結一下 要從芯片設計制造的角度去思考時序問題。比如為什么DS18B20和WS2812這種芯片的時序時間都有一個范圍,其實是因為這些芯片內部用的是RC振蕩器,所以不會太精準,因此要求外部時序無論在高溫低溫還是電壓偏高偏低的情況下都落入一個特定的范圍。 對于ws2812來說,只要來個高電平,那么就會觀察這個高電平的持續時間,如果持續時間小于某個值,判為0,如果大于某個值,判為1. 如果信號變成了低電平,那么就等待下一個信號的到來,如果等了半天80us,沒有下一個信號,就判定為復位信號,本次傳輸結束。 因此只要控制高電平持續時間的長短,就是控制了發的到底是1還是0了。以下是我用的代碼,自認為沒有更簡潔的辦法了。 //STC8G1K08A 22.1184MHz
|
示波器有一個可以測量時間長度的功能,你測量一下就可以了 在這方面30塊邏輯分析儀比示波器好用 這是一個已經驗證的WS2812寫入函數,你參考一下 /*————————————————————————————————————————————————————————————————— *函數名 :write_ws2812 *函數功能 :寫入數據 *輸入 :rgb_data *輸出 :無 備注: 使用16MHZ的內部RC時鐘,一個指令周期為: 250uS,不需要增加延時 —————————————————————————————————————————————————————————————————*/ void write_ws2812(u8 rgb_data) { u8 i; for(i = 0; i < 8; i++) { if(rgb_data & 0x80)//寫"1" { DO = HI; delay_750ns//這個是宏定義750nS延時,你要根據你用的單片機來自己寫一個,51單片機可以用幾個空指令來完成 DO = LOW; } else //寫"0" { DO = HI;//如果你用的單片機指令快于250nS,可以加一個或者幾個空指令,來達到延時的目的 DO = LOW; } rgb_data <<= 1; } } |