このプログラムはTLC5940のcascadに対応しています。 cascadする数は1から20の間でZ_cascadに設定してください cascad number, please be set between 1 and 20 Z_cascad. Display data D_grayData [Z_cascad] [16] Please set to.
main.cpp
- Committer:
- suupen
- Date:
- 2011-11-22
- Revision:
- 0:2e81892b1896
File content as of revision 0:2e81892b1896:
//========================================= // TLC5940 (16channel led driver) // This program supports the cascading of the TLC5940. // This program is not tested. // // cascad number, please be set between 1 and 20 Z_cascad. // Display data D_grayData [Z_cascad] [16] Please set to. //========================================== #include "mbed.h" #define Z_cascad (6) // cascade No (1 - 20) // TLC5940 control pin setting SPI spi(p5, p6, p7); //SIN (p6), SCLK,GSCLK(p7) DigitalOut XLAT(p20); DigitalOut BLANK(p19); DigitalOut myled1(LED1); DigitalOut myled3(LED3); /* DigitalOut DIGIT1(p21); DigitalOut DIGIT2(p22); DigitalOut DIGIT3(p24); DigitalOut DIGIT4(p25); DigitalOut DIGIT5(p23); */ /********************************** * dynamic output for com **********************************/ /* void comOut(void){ static int cnt = 0; // COM All Off DIGIT1 = 0; DIGIT2 = 0; DIGIT3 = 0; DIGIT4 = 0; DIGIT5 = 0; // COM out switch(cnt){ case 0: DIGIT1 = 1; break; case 1: DIGIT2 = 1; break; case 2: DIGIT3 = 1; break; case 3: DIGIT4 = 1; break; case 4: DIGIT5 = 1; break; default: cnt = 0; break; } if(++cnt > 4){cnt = 0;} } */ /********************************* * gray data set *********************************/ void grayDataSet(int* p){ static int lightWait = 0; static int D_gray = 0; #define Z_kasan (1) static int kasan = Z_kasan; lightWait++; if(lightWait == 1){ lightWait = 0; D_gray += kasan; if(D_gray > 4095){ D_gray = 4095; kasan = -Z_kasan; myled1 = 1; } else if(D_gray <= 0){ D_gray = 0; kasan = Z_kasan; myled1 = 0; } } for(int c = 0; c < Z_cascad; c++){ for(int i = 0; i < 16; i++){ *(p + + c + i) = D_gray; } } } /********************************** * SPI Initalize (for TLC5960 control) **********************************/ void tlc5940SpiInitalize(void){ spi.format(12,0); spi.frequency(30000000); } /********************************* * TLC5940 Gray Data clear *********************************/ void tlc5940GrayDataClear(void){ for(int i = 0; i < (Z_cascad * 16); i++){ int whoami = spi.write(0); } XLAT = 1; XLAT = 0; } /********************************** * TLC5940 Gray Data Display & next data send ***********************************/ void tlc5940GrayDataDisplayAndSend(int* p){ BLANK = 1; BLANK = 0; for(int i = 0; i < (342 - (Z_cascad * 16)); i++){ spi.write(0); } for(int c = 0; c < Z_cascad; c++){ for(int i = 0; i < 16; i++){ spi.write(*(p + c + i)); } } XLAT = 1; XLAT = 0; } /************************************ * main ************************************/ int main() { int D_grayData[Z_cascad][16]; // gray data = 0 to 4095 [0]:OUT0, [1]:OUT1, ...,[14]:OUT14, [15]:OUT15 // SPI initalize tlc5940SpiInitalize(); tlc5940GrayDataClear(); while(1) { // comOut(); grayDataSet((int*)D_grayData); tlc5940GrayDataDisplayAndSend((int*)D_grayData); } }