[아두이노] WS2812와 APA102의 차이 비교 (Comparison between WS2812 and APA102)

개별 칼라를 제어할 수 있는 LED strip으로 가장 많이 쓰이는 것이 WS2812B(Adafruit에서는 NeoPixel 이라는 제품명으로 판매)이다. 전원라인(+5V, GND)을 제외하면 단 한개의 신호선으로 수백개의 LED를 제어할 수 있어 매우 편리하다.
 

1m-4m-5m-WS2812-WS2812B-font-b-LED-b-fon


arduino_no_computer_power.jpg



하지만 별도의 클럭신호 선 없이 한개의 신호선으로 데이터를 전송하다 보니 타이밍에 매우 민감하다. 아두이노용 WS2812 라이브러리(Adafruit_NeoPixel 등) 소스를 열어 본 사람들은 알겠지만 데이터를 전송하는 부분 코드는 타이밍을 정밀하게 맞춰주기 위해 전송중에는 인터럽트도 disable시켜 놓고 어셈블리 코드로 하드코딩 되어 있다.
 

51f04d33ce395f687c000001.png


Adafruit_NeoPixel_cpp_%25E2%2580%2594__U


최대 800KHz의 속도로 데이터를 전송하는데 만일 128개의 LED를 구동한다고 하면 한번 색을 변경하는데 약 4ms 정도의 시간이 걸리게 된다. 즉 이 시간동안은 프로세서가 다른 작업은 커녕 심지어 인터럽트도 안 걸리고 LED에 데이터를 보내야만 한다.
이는 특히 라즈베리 파이같이 OS를 사용하는 경우 매우 치명적이다. 물론 라즈베리 파이에서도 WS2812를 사용할 수 있게 DMA를 사용해 데이터를 전송하는 라이브러리가 나와 있긴 하지만 이런 라이브러리는 portability가 거의 없다. 즉 라이브러리를 가져다 다른데 포팅하는것이 매우 힘들다.

그래서 이런 문제를 해결한 비슷한 종류의 LED가 몇 종류 나와 있다. 그 중 하나가 APA102이다.
 

apa102.jpg


leds_dotstar-silkscreen.jpg


우선 WS2812와 가장 큰 차이점은 전원선(+5V, GND)외에 두개의 신호선(Data, Clk)이 있다는 것이다. (WS2812는 1개의 신호선(Data)만 있음)
 

a-fast-introduction-to-arduino-and-addre




 

rpitoapa102.jpg




그래서 SPI 버스의 MOSI, SCK 에 Data, Clk를 연결해서 SPI 방식으로 데이터를 보내주면 된다. 실제 데이터 전송은 SPI가 담당하기 때문에 프로세서가 데이터를 전송하는 동안 기다릴 필요도 없고 타이밍을 신경 쓸 필요도 없기 때문에 라이브러리 코드도 훨씬 간단해진다.

데이터 전송도 SPI 클럭 기준으로 이루어지기 때문에 16MHz의 속도로도 충분히 전송이 가능하다. (WS2812에 비해 20배 이상의 속도) 그래서 POV같이 LED 색이 빠른 속도로 바뀌어야 하는 경우 WS2812는 전환속도가 느려 적합하지 않지만 APA102는 충분히 빠르게 색을 바꿔줄 수 있다.

라즈베리 파이에서도 DMA를 사용하지 않아도 충분하기 때문에 순전히 파이선으로 만든 라이브러리도 있다.

https://github.com/tinue/APA102_Pi  

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
98 마이크로비트 RGB LED 모듈 ( 센서 활용) icon HellMaker 08-22 18,596
97 마이크로비트 써미스터 온도 센서 (센서 활용) icon HellMaker 08-22 18,435
96 마이크로비트 수은 기울기 센서 (센서 활용) icon HellMaker 08-22 17,876
95 마이크로비트 마이크로 비트 기울기 센서 (센서 활용) icon HellMaker 08-22 18,866
94 마이크로비트 가속도 센서 (마이크로비트 기본 예제) icon 양재동메이커 08-22 18,365
93 마이크로비트 가속도 동서남북 (마이크로비트 기본 예제) icon 양재동메이커 08-22 17,307
92 마이크로비트 버튼 응용 예제 (마이크로비트 기본 예제) icon 양재동메이커 08-22 18,428
91 마이크로비트 버튼 예제 (마이크로비트 기본 예제) icon 양재동메이커 08-22 17,640
90 마이크로비트 매직 라이트 컵 모듈 (아두이노 센서 활용) icon HellMaker 08-14 17,154
89 마이크로비트 심박 센서 ( 아두이노 센서 활용) icon HellMaker 08-14 18,331
88 마이크로비트 충격 센서 (아두이노 센서 활용) icon HellMaker 08-08 20,067
87 마이크로비트 레이저 발광 모듈 (아두이노 센서 활용) icon HellMaker 08-08 18,624
86 마이크로비트 7 컬러 LED 모듈 (아두이노 센서 활용) icon HellMaker 08-08 17,628
85 마이크로비트 CDS 조도 센서 (아두이노 센서 활용) icon HellMaker 08-08 18,140
84 마이크로비트 매직라이트 컵 모듈 활용하기 (아두이노 센서 활용) icon HellMaker 08-08 25,661
83 마이크로비트 기울기 센서 활용 (아두이노 센서 활용) icon HellMaker 08-08 18,828
82 마이크로비트 노크 센서 활용 (아두이노 센서 활용) icon HellMaker 08-08 18,671
81 마이크로비트 수은 기울기 센서 활용 (아두이노 센서 활용) icon HellMaker 08-08 18,851
80 마이크로비트 써미스터 온도 센서 활용 (아두이노 센서 활용) icon HellMaker 08-08 18,829
79 마이크로비트 디지털 홀 센서 활용 (아두이노 센서 활용) icon HellMaker 08-08 21,555