kohacraft Lab
/
kc_matrixclock_withRTC
Dot Matrix LED clock with RTC ver1.0
TLC5940.cpp@0:c872b97ce7ea, 2015-08-11 (annotated)
- Committer:
- kohacraft
- Date:
- Tue Aug 11 00:56:37 2015 +0000
- Revision:
- 0:c872b97ce7ea
- Child:
- 1:5577d93280da
only 1:00 indicate
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kohacraft | 0:c872b97ce7ea | 1 | #include "TLC5940.h" |
kohacraft | 0:c872b97ce7ea | 2 | |
kohacraft | 0:c872b97ce7ea | 3 | SPI driver( dp2 , NC , dp6 ); //mosi , miso , sck |
kohacraft | 0:c872b97ce7ea | 4 | DigitalOut vprg = dp4; |
kohacraft | 0:c872b97ce7ea | 5 | DigitalOut xlat = dp9; |
kohacraft | 0:c872b97ce7ea | 6 | DigitalOut blank = dp10; |
kohacraft | 0:c872b97ce7ea | 7 | //PwmOut gsclk = dp1; gsclkはdp24にマスタークロックの出力を利用する |
kohacraft | 0:c872b97ce7ea | 8 | int num_drivers = 1; |
kohacraft | 0:c872b97ce7ea | 9 | |
kohacraft | 0:c872b97ce7ea | 10 | void setup (int num_ics) |
kohacraft | 0:c872b97ce7ea | 11 | { |
kohacraft | 0:c872b97ce7ea | 12 | blank = 1; |
kohacraft | 0:c872b97ce7ea | 13 | |
kohacraft | 0:c872b97ce7ea | 14 | LPC_IOCON->PIO0_1 |= 1; // PIO0_1をCLKOUTとして使用する |
kohacraft | 0:c872b97ce7ea | 15 | // CLKOUTピンに出力するクロックソースの選択 |
kohacraft | 0:c872b97ce7ea | 16 | // b00 IRC発振器 |
kohacraft | 0:c872b97ce7ea | 17 | // b01 Xtal発振器 |
kohacraft | 0:c872b97ce7ea | 18 | // b10 WDT発振器 |
kohacraft | 0:c872b97ce7ea | 19 | // b11 mainclock |
kohacraft | 0:c872b97ce7ea | 20 | LPC_SYSCON->CLKOUTCLKSEL |= 0x3; // mainclockを選択 |
kohacraft | 0:c872b97ce7ea | 21 | LPC_SYSCON->CLKOUTUEN = 0; // レジスタ更新 |
kohacraft | 0:c872b97ce7ea | 22 | LPC_SYSCON->CLKOUTUEN = 1; |
kohacraft | 0:c872b97ce7ea | 23 | while (!(LPC_SYSCON->CLKOUTUEN & 0x01)); |
kohacraft | 0:c872b97ce7ea | 24 | // クロック分周器の値 |
kohacraft | 0:c872b97ce7ea | 25 | // 0 ディスエーブル |
kohacraft | 0:c872b97ce7ea | 26 | // 1~255 分周値 |
kohacraft | 0:c872b97ce7ea | 27 | // 31:8 - - 予約済み |
kohacraft | 0:c872b97ce7ea | 28 | LPC_SYSCON->CLKOUTDIV |= 1; // 1分周=分周しない |
kohacraft | 0:c872b97ce7ea | 29 | |
kohacraft | 0:c872b97ce7ea | 30 | |
kohacraft | 0:c872b97ce7ea | 31 | driver.format (6,0); |
kohacraft | 0:c872b97ce7ea | 32 | driver.frequency (20000000); |
kohacraft | 0:c872b97ce7ea | 33 | if (num_ics <= 0) |
kohacraft | 0:c872b97ce7ea | 34 | { |
kohacraft | 0:c872b97ce7ea | 35 | num_drivers = 1; |
kohacraft | 0:c872b97ce7ea | 36 | } |
kohacraft | 0:c872b97ce7ea | 37 | else |
kohacraft | 0:c872b97ce7ea | 38 | { |
kohacraft | 0:c872b97ce7ea | 39 | num_drivers = num_ics; |
kohacraft | 0:c872b97ce7ea | 40 | } |
kohacraft | 0:c872b97ce7ea | 41 | |
kohacraft | 0:c872b97ce7ea | 42 | xlat = 0; // hold GS/DC data constant |
kohacraft | 0:c872b97ce7ea | 43 | |
kohacraft | 0:c872b97ce7ea | 44 | //補正データを最大に設定 |
kohacraft | 0:c872b97ce7ea | 45 | vprg = 1; |
kohacraft | 0:c872b97ce7ea | 46 | for (int i = 0; i<16*num_ics; i++) |
kohacraft | 0:c872b97ce7ea | 47 | { |
kohacraft | 0:c872b97ce7ea | 48 | driver.write (0x3F); //最大 |
kohacraft | 0:c872b97ce7ea | 49 | } |
kohacraft | 0:c872b97ce7ea | 50 | xlat = 1; |
kohacraft | 0:c872b97ce7ea | 51 | xlat = 0; // hold GS/DC data constant |
kohacraft | 0:c872b97ce7ea | 52 | |
kohacraft | 0:c872b97ce7ea | 53 | driver.format (12,0); |
kohacraft | 0:c872b97ce7ea | 54 | vprg = 0; // sets drivers to GS mode. Set to 1 to change to DC mode |
kohacraft | 0:c872b97ce7ea | 55 | // gsclk.period_us (1); // set grayscale clock to 1000 Hz |
kohacraft | 0:c872b97ce7ea | 56 | // gsclk = 0.5; // turn on grayscale clock to 50% duty cycle at afore mentioned frequency |
kohacraft | 0:c872b97ce7ea | 57 | |
kohacraft | 0:c872b97ce7ea | 58 | blank = 0; |
kohacraft | 0:c872b97ce7ea | 59 | |
kohacraft | 0:c872b97ce7ea | 60 | |
kohacraft | 0:c872b97ce7ea | 61 | } |
kohacraft | 0:c872b97ce7ea | 62 | |
kohacraft | 0:c872b97ce7ea | 63 | |
kohacraft | 0:c872b97ce7ea | 64 | void update_led (unsigned short* LEDS) |
kohacraft | 0:c872b97ce7ea | 65 | { |
kohacraft | 0:c872b97ce7ea | 66 | //blank = 0; |
kohacraft | 0:c872b97ce7ea | 67 | for (int k = (num_drivers - 1); k >= 0; k--) |
kohacraft | 0:c872b97ce7ea | 68 | { |
kohacraft | 0:c872b97ce7ea | 69 | for (int i = (16 - 1); i >= 0; i--) |
kohacraft | 0:c872b97ce7ea | 70 | { |
kohacraft | 0:c872b97ce7ea | 71 | driver.write (*(LEDS + k + i)); |
kohacraft | 0:c872b97ce7ea | 72 | } |
kohacraft | 0:c872b97ce7ea | 73 | } |
kohacraft | 0:c872b97ce7ea | 74 | blank = 1; |
kohacraft | 0:c872b97ce7ea | 75 | xlat = 1; |
kohacraft | 0:c872b97ce7ea | 76 | xlat = 0; |
kohacraft | 0:c872b97ce7ea | 77 | blank = 0; |
kohacraft | 0:c872b97ce7ea | 78 | |
kohacraft | 0:c872b97ce7ea | 79 | driver.format (1,0); |
kohacraft | 0:c872b97ce7ea | 80 | driver.write (0); |
kohacraft | 0:c872b97ce7ea | 81 | driver.format (12,0); |
kohacraft | 0:c872b97ce7ea | 82 | wait_us(85); //4096階調のために必要な時間 4096/48MHz |
kohacraft | 0:c872b97ce7ea | 83 | |
kohacraft | 0:c872b97ce7ea | 84 | } |