WS2812B 5*5
Intellgent control LED light source
이번에는 RGB LED 를 한번 동작시켜볼까 합니다.
LED...뭐 당연히 번쩍번쩍 불빛을 내며 동작할 겁니다.
근데 대체 어떻게 생겼고, 또 어떻게 사용하는 거야?
저도 궁금합니다! 같이 차근히 보시죠!
1. WS2812 vs WS2812B
제가 가지고 있는 제품은
'WS2812-5*5' 라고
제품명이 표기되어 있습니다...
일단 사용법을 알아야하니,
WS2812 데이터시트를 검색해 봤습니다.
그런데, 생긴게 제가 가지고 있는 것과
약간 다르더라구요...;;;;
아래 그림을 한번 보시죠.
분명 제품에는 WS2812-5*5 라고 적혀 있는데,
픽셀 한 개를 자세히 들여다보면
다리가 4개 입니다...
WS2812는 6개이고...WS2812B는 4개네요.
아니, 왜 이름을 정확히 표기를 안해놨냐!!!
"B" 어디갔냐고!!!
괜히 데이터시트랑 실물이랑 다르다고 한참을 투덜댔네요.
아무튼, 찾다보니 제가 가지고 있는 제품은
WS2812B 였단 걸 알게 되었습니다.
혹시나 저같이 이상한데서 시간 버리지 마시라고
앞부분에 이렇게 적어둡니다ㅠㅠ
아무튼 데이터시트를 더 들여다 봅시다!
아래의 데이터시트 캡처본은
WS2812B의 데이터시트 내용입니다.
0 code 를 만들기 위해선, [0.4us 동안 High] + [0.85us 동안 Low]
1 code 를 만들기 위해선, [0.8us 동안 High] + [0.45us 동안 Low]
아래의 그림처럼 0 code와 1 code를 각각 만들어서 보내줘야 하네요!
제가 가지고 있는 것은 25개의 픽셀로 구성된 제품이지만,
이해상 편의를 위해, 25개 중에서 처음 4개의 픽셀만 구동한다고 가정해 봅시다.
1번 픽셀 동작을 위해 24 bit, 2번 픽셀 동작을 위해 24 bit,
3번도 24 bit, 4번도 24 bit
즉, 4개의 픽셀을 동작시키기 위해서는
총 96bit를 보내줘야 하네요!
24bit data를 보낼 때는 위의 순서대로 보내줘야 합니다.
2. WS2812B 실물 및 5*5 구성 연결도
제가 가지고 있는 녀석은 이렇게 생겼고,
25개 픽셀 중 하나를 확대한 것이 오른쪽 사진입니다.
4핀입니다!!!
근데 DIN은 한 개 밖에 없는데...
이거 하나로 어떻게 25개를 다 동작시킬까?
디지털 멀티미터로 하나씩 찍어봤습니다.
어떻게 연결이 된건지 궁금해서...
(제가 좀 무식합니다...하하)
픽셀은 좌측 하단부터 우측 상단까지
직렬로 주우우우우욱 연결되어 있습니다.
이걸보니,
25개 픽셀에 대한 동작 명령을 한꺼번에
DIN으로 보내주면 되는 것 같습니다.
3. 동작 및 신호 확인
자, 일단 예제를 가지고 동작시켜 봅시다!
제가 가지고 있는 것은 총 25개의 픽셀로 구성된 제품이지만
동작상 편의를 위해,
예제를 살짝 수정해서 2개의 픽셀만 동작을 시켜보겠습니다.
짜잔~!
먼저 첫번째 픽셀에 연한 초록색이 켜지고,
그 다음에 첫번째, 두번째 픽셀에 모두 연한 초록색이 켜집니다.
이런 식으로 계속해서 반복되며 동작하고 있어요.
우측에 오실로스코프 파형을 보면,
펄스의 개수가 총 48개 출력되네요.
처음 24개는 픽셀 1 동작을 위해, 그 다음 24개는 픽셀 2 동작을 위해
필요한 명령인 것이죠.
첫번째 파형을 보면, 1 code가 딱 2개 있고, 나머지는 모두 0 code 입니다.
두번째 파형을 보면, 1 code가 4개 있고, 나머지는 모두 0 code 입니다.
즉,
첫번째 파형은 00000110 00000000 00000000 00000000 00000000 00000000
두번째 파형은 00000110 00000000 00000000 00000110 00000000 00000000
인 것이죠.
24 비트만, 다시 짤라서 봅시다.
00000110 00000000 00000000
여기서, 처음 8개 비트는 초록색,
그 다음 8개 비트는 빨간색,
또 그 다음 8개 비트는 파란색 입니다.
어떻게 아냐구요?
아까 데이터시트 확인해보면서,
"Composition of 24bit data" 라고 있었거든요!
제가 연한 초록색이 켜지도록 동작시켰다고 했죠?
그러니 빨간색 8비트와 파란색 8비트는 계속 0인 것입니다.
4. 0 code, 1 code 파형 확인
아니, 근데!
오실로스코프 파형에서 저게 0 code, 1 code가 맞냐!
진짜로, 0 code 랑 1 code 가 1.25us 기준으로 High와 Low로 나뉘어서 출력되냐!
지금 뻥카치는거 아니냐!
라고 하실 수 있으니, 확대해서 확인해 볼게요!
(사실은 제가 궁금해서요...ㅋㅋㅋ)
자! 측정한 결과는 이렇습니다.
0 code 와 1 code 의 시간은 각각 1.24us와 1.26us로
데이터시트의 1.25us ± 600ns 값을 만족하네요.
0 code의 High 시간은 0.34us로, 데이터시트의 0.4us ± 150ns 를 만족!
1 code의 High 시간은 0.88us로, 데이터시트의 0.8us ± 150ns 를 만족!
쓰다보니 내용이 길어져서...
다음 포스팅에 이어서 작성하겠습니다.
00000110 00000000 00000000
여기서 왜 11111111 00000000 00000000 이 아닐까?
무슨 차이가 있는걸까?
궁금하시다면,
다음 포스팅에서 확인해 보겠습니다~!!
'전기 > Arduino' 카테고리의 다른 글
[Arduino] WS2812 5*5 (RGB LED) #3 example operation_2 (0) | 2023.01.29 |
---|---|
[Arduino] WS2812 5*5 (RGB LED) #2 example operation (0) | 2023.01.28 |
[Arduino] HC-SR501 (적외선 센서) #1 특징 및 동작 확인 (0) | 2023.01.26 |
[Arduino] HC-SR04 (초음파 센서) #2 예제 소스 및 검증 결과 (2) | 2023.01.26 |
[Arduino] HC-SR04 (초음파 센서) #1 (0) | 2023.01.23 |