このプログラムは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.

Dependencies:   mbed

Committer:
suupen
Date:
Tue Nov 22 13:08:40 2011 +0000
Revision:
0:2e81892b1896
V0.1   2001/11/22

Who changed what in which revision?

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