TLC5940(16 CHANNEL LED DRIVER) SPI control

Dependencies:   mbed

Committer:
suupen
Date:
Wed May 04 11:50:05 2011 +0000
Revision:
0:e540238d4d25
Ver 0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:e540238d4d25 1 #include "mbed.h"
suupen 0:e540238d4d25 2
suupen 0:e540238d4d25 3 // TLC5940 control pin setting
suupen 0:e540238d4d25 4 SPI spi(p5, p6, p7); //SIN (p6), SCLK,GSCLK(p7)
suupen 0:e540238d4d25 5
suupen 0:e540238d4d25 6 DigitalOut XLAT(p20);
suupen 0:e540238d4d25 7 DigitalOut BLANK(p19);
suupen 0:e540238d4d25 8
suupen 0:e540238d4d25 9 DigitalOut myled1(LED1);
suupen 0:e540238d4d25 10 DigitalOut myled3(LED3);
suupen 0:e540238d4d25 11
suupen 0:e540238d4d25 12 /*
suupen 0:e540238d4d25 13 DigitalOut DIGIT1(p21);
suupen 0:e540238d4d25 14 DigitalOut DIGIT2(p22);
suupen 0:e540238d4d25 15 DigitalOut DIGIT3(p24);
suupen 0:e540238d4d25 16 DigitalOut DIGIT4(p25);
suupen 0:e540238d4d25 17 DigitalOut DIGIT5(p23);
suupen 0:e540238d4d25 18 */
suupen 0:e540238d4d25 19
suupen 0:e540238d4d25 20 /**********************************
suupen 0:e540238d4d25 21 * dynamic output for com
suupen 0:e540238d4d25 22 **********************************/
suupen 0:e540238d4d25 23 /*
suupen 0:e540238d4d25 24 void comOut(void){
suupen 0:e540238d4d25 25 static int cnt = 0;
suupen 0:e540238d4d25 26
suupen 0:e540238d4d25 27 // COM All Off
suupen 0:e540238d4d25 28 DIGIT1 = 0;
suupen 0:e540238d4d25 29 DIGIT2 = 0;
suupen 0:e540238d4d25 30 DIGIT3 = 0;
suupen 0:e540238d4d25 31 DIGIT4 = 0;
suupen 0:e540238d4d25 32 DIGIT5 = 0;
suupen 0:e540238d4d25 33
suupen 0:e540238d4d25 34 // COM out
suupen 0:e540238d4d25 35 switch(cnt){
suupen 0:e540238d4d25 36 case 0:
suupen 0:e540238d4d25 37 DIGIT1 = 1;
suupen 0:e540238d4d25 38 break;
suupen 0:e540238d4d25 39 case 1:
suupen 0:e540238d4d25 40 DIGIT2 = 1;
suupen 0:e540238d4d25 41 break;
suupen 0:e540238d4d25 42 case 2:
suupen 0:e540238d4d25 43 DIGIT3 = 1;
suupen 0:e540238d4d25 44 break;
suupen 0:e540238d4d25 45 case 3:
suupen 0:e540238d4d25 46 DIGIT4 = 1;
suupen 0:e540238d4d25 47 break;
suupen 0:e540238d4d25 48 case 4:
suupen 0:e540238d4d25 49 DIGIT5 = 1;
suupen 0:e540238d4d25 50 break;
suupen 0:e540238d4d25 51 default:
suupen 0:e540238d4d25 52 cnt = 0;
suupen 0:e540238d4d25 53 break;
suupen 0:e540238d4d25 54 }
suupen 0:e540238d4d25 55
suupen 0:e540238d4d25 56 if(++cnt > 4){cnt = 0;}
suupen 0:e540238d4d25 57 }
suupen 0:e540238d4d25 58 */
suupen 0:e540238d4d25 59
suupen 0:e540238d4d25 60 /*********************************
suupen 0:e540238d4d25 61 * gray data set
suupen 0:e540238d4d25 62 *********************************/
suupen 0:e540238d4d25 63 void grayDataSet(int* p){
suupen 0:e540238d4d25 64 static int lightWait = 0;
suupen 0:e540238d4d25 65 static int D_gray = 0;
suupen 0:e540238d4d25 66
suupen 0:e540238d4d25 67 #define Z_kasan (1)
suupen 0:e540238d4d25 68 static int kasan = Z_kasan;
suupen 0:e540238d4d25 69
suupen 0:e540238d4d25 70 lightWait++;
suupen 0:e540238d4d25 71 if(lightWait == 1){
suupen 0:e540238d4d25 72 lightWait = 0;
suupen 0:e540238d4d25 73 D_gray += kasan;
suupen 0:e540238d4d25 74
suupen 0:e540238d4d25 75 if(D_gray > 4095){
suupen 0:e540238d4d25 76 D_gray = 4095;
suupen 0:e540238d4d25 77 kasan = -Z_kasan;
suupen 0:e540238d4d25 78 myled1 = 1;
suupen 0:e540238d4d25 79 }
suupen 0:e540238d4d25 80 else if(D_gray <= 0){
suupen 0:e540238d4d25 81 D_gray = 0;
suupen 0:e540238d4d25 82 kasan = Z_kasan;
suupen 0:e540238d4d25 83 myled1 = 0;
suupen 0:e540238d4d25 84 }
suupen 0:e540238d4d25 85 }
suupen 0:e540238d4d25 86
suupen 0:e540238d4d25 87 for(int i = 0; i < 16; i++){
suupen 0:e540238d4d25 88 *(p + i) = D_gray;
suupen 0:e540238d4d25 89 }
suupen 0:e540238d4d25 90 }
suupen 0:e540238d4d25 91
suupen 0:e540238d4d25 92
suupen 0:e540238d4d25 93 /**********************************
suupen 0:e540238d4d25 94 * SPI Initalize (for TLC5960 control)
suupen 0:e540238d4d25 95 **********************************/
suupen 0:e540238d4d25 96 void tlc5940SpiInitalize(void){
suupen 0:e540238d4d25 97 spi.format(12,0);
suupen 0:e540238d4d25 98 spi.frequency(30000000);
suupen 0:e540238d4d25 99 }
suupen 0:e540238d4d25 100
suupen 0:e540238d4d25 101 /*********************************
suupen 0:e540238d4d25 102 * TLC5940 Gray Data clear
suupen 0:e540238d4d25 103 *********************************/
suupen 0:e540238d4d25 104 void tlc5940GrayDataClear(void){
suupen 0:e540238d4d25 105 for(int i = 0; i < 24; i++){
suupen 0:e540238d4d25 106 int whoami = spi.write(0);
suupen 0:e540238d4d25 107 }
suupen 0:e540238d4d25 108
suupen 0:e540238d4d25 109 XLAT = 1;
suupen 0:e540238d4d25 110 XLAT = 0;
suupen 0:e540238d4d25 111 }
suupen 0:e540238d4d25 112
suupen 0:e540238d4d25 113 /**********************************
suupen 0:e540238d4d25 114 * TLC5940 Gray Data Display & next data send
suupen 0:e540238d4d25 115 ***********************************/
suupen 0:e540238d4d25 116 void tlc5940GrayDataDisplayAndSend(int* p){
suupen 0:e540238d4d25 117 BLANK = 1;
suupen 0:e540238d4d25 118 BLANK = 0;
suupen 0:e540238d4d25 119
suupen 0:e540238d4d25 120 for(int i = 0; i < 326; i++){
suupen 0:e540238d4d25 121 spi.write(0);
suupen 0:e540238d4d25 122 }
suupen 0:e540238d4d25 123
suupen 0:e540238d4d25 124 for(int i = 0; i < 16; i++){
suupen 0:e540238d4d25 125 spi.write(*(p + i));
suupen 0:e540238d4d25 126 }
suupen 0:e540238d4d25 127
suupen 0:e540238d4d25 128 XLAT = 1;
suupen 0:e540238d4d25 129 XLAT = 0;
suupen 0:e540238d4d25 130 }
suupen 0:e540238d4d25 131
suupen 0:e540238d4d25 132 /************************************
suupen 0:e540238d4d25 133 * main
suupen 0:e540238d4d25 134 ************************************/
suupen 0:e540238d4d25 135 int main() {
suupen 0:e540238d4d25 136
suupen 0:e540238d4d25 137
suupen 0:e540238d4d25 138 int D_grayData[16]; // gray data = 0 to 4095 [0]:OUT0, [1]:OUT1, ...,[14]:OUT14, [15]:OUT15
suupen 0:e540238d4d25 139
suupen 0:e540238d4d25 140
suupen 0:e540238d4d25 141 // SPI initalize
suupen 0:e540238d4d25 142 tlc5940SpiInitalize();
suupen 0:e540238d4d25 143
suupen 0:e540238d4d25 144 tlc5940GrayDataClear();
suupen 0:e540238d4d25 145
suupen 0:e540238d4d25 146
suupen 0:e540238d4d25 147 while(1) {
suupen 0:e540238d4d25 148
suupen 0:e540238d4d25 149 // comOut();
suupen 0:e540238d4d25 150
suupen 0:e540238d4d25 151 grayDataSet(D_grayData);
suupen 0:e540238d4d25 152
suupen 0:e540238d4d25 153 tlc5940GrayDataDisplayAndSend(D_grayData);
suupen 0:e540238d4d25 154
suupen 0:e540238d4d25 155
suupen 0:e540238d4d25 156
suupen 0:e540238d4d25 157 }
suupen 0:e540238d4d25 158 }