kohacraft Lab
/
kc_matrixclock_withRTC
Dot Matrix LED clock with RTC ver1.0
Diff: TLC5940.cpp
- Revision:
- 0:c872b97ce7ea
- Child:
- 1:5577d93280da
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TLC5940.cpp Tue Aug 11 00:56:37 2015 +0000 @@ -0,0 +1,84 @@ +#include "TLC5940.h" + +SPI driver( dp2 , NC , dp6 ); //mosi , miso , sck +DigitalOut vprg = dp4; +DigitalOut xlat = dp9; +DigitalOut blank = dp10; +//PwmOut gsclk = dp1; gsclkはdp24にマスタークロックの出力を利用する +int num_drivers = 1; + +void setup (int num_ics) +{ + blank = 1; + + LPC_IOCON->PIO0_1 |= 1; // PIO0_1をCLKOUTとして使用する + // CLKOUTピンに出力するクロックソースの選択 + // b00 IRC発振器 + // b01 Xtal発振器 + // b10 WDT発振器 + // b11 mainclock + LPC_SYSCON->CLKOUTCLKSEL |= 0x3; // mainclockを選択 + LPC_SYSCON->CLKOUTUEN = 0; // レジスタ更新 + LPC_SYSCON->CLKOUTUEN = 1; + while (!(LPC_SYSCON->CLKOUTUEN & 0x01)); + // クロック分周器の値 + // 0 ディスエーブル + // 1~255 分周値 + // 31:8 - - 予約済み + LPC_SYSCON->CLKOUTDIV |= 1; // 1分周=分周しない + + + driver.format (6,0); + driver.frequency (20000000); + if (num_ics <= 0) + { + num_drivers = 1; + } + else + { + num_drivers = num_ics; + } + + xlat = 0; // hold GS/DC data constant + + //補正データを最大に設定 + vprg = 1; + for (int i = 0; i<16*num_ics; i++) + { + driver.write (0x3F); //最大 + } + xlat = 1; + xlat = 0; // hold GS/DC data constant + + driver.format (12,0); + vprg = 0; // sets drivers to GS mode. Set to 1 to change to DC mode +// gsclk.period_us (1); // set grayscale clock to 1000 Hz +// gsclk = 0.5; // turn on grayscale clock to 50% duty cycle at afore mentioned frequency + + blank = 0; + + +} + + +void update_led (unsigned short* LEDS) +{ + //blank = 0; + for (int k = (num_drivers - 1); k >= 0; k--) + { + for (int i = (16 - 1); i >= 0; i--) + { + driver.write (*(LEDS + k + i)); + } + } + blank = 1; + xlat = 1; + xlat = 0; + blank = 0; + + driver.format (1,0); + driver.write (0); + driver.format (12,0); + wait_us(85); //4096階調のために必要な時間 4096/48MHz + +} \ No newline at end of file