このプログラムは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@0:2e81892b1896, 2011-11-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |