Dependencies:   EthernetNetIf NTPClient_NetServices mbed

Committer:
suupen
Date:
Sun Dec 11 00:24:18 2011 +0000
Revision:
0:f49394bec833

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:f49394bec833 1 /*****************************************************
suupen 0:f49394bec833 2 * dot matrix led drive
suupen 0:f49394bec833 3 *
suupen 0:f49394bec833 4 * Display : LT5016M1(16*16 dot matrix LED red&green led) http://akizukidenshi.com/catalog/g/gI-00039/
suupen 0:f49394bec833 5 * LED Driver : TLC5940 http://focus.ti.com/lit/ds/slvs515c/slvs515c.pdf
suupen 0:f49394bec833 6 *
suupen 0:f49394bec833 7 * V0.0 : 110529A_dotMatrixClock.zip
suupen 0:f49394bec833 8 * V0.1 : 110601A_demo.zip
suupen 0:f49394bec833 9 * fuyo code sakujo (dosa ha V0.0 to onazi)
suupen 0:f49394bec833 10 *****************************************************/
suupen 0:f49394bec833 11 #define _DOTMATRIX_C
suupen 0:f49394bec833 12
suupen 0:f49394bec833 13 #define DBG
suupen 0:f49394bec833 14
suupen 0:f49394bec833 15 #include "Types.h"
suupen 0:f49394bec833 16 #include "mbed.h"
suupen 0:f49394bec833 17 #include "dotmatrix.h"
suupen 0:f49394bec833 18 #include "display.h"
suupen 0:f49394bec833 19 #ifdef DBG
suupen 0:f49394bec833 20 #include "TLC5940.h"
suupen 0:f49394bec833 21 #endif //DBG
suupen 0:f49394bec833 22
suupen 0:f49394bec833 23 static uint16_t DT_grayData[100]; //100kaicho data wo TLC5940 no grayData(4096kaicho)ni henkan suru data table
suupen 0:f49394bec833 24
suupen 0:f49394bec833 25 /******************************Function declaration***************************/
suupen 0:f49394bec833 26 #ifndef DBG
suupen 0:f49394bec833 27 static void tlc5940DotCorrection(void);
suupen 0:f49394bec833 28 static void tlc5940SpiInitalize(void);
suupen 0:f49394bec833 29 static void tlc5940GrayDataClear(void);
suupen 0:f49394bec833 30 #endif //DBG
suupen 0:f49394bec833 31 static void tlc5940GrayDataDisplayAndSend(int8_t rowNo);
suupen 0:f49394bec833 32 static void dotmatrix_displayDataTransform(void);
suupen 0:f49394bec833 33
suupen 0:f49394bec833 34 /*****************************Macro definition********************************/
suupen 0:f49394bec833 35 #ifdef DBG
suupen 0:f49394bec833 36 TLC5940 tlc5940(p5, p6, p7, p19, p22, p21, 2);
suupen 0:f49394bec833 37 #else //~DBG
suupen 0:f49394bec833 38 // TLC5940 control
suupen 0:f49394bec833 39 SPI spi(p5, p6, p7); //SIN (p6), SCLK,GSCLK(p7)
suupen 0:f49394bec833 40
suupen 0:f49394bec833 41 DigitalOut XLAT(p19);
suupen 0:f49394bec833 42 DigitalOut BLANK(p22);
suupen 0:f49394bec833 43 DigitalOut VPRG(p21);
suupen 0:f49394bec833 44 #endif // DBG
suupen 0:f49394bec833 45
suupen 0:f49394bec833 46 // TD62783APG (dot matrix ROW1 - ROW16 drive)
suupen 0:f49394bec833 47 DigitalOut ROW1(p16);
suupen 0:f49394bec833 48 DigitalOut ROW2(p15);
suupen 0:f49394bec833 49 DigitalOut ROW3(p14);
suupen 0:f49394bec833 50 DigitalOut ROW4(p13);
suupen 0:f49394bec833 51 DigitalOut ROW5(p12);
suupen 0:f49394bec833 52 DigitalOut ROW6(p11);
suupen 0:f49394bec833 53 DigitalOut ROW7(p10);
suupen 0:f49394bec833 54 DigitalOut ROW8(p9);
suupen 0:f49394bec833 55
suupen 0:f49394bec833 56 DigitalOut ROW9(p23);
suupen 0:f49394bec833 57 DigitalOut ROW10(p24);
suupen 0:f49394bec833 58 DigitalOut ROW11(p25);
suupen 0:f49394bec833 59 DigitalOut ROW12(p26);
suupen 0:f49394bec833 60 DigitalOut ROW13(p27);
suupen 0:f49394bec833 61 DigitalOut ROW14(p28);
suupen 0:f49394bec833 62 DigitalOut ROW15(p29);
suupen 0:f49394bec833 63 DigitalOut ROW16(p30);
suupen 0:f49394bec833 64
suupen 0:f49394bec833 65 #define Z_ROWMIN (0)
suupen 0:f49394bec833 66 #define Z_ROWMAX (15) // ROW Max (ROWNo = 0 to 15)
suupen 0:f49394bec833 67
suupen 0:f49394bec833 68 /*****************************Global variable*********************************/
suupen 0:f49394bec833 69 // dot matrix led grayscale data
suupen 0:f49394bec833 70 uint16_t D_dotDisplay[2][16][16];
suupen 0:f49394bec833 71 /*
suupen 0:f49394bec833 72 [color][x][y]:
suupen 0:f49394bec833 73 color 0:red data 1:green data
suupen 0:f49394bec833 74 x : 0 - 15
suupen 0:f49394bec833 75 y : 0 - 15
suupen 0:f49394bec833 76
suupen 0:f49394bec833 77 data : 0 - 4095
suupen 0:f49394bec833 78 */
suupen 0:f49394bec833 79
suupen 0:f49394bec833 80
suupen 0:f49394bec833 81
suupen 0:f49394bec833 82
suupen 0:f49394bec833 83
suupen 0:f49394bec833 84 /******************************************************************************
suupen 0:f49394bec833 85 Name : dot matrix output
suupen 0:f49394bec833 86 Parameters : none
suupen 0:f49394bec833 87 Returns : nothing
suupen 0:f49394bec833 88 Description: extren call
suupen 0:f49394bec833 89 ******************************************************************************/
suupen 0:f49394bec833 90 void dotmatrix_output(void) {
suupen 0:f49394bec833 91 static int8_t cnt = Z_ROWMAX;
suupen 0:f49394bec833 92
suupen 0:f49394bec833 93
suupen 0:f49394bec833 94
suupen 0:f49394bec833 95 if (++cnt > Z_ROWMAX) {
suupen 0:f49394bec833 96 F_kakikae = 1;
suupen 0:f49394bec833 97 cnt = Z_ROWMIN;
suupen 0:f49394bec833 98 dotmatrix_displayDataTransform(); // hyoji data henkan
suupen 0:f49394bec833 99 F_kakikae = 0;
suupen 0:f49394bec833 100 }
suupen 0:f49394bec833 101
suupen 0:f49394bec833 102 // ROW All Off
suupen 0:f49394bec833 103 ROW1 = 0;
suupen 0:f49394bec833 104 ROW2 = 0;
suupen 0:f49394bec833 105 ROW3 = 0;
suupen 0:f49394bec833 106 ROW4 = 0;
suupen 0:f49394bec833 107 ROW5 = 0;
suupen 0:f49394bec833 108 ROW6 = 0;
suupen 0:f49394bec833 109 ROW7 = 0;
suupen 0:f49394bec833 110 ROW8 = 0;
suupen 0:f49394bec833 111 ROW9 = 0;
suupen 0:f49394bec833 112 ROW10 = 0;
suupen 0:f49394bec833 113 ROW11 = 0;
suupen 0:f49394bec833 114 ROW12 = 0;
suupen 0:f49394bec833 115 ROW13 = 0;
suupen 0:f49394bec833 116 ROW14 = 0;
suupen 0:f49394bec833 117 ROW15 = 0;
suupen 0:f49394bec833 118 ROW16 = 0;
suupen 0:f49394bec833 119
suupen 0:f49394bec833 120
suupen 0:f49394bec833 121
suupen 0:f49394bec833 122
suupen 0:f49394bec833 123 // ROW out
suupen 0:f49394bec833 124 switch (cnt) {
suupen 0:f49394bec833 125 case 0:
suupen 0:f49394bec833 126 ROW1 = 1;
suupen 0:f49394bec833 127 break;
suupen 0:f49394bec833 128 case 1:
suupen 0:f49394bec833 129 ROW2 = 1;
suupen 0:f49394bec833 130 break;
suupen 0:f49394bec833 131 case 2:
suupen 0:f49394bec833 132 ROW3 = 1;
suupen 0:f49394bec833 133 break;
suupen 0:f49394bec833 134 case 3:
suupen 0:f49394bec833 135 ROW4 = 1;
suupen 0:f49394bec833 136 break;
suupen 0:f49394bec833 137 case 4:
suupen 0:f49394bec833 138 ROW5 = 1;
suupen 0:f49394bec833 139 break;
suupen 0:f49394bec833 140 case 5:
suupen 0:f49394bec833 141 ROW6 = 1;
suupen 0:f49394bec833 142 break;
suupen 0:f49394bec833 143 case 6:
suupen 0:f49394bec833 144 ROW7 = 1;
suupen 0:f49394bec833 145 break;
suupen 0:f49394bec833 146 case 7:
suupen 0:f49394bec833 147 ROW8 = 1;
suupen 0:f49394bec833 148 break;
suupen 0:f49394bec833 149 case 8:
suupen 0:f49394bec833 150 ROW9 = 1;
suupen 0:f49394bec833 151 break;
suupen 0:f49394bec833 152 case 9:
suupen 0:f49394bec833 153 ROW10 = 1;
suupen 0:f49394bec833 154 break;
suupen 0:f49394bec833 155 case 10:
suupen 0:f49394bec833 156 ROW11 = 1;
suupen 0:f49394bec833 157 break;
suupen 0:f49394bec833 158 case 11:
suupen 0:f49394bec833 159 ROW12 = 1;
suupen 0:f49394bec833 160 break;
suupen 0:f49394bec833 161 case 12:
suupen 0:f49394bec833 162 ROW13 = 1;
suupen 0:f49394bec833 163 break;
suupen 0:f49394bec833 164 case 13:
suupen 0:f49394bec833 165 ROW14 = 1;
suupen 0:f49394bec833 166 break;
suupen 0:f49394bec833 167 case 14:
suupen 0:f49394bec833 168 ROW15 = 1;
suupen 0:f49394bec833 169 break;
suupen 0:f49394bec833 170 case 15:
suupen 0:f49394bec833 171 ROW16 = 1;
suupen 0:f49394bec833 172 break;
suupen 0:f49394bec833 173 default:
suupen 0:f49394bec833 174 cnt = 0;
suupen 0:f49394bec833 175 break;
suupen 0:f49394bec833 176 }
suupen 0:f49394bec833 177
suupen 0:f49394bec833 178 // display data set
suupen 0:f49394bec833 179 // ROW = Hi no atoni Column output
suupen 0:f49394bec833 180 tlc5940GrayDataDisplayAndSend(cnt);
suupen 0:f49394bec833 181
suupen 0:f49394bec833 182 }
suupen 0:f49394bec833 183
suupen 0:f49394bec833 184 /******************************************************************************
suupen 0:f49394bec833 185 Name : TLC5940 initalize
suupen 0:f49394bec833 186 Parameters : none
suupen 0:f49394bec833 187 Returns : nothing
suupen 0:f49394bec833 188 Description: extren call
suupen 0:f49394bec833 189 ******************************************************************************/
suupen 0:f49394bec833 190 void dotmatrix_initialize(void){
suupen 0:f49394bec833 191 #ifndef DBG
suupen 0:f49394bec833 192 tlc5940DotCorrection();
suupen 0:f49394bec833 193 tlc5940SpiInitalize();
suupen 0:f49394bec833 194 tlc5940GrayDataClear();
suupen 0:f49394bec833 195 #endif // DBG
suupen 0:f49394bec833 196 }
suupen 0:f49394bec833 197
suupen 0:f49394bec833 198 /******************************************************************************
suupen 0:f49394bec833 199 Name : Display data set demo initialize
suupen 0:f49394bec833 200 Parameters : none
suupen 0:f49394bec833 201 Returns : nothing
suupen 0:f49394bec833 202 Description: extren call
suupen 0:f49394bec833 203 ******************************************************************************/
suupen 0:f49394bec833 204 void dotmatrix_demoInitialize(void) {
suupen 0:f49394bec833 205 for(int8_t y = 0; y < 16; y++){
suupen 0:f49394bec833 206 for(int8_t x = 0; x < 16; x++){
suupen 0:f49394bec833 207 D_dotDisplay[0][x][y] = (4095 * x) / 15;
suupen 0:f49394bec833 208 D_dotDisplay[1][x][y] = (4095 * y) / 15;
suupen 0:f49394bec833 209 }
suupen 0:f49394bec833 210 }
suupen 0:f49394bec833 211 }
suupen 0:f49394bec833 212 /******************************************************************************
suupen 0:f49394bec833 213 Name : Display data set demo
suupen 0:f49394bec833 214 Parameters : none
suupen 0:f49394bec833 215 Returns : nothing
suupen 0:f49394bec833 216 Description: extren call
suupen 0:f49394bec833 217 ******************************************************************************/
suupen 0:f49394bec833 218 void dotmatrix_demo(void) {
suupen 0:f49394bec833 219
suupen 0:f49394bec833 220 static int8_t x = 0;
suupen 0:f49394bec833 221 static int8_t y = 0;
suupen 0:f49394bec833 222
suupen 0:f49394bec833 223 for(x = 0; x < 16; x++){
suupen 0:f49394bec833 224 for(y = 0; y < 16; y++){
suupen 0:f49394bec833 225 D_dotDisplay[0][x][y] += 3;
suupen 0:f49394bec833 226 D_dotDisplay[1][x][y] += 3;
suupen 0:f49394bec833 227 }
suupen 0:f49394bec833 228 }
suupen 0:f49394bec833 229 }
suupen 0:f49394bec833 230
suupen 0:f49394bec833 231 #ifndef DBG
suupen 0:f49394bec833 232 /******************************************************************************
suupen 0:f49394bec833 233 Name : TLC5940 dot correction initalize
suupen 0:f49394bec833 234 Parameters : none
suupen 0:f49394bec833 235 Returns : nothing
suupen 0:f49394bec833 236 Description:
suupen 0:f49394bec833 237 ******************************************************************************/
suupen 0:f49394bec833 238 static void tlc5940DotCorrection(void) {
suupen 0:f49394bec833 239 VPRG = 1;
suupen 0:f49394bec833 240 spi.format(6,0);
suupen 0:f49394bec833 241 spi.frequency(30000000);
suupen 0:f49394bec833 242
suupen 0:f49394bec833 243
suupen 0:f49394bec833 244 // VPRG = 1;
suupen 0:f49394bec833 245
suupen 0:f49394bec833 246 for (int i = 0; i < (16 * 2); i++) {
suupen 0:f49394bec833 247 int whoami = spi.write(63);
suupen 0:f49394bec833 248 }
suupen 0:f49394bec833 249
suupen 0:f49394bec833 250 XLAT = 1;
suupen 0:f49394bec833 251 XLAT = 0;
suupen 0:f49394bec833 252 }
suupen 0:f49394bec833 253 #endif //DBG
suupen 0:f49394bec833 254
suupen 0:f49394bec833 255 #ifndef DBG
suupen 0:f49394bec833 256 /******************************************************************************
suupen 0:f49394bec833 257 Name : SPI Initalize (for TLC5960 control)
suupen 0:f49394bec833 258 Parameters : none
suupen 0:f49394bec833 259 Returns : nothing
suupen 0:f49394bec833 260 Description:
suupen 0:f49394bec833 261 ******************************************************************************/
suupen 0:f49394bec833 262 static void tlc5940SpiInitalize(void) {
suupen 0:f49394bec833 263 spi.format(12,0);
suupen 0:f49394bec833 264 spi.frequency(30000000);
suupen 0:f49394bec833 265
suupen 0:f49394bec833 266 VPRG = 0;
suupen 0:f49394bec833 267 }
suupen 0:f49394bec833 268 #endif //DBG
suupen 0:f49394bec833 269
suupen 0:f49394bec833 270 #ifndef DBG
suupen 0:f49394bec833 271 /******************************************************************************
suupen 0:f49394bec833 272 Name : TLC5940 Gray Data clear
suupen 0:f49394bec833 273 Parameters : none
suupen 0:f49394bec833 274 Returns : nothing
suupen 0:f49394bec833 275 Description:
suupen 0:f49394bec833 276 ******************************************************************************/
suupen 0:f49394bec833 277 static void tlc5940GrayDataClear(void) {
suupen 0:f49394bec833 278
suupen 0:f49394bec833 279 VPRG = 0;
suupen 0:f49394bec833 280
suupen 0:f49394bec833 281 for (int i = 0; i < (16 * 2); i++) {
suupen 0:f49394bec833 282 int whoami = spi.write(0);
suupen 0:f49394bec833 283 }
suupen 0:f49394bec833 284
suupen 0:f49394bec833 285 XLAT = 1;
suupen 0:f49394bec833 286 XLAT = 0;
suupen 0:f49394bec833 287 }
suupen 0:f49394bec833 288 #endif //DBG
suupen 0:f49394bec833 289
suupen 0:f49394bec833 290 /******************************************************************************
suupen 0:f49394bec833 291 Name : TLC5940 Gray Data Display & next data send
suupen 0:f49394bec833 292 Parameters : rowNo 0 - 15
suupen 0:f49394bec833 293 Returns : nothing
suupen 0:f49394bec833 294 Description:
suupen 0:f49394bec833 295 ******************************************************************************/
suupen 0:f49394bec833 296 #ifdef DBG
suupen 0:f49394bec833 297 static void tlc5940GrayDataDisplayAndSend(int8_t rowNo){
suupen 0:f49394bec833 298
suupen 0:f49394bec833 299 uint8_t x;
suupen 0:f49394bec833 300 int8_t sendRowNo = rowNo + 1;
suupen 0:f49394bec833 301 uint16_t D_gray[2][16];
suupen 0:f49394bec833 302
suupen 0:f49394bec833 303 if(sendRowNo > 15){sendRowNo = 0;}
suupen 0:f49394bec833 304 // green data send
suupen 0:f49394bec833 305 for(x = 0; x < 16; x++){
suupen 0:f49394bec833 306 D_gray[1][x] = D_dotDisplay[1][x][sendRowNo];
suupen 0:f49394bec833 307 }
suupen 0:f49394bec833 308 // red data send
suupen 0:f49394bec833 309 for(x = 0; x < 16; x++){
suupen 0:f49394bec833 310 D_gray[0][x] = D_dotDisplay[0][15 - x][sendRowNo];
suupen 0:f49394bec833 311 }
suupen 0:f49394bec833 312
suupen 0:f49394bec833 313 tlc5940.grayDataSetAndDisplay((uint16_t*)D_gray);
suupen 0:f49394bec833 314
suupen 0:f49394bec833 315 }
suupen 0:f49394bec833 316 #else //~DBG
suupen 0:f49394bec833 317 static void tlc5940GrayDataDisplayAndSend(int8_t rowNo){
suupen 0:f49394bec833 318
suupen 0:f49394bec833 319 int8_t sendRowNo = rowNo + 1;
suupen 0:f49394bec833 320
suupen 0:f49394bec833 321 int8_t x; // display data no x 0 - 15
suupen 0:f49394bec833 322
suupen 0:f49394bec833 323 #define Z_GSCLKNUM (340) // GRAYSCALE PWM sousin yo clock 4096(PWM) / 12bit(sousin) = 341
suupen 0:f49394bec833 324 #define Z_GRAYDATA (16 * 2)
suupen 0:f49394bec833 325
suupen 0:f49394bec833 326
suupen 0:f49394bec833 327 BLANK = 1;
suupen 0:f49394bec833 328 BLANK = 0;
suupen 0:f49394bec833 329
suupen 0:f49394bec833 330
suupen 0:f49394bec833 331
suupen 0:f49394bec833 332
suupen 0:f49394bec833 333 VPRG = 0;
suupen 0:f49394bec833 334
suupen 0:f49394bec833 335 if(sendRowNo > 15){sendRowNo = 0;}
suupen 0:f49394bec833 336
suupen 0:f49394bec833 337 for(int i = 0; i < (Z_GSCLKNUM - Z_GRAYDATA); i++){
suupen 0:f49394bec833 338 // grayscale pwm clock only
suupen 0:f49394bec833 339 spi.write(0);
suupen 0:f49394bec833 340 }
suupen 0:f49394bec833 341
suupen 0:f49394bec833 342 // grayscale pwm clock & color data clock
suupen 0:f49394bec833 343 // green data send
suupen 0:f49394bec833 344 for(x = 0; x < 16; x++){
suupen 0:f49394bec833 345 spi.write(D_dotDisplay[1][15 - x][sendRowNo]);
suupen 0:f49394bec833 346 }
suupen 0:f49394bec833 347 // red data send
suupen 0:f49394bec833 348 for(x = 0; x < 16; x++){
suupen 0:f49394bec833 349 spi.write(D_dotDisplay[0][x][sendRowNo]);
suupen 0:f49394bec833 350 }
suupen 0:f49394bec833 351
suupen 0:f49394bec833 352 XLAT = 1;
suupen 0:f49394bec833 353 XLAT = 0;
suupen 0:f49394bec833 354 }
suupen 0:f49394bec833 355 #endif //DBG
suupen 0:f49394bec833 356
suupen 0:f49394bec833 357
suupen 0:f49394bec833 358 /******************************************************************************
suupen 0:f49394bec833 359 Name : display data kaicho wo TLC5940 Gray Data ni henkan suru data table ti no sakusei
suupen 0:f49394bec833 360 Parameters : none
suupen 0:f49394bec833 361 Returns : nothing
suupen 0:f49394bec833 362 Description:
suupen 0:f49394bec833 363 ******************************************************************************/
suupen 0:f49394bec833 364 void dotmatrix_grayDataKansan(void){
suupen 0:f49394bec833 365
suupen 0:f49394bec833 366 for(uint32_t i = 0; i < 100; i++){
suupen 0:f49394bec833 367 DT_grayData[i] = (uint16_t)((i * i * 10) / 40);
suupen 0:f49394bec833 368 }
suupen 0:f49394bec833 369 }
suupen 0:f49394bec833 370
suupen 0:f49394bec833 371 /******************************************************************************
suupen 0:f49394bec833 372 Name : display data transform to TLC5940 Gray Data
suupen 0:f49394bec833 373 Parameters : none
suupen 0:f49394bec833 374 Returns : nothing
suupen 0:f49394bec833 375 Description:
suupen 0:f49394bec833 376 ******************************************************************************/
suupen 0:f49394bec833 377 static void dotmatrix_displayDataTransform(void){
suupen 0:f49394bec833 378
suupen 0:f49394bec833 379 // D_display[][][] no 15grayScaleData wo 4096grayScale Data ni henkan
suupen 0:f49394bec833 380 for(uint8_t x = 0; x < 16; x++){
suupen 0:f49394bec833 381 for(uint8_t y = 0; y < 16; y++){
suupen 0:f49394bec833 382 D_dotDisplay[Z_dotGreen][x][y] = DT_grayData[B_display[Z_green][x][y]];
suupen 0:f49394bec833 383 D_dotDisplay[ Z_dotRed][x][y] = DT_grayData[B_display[ Z_red][x][y]];
suupen 0:f49394bec833 384 }
suupen 0:f49394bec833 385 }
suupen 0:f49394bec833 386 }