Created
August 24, 2012 04:09
-
-
Save donghee/3445331 to your computer and use it in GitHub Desktop.
WS2801 with mbed1768
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// | |
// +-------+ +---------+ | |
// | 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