kohacraft Lab
/
kc_matrixclock_withRTC
Dot Matrix LED clock with RTC ver1.0
TLC5940.cpp
- Committer:
- kohacraft
- Date:
- 2015-08-11
- Revision:
- 1:5577d93280da
- Parent:
- 0:c872b97ce7ea
- Child:
- 3:179ec78e9158
File content as of revision 1:5577d93280da:
#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 |= 2; // 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*2); //4096階調のために必要な時間 4096/48MHz }