Dot Matrix LED clock with RTC ver1.0

Dependencies:   ds3231 mbed

TLC5940.cpp

Committer:
kohacraft
Date:
2015-08-11
Revision:
0:c872b97ce7ea
Child:
1:5577d93280da

File content as of revision 0:c872b97ce7ea:

#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

}