TLC5940(http://www.ti.com/lit/ds/symlink/tlc5940.pdf)のlibraryです

Committer:
suupen
Date:
Sun Dec 11 00:24:02 2011 +0000
Revision:
0:ead2ebe1dc77

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:ead2ebe1dc77 1 //==========================================================
suupen 0:ead2ebe1dc77 2 //
suupen 0:ead2ebe1dc77 3 // TLC5940.cpp
suupen 0:ead2ebe1dc77 4 // TLC5940(Texas Instruments 16 channel led driver with dot correction and grayscale pwm control)
suupen 0:ead2ebe1dc77 5 // http://datasheet.octopart.com/TLC5940NT-Texas-Instruments-datasheet-121738.pdf
suupen 0:ead2ebe1dc77 6 //==========================================================
suupen 0:ead2ebe1dc77 7 #define _TLC5940_C
suupen 0:ead2ebe1dc77 8
suupen 0:ead2ebe1dc77 9 #include "types.h"
suupen 0:ead2ebe1dc77 10 #include "mbed.h"
suupen 0:ead2ebe1dc77 11 #include "TLC5940.h"
suupen 0:ead2ebe1dc77 12
suupen 0:ead2ebe1dc77 13
suupen 0:ead2ebe1dc77 14
suupen 0:ead2ebe1dc77 15
suupen 0:ead2ebe1dc77 16 /** DC motor direct drive object connected to the specified DigtalOutput pin
suupen 0:ead2ebe1dc77 17 */
suupen 0:ead2ebe1dc77 18 TLC5940::TLC5940(PinName mosi, PinName miso, PinName sck, PinName xlat, PinName blank, PinName vprg, uint8_t cascade) :
suupen 0:ead2ebe1dc77 19 _spi(mosi, miso, sck), _xlat(xlat), _blank(blank), _vprg(vprg){
suupen 0:ead2ebe1dc77 20
suupen 0:ead2ebe1dc77 21 _xlat = 0;
suupen 0:ead2ebe1dc77 22 _blank = 0;
suupen 0:ead2ebe1dc77 23 _vprg = 0;
suupen 0:ead2ebe1dc77 24
suupen 0:ead2ebe1dc77 25 D_cascade = cascade;
suupen 0:ead2ebe1dc77 26
suupen 0:ead2ebe1dc77 27 tlc5940DotCorrection();
suupen 0:ead2ebe1dc77 28 tlc5940SpiInitalize();
suupen 0:ead2ebe1dc77 29 tlc5940GrayDataClear();
suupen 0:ead2ebe1dc77 30 }
suupen 0:ead2ebe1dc77 31
suupen 0:ead2ebe1dc77 32 /******************************************************************************
suupen 0:ead2ebe1dc77 33 Name : TLC5940 dot correction initalize
suupen 0:ead2ebe1dc77 34 Parameters : none
suupen 0:ead2ebe1dc77 35 Returns : nothing
suupen 0:ead2ebe1dc77 36 Description:
suupen 0:ead2ebe1dc77 37 ******************************************************************************/
suupen 0:ead2ebe1dc77 38 void TLC5940::tlc5940DotCorrection(void) {
suupen 0:ead2ebe1dc77 39 _vprg = 1;
suupen 0:ead2ebe1dc77 40 _spi.format(6,0);
suupen 0:ead2ebe1dc77 41 _spi.frequency(Z_clockFrequency);
suupen 0:ead2ebe1dc77 42
suupen 0:ead2ebe1dc77 43
suupen 0:ead2ebe1dc77 44 // _vprg = 1;
suupen 0:ead2ebe1dc77 45
suupen 0:ead2ebe1dc77 46 for (int i = 0; i < (16 * D_cascade); i++) {
suupen 0:ead2ebe1dc77 47 int whoami = _spi.write(Z_dotCorrection);
suupen 0:ead2ebe1dc77 48 }
suupen 0:ead2ebe1dc77 49
suupen 0:ead2ebe1dc77 50 _xlat = 1;
suupen 0:ead2ebe1dc77 51 _xlat = 0;
suupen 0:ead2ebe1dc77 52 }
suupen 0:ead2ebe1dc77 53
suupen 0:ead2ebe1dc77 54 /******************************************************************************
suupen 0:ead2ebe1dc77 55 Name : SPI Initalize (for TLC5960 control)
suupen 0:ead2ebe1dc77 56 Parameters : none
suupen 0:ead2ebe1dc77 57 Returns : nothing
suupen 0:ead2ebe1dc77 58 Description:
suupen 0:ead2ebe1dc77 59 ******************************************************************************/
suupen 0:ead2ebe1dc77 60 void TLC5940::tlc5940SpiInitalize(void) {
suupen 0:ead2ebe1dc77 61 _spi.format(12,0);
suupen 0:ead2ebe1dc77 62 _spi.frequency(Z_clockFrequency);
suupen 0:ead2ebe1dc77 63
suupen 0:ead2ebe1dc77 64 _vprg = 0;
suupen 0:ead2ebe1dc77 65 }
suupen 0:ead2ebe1dc77 66
suupen 0:ead2ebe1dc77 67 /******************************************************************************
suupen 0:ead2ebe1dc77 68 Name : TLC5940 Gray Data clear
suupen 0:ead2ebe1dc77 69 Parameters : none
suupen 0:ead2ebe1dc77 70 Returns : nothing
suupen 0:ead2ebe1dc77 71 Description:
suupen 0:ead2ebe1dc77 72 ******************************************************************************/
suupen 0:ead2ebe1dc77 73 void TLC5940::tlc5940GrayDataClear(void) {
suupen 0:ead2ebe1dc77 74
suupen 0:ead2ebe1dc77 75 _vprg = 0;
suupen 0:ead2ebe1dc77 76
suupen 0:ead2ebe1dc77 77 for (int i = 0; i < (16 * D_cascade); i++) {
suupen 0:ead2ebe1dc77 78 int whoami = _spi.write(0);
suupen 0:ead2ebe1dc77 79 }
suupen 0:ead2ebe1dc77 80
suupen 0:ead2ebe1dc77 81 _xlat = 1;
suupen 0:ead2ebe1dc77 82 _xlat = 0;
suupen 0:ead2ebe1dc77 83 }
suupen 0:ead2ebe1dc77 84
suupen 0:ead2ebe1dc77 85 /**************************************
suupen 0:ead2ebe1dc77 86 * main
suupen 0:ead2ebe1dc77 87 **************************************/
suupen 0:ead2ebe1dc77 88 void TLC5940::grayDataSetAndDisplay(uint16_t *data) {
suupen 0:ead2ebe1dc77 89
suupen 0:ead2ebe1dc77 90 // *data = &D_grayScale[][]
suupen 0:ead2ebe1dc77 91 // D_grayScale[cascade][16]; // [][0] = out0, [][1] = out1, ... ,[][14] = out15
suupen 0:ead2ebe1dc77 92 // [x][x].11,[x][x].10, ... ,[x][x].1,[x][x].0 = (xxxx xxxx xxxxb) 1gray scale data
suupen 0:ead2ebe1dc77 93
suupen 0:ead2ebe1dc77 94 // [0][0] [0][1] [0][14] [0][15] [1][0] [1][1] [1][14] [1][15] [20][0] 20][1] [20][14] [20][15]
suupen 0:ead2ebe1dc77 95 // | | ... | | | | ... | | | | ... | |
suupen 0:ead2ebe1dc77 96 // ----------------------------------| ------------------------------------| ------------------------------------|
suupen 0:ead2ebe1dc77 97 // | out0 1 ... 14 15 |-----------| out0 1 ... 14 15 |-----......------| out0 1 ... 14 15 |
suupen 0:ead2ebe1dc77 98 // |TLC5940 (cascade = 1) | |TLC5940 (cascade = 2) | |TLC5940 (cascade = 21) |
suupen 0:ead2ebe1dc77 99 // ----------------------------------- ------------------------------------- -------------------------------------
suupen 0:ead2ebe1dc77 100 //
suupen 0:ead2ebe1dc77 101
suupen 0:ead2ebe1dc77 102
suupen 0:ead2ebe1dc77 103 int8_t x; // display data no x 0 - 15
suupen 0:ead2ebe1dc77 104
suupen 0:ead2ebe1dc77 105 #define Z_GSCLKNUM (340) // GRAYSCALE PWM sousin yo clock 4096(PWM) / 12bit(sousin) = 341
suupen 0:ead2ebe1dc77 106 #define Z_GRAYDATA (16 * D_cascade)
suupen 0:ead2ebe1dc77 107
suupen 0:ead2ebe1dc77 108
suupen 0:ead2ebe1dc77 109 _blank = 1;
suupen 0:ead2ebe1dc77 110 _blank = 0;
suupen 0:ead2ebe1dc77 111
suupen 0:ead2ebe1dc77 112
suupen 0:ead2ebe1dc77 113
suupen 0:ead2ebe1dc77 114
suupen 0:ead2ebe1dc77 115 _vprg = 0;
suupen 0:ead2ebe1dc77 116
suupen 0:ead2ebe1dc77 117 for(int i = 0; i < (Z_GSCLKNUM - Z_GRAYDATA); i++){
suupen 0:ead2ebe1dc77 118 // grayscale pwm clock only
suupen 0:ead2ebe1dc77 119 _spi.write(0);
suupen 0:ead2ebe1dc77 120 }
suupen 0:ead2ebe1dc77 121
suupen 0:ead2ebe1dc77 122 // grayscale pwm clock & color data clock
suupen 0:ead2ebe1dc77 123 // green data send
suupen 0:ead2ebe1dc77 124 for(uint8_t C_cascade = 1; C_cascade <= D_cascade; C_cascade++){
suupen 0:ead2ebe1dc77 125 for(x = 0; x < 16; x++){
suupen 0:ead2ebe1dc77 126 _spi.write((uint16_t)*(data + (16 * (D_cascade - C_cascade)) + (15 - x)));
suupen 0:ead2ebe1dc77 127 }
suupen 0:ead2ebe1dc77 128 }
suupen 0:ead2ebe1dc77 129
suupen 0:ead2ebe1dc77 130
suupen 0:ead2ebe1dc77 131 _xlat = 1;
suupen 0:ead2ebe1dc77 132 _xlat = 0;
suupen 0:ead2ebe1dc77 133
suupen 0:ead2ebe1dc77 134 }
suupen 0:ead2ebe1dc77 135
suupen 0:ead2ebe1dc77 136