Dependencies: EthernetNetIf NTPClient_NetServices mbed
dotmatrix.c
- Committer:
- suupen
- Date:
- 2011-12-11
- Revision:
- 0:f49394bec833
File content as of revision 0:f49394bec833:
/***************************************************** * dot matrix led drive * * Display : LT5016M1(16*16 dot matrix LED red&green led) http://akizukidenshi.com/catalog/g/gI-00039/ * LED Driver : TLC5940 http://focus.ti.com/lit/ds/slvs515c/slvs515c.pdf * * V0.0 : 110529A_dotMatrixClock.zip * V0.1 : 110601A_demo.zip * fuyo code sakujo (dosa ha V0.0 to onazi) *****************************************************/ #define _DOTMATRIX_C #define DBG #include "Types.h" #include "mbed.h" #include "dotmatrix.h" #include "display.h" #ifdef DBG #include "TLC5940.h" #endif //DBG static uint16_t DT_grayData[100]; //100kaicho data wo TLC5940 no grayData(4096kaicho)ni henkan suru data table /******************************Function declaration***************************/ #ifndef DBG static void tlc5940DotCorrection(void); static void tlc5940SpiInitalize(void); static void tlc5940GrayDataClear(void); #endif //DBG static void tlc5940GrayDataDisplayAndSend(int8_t rowNo); static void dotmatrix_displayDataTransform(void); /*****************************Macro definition********************************/ #ifdef DBG TLC5940 tlc5940(p5, p6, p7, p19, p22, p21, 2); #else //~DBG // TLC5940 control SPI spi(p5, p6, p7); //SIN (p6), SCLK,GSCLK(p7) DigitalOut XLAT(p19); DigitalOut BLANK(p22); DigitalOut VPRG(p21); #endif // DBG // TD62783APG (dot matrix ROW1 - ROW16 drive) DigitalOut ROW1(p16); DigitalOut ROW2(p15); DigitalOut ROW3(p14); DigitalOut ROW4(p13); DigitalOut ROW5(p12); DigitalOut ROW6(p11); DigitalOut ROW7(p10); DigitalOut ROW8(p9); DigitalOut ROW9(p23); DigitalOut ROW10(p24); DigitalOut ROW11(p25); DigitalOut ROW12(p26); DigitalOut ROW13(p27); DigitalOut ROW14(p28); DigitalOut ROW15(p29); DigitalOut ROW16(p30); #define Z_ROWMIN (0) #define Z_ROWMAX (15) // ROW Max (ROWNo = 0 to 15) /*****************************Global variable*********************************/ // dot matrix led grayscale data uint16_t D_dotDisplay[2][16][16]; /* [color][x][y]: color 0:red data 1:green data x : 0 - 15 y : 0 - 15 data : 0 - 4095 */ /****************************************************************************** Name : dot matrix output Parameters : none Returns : nothing Description: extren call ******************************************************************************/ void dotmatrix_output(void) { static int8_t cnt = Z_ROWMAX; if (++cnt > Z_ROWMAX) { F_kakikae = 1; cnt = Z_ROWMIN; dotmatrix_displayDataTransform(); // hyoji data henkan F_kakikae = 0; } // ROW All Off ROW1 = 0; ROW2 = 0; ROW3 = 0; ROW4 = 0; ROW5 = 0; ROW6 = 0; ROW7 = 0; ROW8 = 0; ROW9 = 0; ROW10 = 0; ROW11 = 0; ROW12 = 0; ROW13 = 0; ROW14 = 0; ROW15 = 0; ROW16 = 0; // ROW out switch (cnt) { case 0: ROW1 = 1; break; case 1: ROW2 = 1; break; case 2: ROW3 = 1; break; case 3: ROW4 = 1; break; case 4: ROW5 = 1; break; case 5: ROW6 = 1; break; case 6: ROW7 = 1; break; case 7: ROW8 = 1; break; case 8: ROW9 = 1; break; case 9: ROW10 = 1; break; case 10: ROW11 = 1; break; case 11: ROW12 = 1; break; case 12: ROW13 = 1; break; case 13: ROW14 = 1; break; case 14: ROW15 = 1; break; case 15: ROW16 = 1; break; default: cnt = 0; break; } // display data set // ROW = Hi no atoni Column output tlc5940GrayDataDisplayAndSend(cnt); } /****************************************************************************** Name : TLC5940 initalize Parameters : none Returns : nothing Description: extren call ******************************************************************************/ void dotmatrix_initialize(void){ #ifndef DBG tlc5940DotCorrection(); tlc5940SpiInitalize(); tlc5940GrayDataClear(); #endif // DBG } /****************************************************************************** Name : Display data set demo initialize Parameters : none Returns : nothing Description: extren call ******************************************************************************/ void dotmatrix_demoInitialize(void) { for(int8_t y = 0; y < 16; y++){ for(int8_t x = 0; x < 16; x++){ D_dotDisplay[0][x][y] = (4095 * x) / 15; D_dotDisplay[1][x][y] = (4095 * y) / 15; } } } /****************************************************************************** Name : Display data set demo Parameters : none Returns : nothing Description: extren call ******************************************************************************/ void dotmatrix_demo(void) { static int8_t x = 0; static int8_t y = 0; for(x = 0; x < 16; x++){ for(y = 0; y < 16; y++){ D_dotDisplay[0][x][y] += 3; D_dotDisplay[1][x][y] += 3; } } } #ifndef DBG /****************************************************************************** Name : TLC5940 dot correction initalize Parameters : none Returns : nothing Description: ******************************************************************************/ static void tlc5940DotCorrection(void) { VPRG = 1; spi.format(6,0); spi.frequency(30000000); // VPRG = 1; for (int i = 0; i < (16 * 2); i++) { int whoami = spi.write(63); } XLAT = 1; XLAT = 0; } #endif //DBG #ifndef DBG /****************************************************************************** Name : SPI Initalize (for TLC5960 control) Parameters : none Returns : nothing Description: ******************************************************************************/ static void tlc5940SpiInitalize(void) { spi.format(12,0); spi.frequency(30000000); VPRG = 0; } #endif //DBG #ifndef DBG /****************************************************************************** Name : TLC5940 Gray Data clear Parameters : none Returns : nothing Description: ******************************************************************************/ static void tlc5940GrayDataClear(void) { VPRG = 0; for (int i = 0; i < (16 * 2); i++) { int whoami = spi.write(0); } XLAT = 1; XLAT = 0; } #endif //DBG /****************************************************************************** Name : TLC5940 Gray Data Display & next data send Parameters : rowNo 0 - 15 Returns : nothing Description: ******************************************************************************/ #ifdef DBG static void tlc5940GrayDataDisplayAndSend(int8_t rowNo){ uint8_t x; int8_t sendRowNo = rowNo + 1; uint16_t D_gray[2][16]; if(sendRowNo > 15){sendRowNo = 0;} // green data send for(x = 0; x < 16; x++){ D_gray[1][x] = D_dotDisplay[1][x][sendRowNo]; } // red data send for(x = 0; x < 16; x++){ D_gray[0][x] = D_dotDisplay[0][15 - x][sendRowNo]; } tlc5940.grayDataSetAndDisplay((uint16_t*)D_gray); } #else //~DBG static void tlc5940GrayDataDisplayAndSend(int8_t rowNo){ int8_t sendRowNo = rowNo + 1; int8_t x; // display data no x 0 - 15 #define Z_GSCLKNUM (340) // GRAYSCALE PWM sousin yo clock 4096(PWM) / 12bit(sousin) = 341 #define Z_GRAYDATA (16 * 2) BLANK = 1; BLANK = 0; VPRG = 0; if(sendRowNo > 15){sendRowNo = 0;} for(int i = 0; i < (Z_GSCLKNUM - Z_GRAYDATA); i++){ // grayscale pwm clock only spi.write(0); } // grayscale pwm clock & color data clock // green data send for(x = 0; x < 16; x++){ spi.write(D_dotDisplay[1][15 - x][sendRowNo]); } // red data send for(x = 0; x < 16; x++){ spi.write(D_dotDisplay[0][x][sendRowNo]); } XLAT = 1; XLAT = 0; } #endif //DBG /****************************************************************************** Name : display data kaicho wo TLC5940 Gray Data ni henkan suru data table ti no sakusei Parameters : none Returns : nothing Description: ******************************************************************************/ void dotmatrix_grayDataKansan(void){ for(uint32_t i = 0; i < 100; i++){ DT_grayData[i] = (uint16_t)((i * i * 10) / 40); } } /****************************************************************************** Name : display data transform to TLC5940 Gray Data Parameters : none Returns : nothing Description: ******************************************************************************/ static void dotmatrix_displayDataTransform(void){ // D_display[][][] no 15grayScaleData wo 4096grayScale Data ni henkan for(uint8_t x = 0; x < 16; x++){ for(uint8_t y = 0; y < 16; y++){ D_dotDisplay[Z_dotGreen][x][y] = DT_grayData[B_display[Z_green][x][y]]; D_dotDisplay[ Z_dotRed][x][y] = DT_grayData[B_display[ Z_red][x][y]]; } } }