Skip to content

Instantly share code, notes, and snippets.

@donghee
Created August 24, 2012 04:09
Show Gist options
  • Save donghee/3445331 to your computer and use it in GitHub Desktop.
Save donghee/3445331 to your computer and use it in GitHub Desktop.
WS2801 with mbed1768
//
//
// +-------+ +---------+
// | WS2801| | mbed1768|
// | | | |
// | |- SDI --------- p5 - | |
// | |- CKI --------- p6 - | |
// +-------+ +---------+
//
#include "mbed.h"
#include "mbed.h"
DigitalOut cki(p6);
DigitalOut sdi(p5);
void post_frame(long this_led_color);
int main() {
while(1) {
post_frame(0x0000ff);
cki = 0;
wait_ms(1); // 색 적용: cki 핀을 500us이상 low 로 주면, 내부 상태 레지스터 리셋 되거나 데이터 레지스터를 래치 한다.
}
}
// this_led_color값의 비트를 ws2801에 클럭(cki) 맞추어 데이터(SDI)를 밀어 넣는다.
void post_frame (long this_led_color) {
for(unsigned char color_bit = 23 ; color_bit != 255 ; color_bit--) {
//23비트가 처음! 빨간색 (red data MSB)
cki = 0; //클럭이 LOW일때 데이터를 받아 들인다.
long mask = 1L << color_bit; // 1'L'은 1을 32비트 long 타입으로 설정 한다.
if(this_led_color & mask) {
sdi = 1; // data가 high
}
else {
sdi=0; //data가 low
}
cki = 1; //클럭이 HIGH일때 데이터를 적용(latch) 한다.
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment