---
# System prepended metadata

title: LightDance LED進階篇

---

# LightDance LED進階篇
## 燈珠簡介
![image](https://hackmd.io/_uploads/BJNTEscO0.png)

| 編號 | 符號 | 功能描述           |
|------|------|-------------------|
| 1    | VDD  | LED 電源供應       |
| 2    | DOUT | 控制數據信號輸出   |
| 3    | VSS  | 接地               |
| 4    | DIN  | 控制數據信號輸入   |
    
一般來說在焊接的時候不會直接拿燈珠來焊，會在後面加上一些外圍電路
整合變成
![image](https://hackmd.io/_uploads/ryyBro9_0.png)

## 訊號
而最重要的就是，訊號的部分，電腦是怎麼控制的?

{%youtube PPVi3bI7_Z4 %}
{%youtube 6iK7KoPF4Ew %}
[中文版影片(Bilibili)](https://www.bilibili.com/video/BV1QM4y1g7Uk/?spm_id_from=333.337.search-card.all.click)


首先我們知道，RGB分別可以用8個二進位的數字來控制亮度
也就是可以控制0~255
如果不知道二進位的話可以參考[這個](https://chanchandev.com/note/Binary/binary-intro/3766688417/)

分別控制三個燈光我們就可以得到$256^3$種顏色
所以一顆燈的顏色就是24bit的資料
![image](https://hackmd.io/_uploads/SJEuDi9O0.png)


:::info
而他要怎麼傳輸數據呢?

答案是透過訊號線上的電壓變化
:::

我們觀察一個周期內的電壓波型(大約1.3us)
|代表的意義|0|1|RET|
|:--:|:--:|:--:|:--:
|波型|![image](https://hackmd.io/_uploads/BJ2Wdo5OR.png)|![image](https://hackmd.io/_uploads/S1OM_squR.png)|![image](https://hackmd.io/_uploads/SJmXui9u0.png)|

所以我們可以看一些範例:
|波型|代表的數據(G,R,B)|
|:--:|:--:|
![image](https://hackmd.io/_uploads/HybUFo9dR.png)|0,170,0
|![image](https://hackmd.io/_uploads/H1oJ9j5uC.png)|170,0,0
![image](https://hackmd.io/_uploads/rJ1b9scd0.png)|0,0,170

讀到波型數據後，會將這些數據讀入鎖存器
同時前段的24bit代表該燈顏色的數據會被刪除，將剩下的數據傳往下一顆
直到RET訊號後，顯示各燈相應的顏色。


## DATAsheet

如果想閱讀更多的話可以參考[Datasheet](https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf)
裡面有詳細的技術規格



---
### 參考文章
https://frank1025.pixnet.net/blog/post/348256387
ws2812 datasheet https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf