12-Channel LED Driver With Gray scale Adaptive Pulse Density Modulation Control IC Library. maker MY-Semi

Dependents:   Library_MY9221

Committer:
suupen
Date:
Sun Oct 22 22:59:19 2017 +0000
Revision:
3:2131a24e5489
Parent:
2:4d9aee0bd724
Completion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:3a18655ada14 1 #ifndef MBED_MY9221_H
suupen 0:3a18655ada14 2 #define MBED_MY9221_H
suupen 2:4d9aee0bd724 3
suupen 3:2131a24e5489 4 /**
suupen 3:2131a24e5489 5 * MY9221 Library
suupen 3:2131a24e5489 6 * IC name : MY9221
suupen 3:2131a24e5489 7 * maker : http://www.my-semi.com/content/products/product_mean.aspx?id=4
suupen 3:2131a24e5489 8 * 12-Channel LED Driver With Grayscale Adaptive Pulse Density Modulation Control
suupen 3:2131a24e5489 9 * data sheet : http://akizukidenshi.com/download/ds/mysemi/MY9221_DS1_0.pdf
suupen 3:2131a24e5489 10 */
suupen 3:2131a24e5489 11
suupen 3:2131a24e5489 12 /** Example
suupen 3:2131a24e5489 13 * @code
suupen 3:2131a24e5489 14 * #include "mbed.h"
suupen 3:2131a24e5489 15 *#include "MY9221.h"
suupen 3:2131a24e5489 16 *MY9221 MY9221(p5, p10, 2); // di, clk, number
suupen 3:2131a24e5489 17 *
suupen 3:2131a24e5489 18 *uint16_t D_gray[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
suupen 3:2131a24e5489 19 *float D_gray2[12] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
suupen 3:2131a24e5489 20 *
suupen 3:2131a24e5489 21 *int main()
suupen 3:2131a24e5489 22 *{
suupen 3:2131a24e5489 23 *
suupen 3:2131a24e5489 24 * MY9221.commandSet(MY9221::fast, MY9221::bit16, MY9221::freq1, MY9221::waveApdm, MY9221::internal, MY9221::workLed, MY9221::free, MY9221::repeat);
suupen 3:2131a24e5489 25 *
suupen 3:2131a24e5489 26 *
suupen 3:2131a24e5489 27 * while(1) {
suupen 3:2131a24e5489 28 *
suupen 3:2131a24e5489 29 * for(int i=0; i < 12; i++) {
suupen 3:2131a24e5489 30 * D_gray[i] += 0x100;
suupen 3:2131a24e5489 31 * D_gray2[i] += 0.01;
suupen 3:2131a24e5489 32 * if(D_gray2[i] > 1)D_gray2[i] = 0;
suupen 3:2131a24e5489 33 * }
suupen 3:2131a24e5489 34 * MY9221.dataRawSet(D_gray, 1);
suupen 3:2131a24e5489 35 * MY9221.dataSet(D_gray2, 2);
suupen 3:2131a24e5489 36 * wait_ms(20); // Image refresh Rate [s] < led gray data update cycle [s]
suupen 3:2131a24e5489 37 * MY9221.refresh();
suupen 3:2131a24e5489 38 *
suupen 3:2131a24e5489 39 * }
suupen 3:2131a24e5489 40 *}
suupen 3:2131a24e5489 41 * @endcode
suupen 3:2131a24e5489 42 */
suupen 3:2131a24e5489 43
suupen 3:2131a24e5489 44
suupen 0:3a18655ada14 45 #include "mbed.h"
suupen 0:3a18655ada14 46 #include "MY9221.h"
suupen 0:3a18655ada14 47
suupen 0:3a18655ada14 48
suupen 0:3a18655ada14 49
suupen 0:3a18655ada14 50 /**
suupen 0:3a18655ada14 51 * @class MY9221
suupen 0:3a18655ada14 52 * @brief nothine
suupen 0:3a18655ada14 53 */
suupen 0:3a18655ada14 54 class MY9221
suupen 0:3a18655ada14 55 {
suupen 2:4d9aee0bd724 56
suupen 0:3a18655ada14 57 public:
suupen 2:4d9aee0bd724 58
suupen 0:3a18655ada14 59 /** Create a MY9221 port, connected to the specified IC pins
suupen 0:3a18655ada14 60 * @param DI pin
suupen 0:3a18655ada14 61 * @param DCKI pin
suupen 0:3a18655ada14 62 * @param IC serial connection number :min = 1(default)
suupen 0:3a18655ada14 63 * @note nothing
suupen 0:3a18655ada14 64 */
suupen 1:60440eb16f81 65 MY9221(PinName di, PinName dcki, uint8_t number);
suupen 2:4d9aee0bd724 66
suupen 0:3a18655ada14 67
suupen 0:3a18655ada14 68 //=========================
suupen 0:3a18655ada14 69 // command data description
suupen 0:3a18655ada14 70 //=========================
suupen 0:3a18655ada14 71 // 0x0000にクリアした上で、下記の定義をorしていく
suupen 0:3a18655ada14 72
suupen 0:3a18655ada14 73 // CMD[10] 0000 0x00 0000 0000 lout Tr/Tf select
suupen 0:3a18655ada14 74 #define LOUT_SLOW_MODE (0x0000)
suupen 0:3a18655ada14 75 #define LOUT_FAST_MODE (0x0400)
suupen 0:3a18655ada14 76
suupen 2:4d9aee0bd724 77 enum hspd_t {
suupen 2:4d9aee0bd724 78 slow = 0,
suupen 2:4d9aee0bd724 79 fast
suupen 2:4d9aee0bd724 80 };
suupen 2:4d9aee0bd724 81
suupen 0:3a18655ada14 82 // CMD[9:8] 0000 00xx 0000 0000 Gryascale resolution select
suupen 0:3a18655ada14 83 #define GRAYSCALE_8BIT (0x0000)
suupen 0:3a18655ada14 84 #define GRAYSCALE_12BIT (0x0100)
suupen 0:3a18655ada14 85 #define GRAYSCALE_14BIT (0x0200)
suupen 0:3a18655ada14 86 #define GRAYSCALE_16BIT (0x0300)
suupen 0:3a18655ada14 87
suupen 2:4d9aee0bd724 88 enum bs_t {
suupen 2:4d9aee0bd724 89 bit8 = 0,
suupen 2:4d9aee0bd724 90 bit12,
suupen 2:4d9aee0bd724 91 bit14,
suupen 2:4d9aee0bd724 92 bit16
suupen 2:4d9aee0bd724 93 };
suupen 2:4d9aee0bd724 94
suupen 0:3a18655ada14 95 // CMD[7:5] 0000 0000 xxx0 0000 Internal oscillator freq select
suupen 0:3a18655ada14 96 #define ORIGINAL_FREQ1 (0x0000)
suupen 0:3a18655ada14 97 #define ORIGINAL_FREQ2 (0x0020)
suupen 0:3a18655ada14 98 #define ORIGINAL_FREQ4 (0x0040)
suupen 0:3a18655ada14 99 #define ORIGINAL_FREQ8 (0x0060)
suupen 0:3a18655ada14 100 #define ORIGINAL_FREQ16 (0x0080)
suupen 0:3a18655ada14 101 #define ORIGINAL_FREQ64 (0x00a0)
suupen 0:3a18655ada14 102 #define ORIGINAL_FREQ128 (0x00c0)
suupen 0:3a18655ada14 103 #define ORIGINAL_FREQ256 (0x00e0)
suupen 0:3a18655ada14 104
suupen 2:4d9aee0bd724 105 enum gck_t {
suupen 2:4d9aee0bd724 106 freq1 = 0,
suupen 2:4d9aee0bd724 107 freq2,
suupen 2:4d9aee0bd724 108 freq4,
suupen 2:4d9aee0bd724 109 freq8,
suupen 2:4d9aee0bd724 110 freq16,
suupen 2:4d9aee0bd724 111 freq64,
suupen 2:4d9aee0bd724 112 freq128,
suupen 2:4d9aee0bd724 113 freq256
suupen 2:4d9aee0bd724 114 };
suupen 2:4d9aee0bd724 115
suupen 0:3a18655ada14 116 // CMD[4] 0000 0000 000x 0000 Output waveform select
suupen 0:3a18655ada14 117 #define WAVE_MYPWM (0x0000) // Only Grayscale = 8bit
suupen 0:3a18655ada14 118 #define WAVE_APDM (0x0010)
suupen 0:3a18655ada14 119
suupen 2:4d9aee0bd724 120 enum sep_t {
suupen 2:4d9aee0bd724 121 waveMypwm = 0,
suupen 2:4d9aee0bd724 122 waveApdm
suupen 2:4d9aee0bd724 123 };
suupen 2:4d9aee0bd724 124
suupen 2:4d9aee0bd724 125
suupen 0:3a18655ada14 126 // CMD[3] 0000 0000 0000 x000 Grayscale clock source select
suupen 0:3a18655ada14 127 #define GCLOCK_INTERNAL (0x0000)
suupen 0:3a18655ada14 128 #define GCLOCK_EXTERNAL (0x0008)
suupen 0:3a18655ada14 129
suupen 2:4d9aee0bd724 130 enum osc_t {
suupen 2:4d9aee0bd724 131 internal = 0,
suupen 2:4d9aee0bd724 132 external
suupen 2:4d9aee0bd724 133 };
suupen 2:4d9aee0bd724 134
suupen 0:3a18655ada14 135 // CMD[2] 0000 0000 0000 0x00 Output polarity select
suupen 0:3a18655ada14 136 #define WORK_LED (0x0000)
suupen 0:3a18655ada14 137 #define WORK_MYPWM (0x0004)
suupen 0:3a18655ada14 138
suupen 2:4d9aee0bd724 139 enum pol_t {
suupen 2:4d9aee0bd724 140 workLed = 0,
suupen 2:4d9aee0bd724 141 workMypwm
suupen 2:4d9aee0bd724 142 };
suupen 2:4d9aee0bd724 143
suupen 0:3a18655ada14 144 // CMD[1] 0000 0000 0000 00x0 Counter reset select
suupen 0:3a18655ada14 145 #define COUNTER_FREE (0x0000)
suupen 0:3a18655ada14 146 #define COUNTER_RESET (0x0002)
suupen 0:3a18655ada14 147
suupen 2:4d9aee0bd724 148 enum cntset_t {
suupen 2:4d9aee0bd724 149 free = 0,
suupen 2:4d9aee0bd724 150 reset
suupen 2:4d9aee0bd724 151 };
suupen 2:4d9aee0bd724 152
suupen 0:3a18655ada14 153 // CMD[0] 0000 0000 0000 000x One-shot select
suupen 0:3a18655ada14 154 #define SHOT_REPEAT (0x0000)
suupen 0:3a18655ada14 155 #define SHOT_SHOT (0x0001)
suupen 0:3a18655ada14 156
suupen 2:4d9aee0bd724 157 enum onest_t {
suupen 2:4d9aee0bd724 158 repeat = 0,
suupen 2:4d9aee0bd724 159 shot
suupen 2:4d9aee0bd724 160 };
suupen 2:4d9aee0bd724 161
suupen 2:4d9aee0bd724 162
suupen 2:4d9aee0bd724 163
suupen 2:4d9aee0bd724 164
suupen 0:3a18655ada14 165 // commandData_t D[]の配列番号
suupen 0:3a18655ada14 166 // MY9221のOUTxの番号と配列番号をあわせるための定義
suupen 0:3a18655ada14 167 #define OUT3 (0)
suupen 0:3a18655ada14 168 #define OUT2 (1)
suupen 0:3a18655ada14 169 #define OUT1 (2)
suupen 0:3a18655ada14 170 #define OUT0 (3)
suupen 0:3a18655ada14 171
suupen 0:3a18655ada14 172 //=========================
suupen 0:3a18655ada14 173 // MY9221 command data 定義
suupen 0:3a18655ada14 174 //=========================
suupen 2:4d9aee0bd724 175 typedef struct {
suupen 2:4d9aee0bd724 176 uint16_t DA;
suupen 2:4d9aee0bd724 177 uint16_t DB;
suupen 2:4d9aee0bd724 178 uint16_t DC;
suupen 2:4d9aee0bd724 179 } dataSet_t;
suupen 2:4d9aee0bd724 180
suupen 2:4d9aee0bd724 181 typedef struct {
suupen 2:4d9aee0bd724 182 uint16_t CMD;
suupen 2:4d9aee0bd724 183 dataSet_t D[4]; // [0]:OUT3 [1]:OUT2 [2]:OUT1 [3]:OUT0
suupen 2:4d9aee0bd724 184 } commandData_t;
suupen 0:3a18655ada14 185
suupen 2:4d9aee0bd724 186 /** command raw set
suupen 2:4d9aee0bd724 187 * @param uint16_t hardware manual 16-bit COmmand Data Description CMD[15:0] = D[207:192]
suupen 2:4d9aee0bd724 188 */
suupen 2:4d9aee0bd724 189 void commandRawSet(uint16_t command);
suupen 3:2131a24e5489 190
suupen 2:4d9aee0bd724 191 /** command nomalization set
suupen 2:4d9aee0bd724 192 * @param hspd_t hspd fast, slow
suupen 2:4d9aee0bd724 193 * @param bs_t bs bit8, bit12, bit14, bit16
suupen 2:4d9aee0bd724 194 * @param gck_t gck freq1, freq2, freq4, freq8, freq16, freq64, freq128, freq256
suupen 2:4d9aee0bd724 195 * @param sep_t sep waveMypwm, waveApdm
suupen 2:4d9aee0bd724 196 * @param osc_t osc internal, external
suupen 2:4d9aee0bd724 197 * @param pol_t pol workLed, workMypwm
suupen 2:4d9aee0bd724 198 * @param cntset_t cntset free, reset
suupen 2:4d9aee0bd724 199 * @param onest_t onest repeat, shot
suupen 2:4d9aee0bd724 200 */
suupen 2:4d9aee0bd724 201 void commandSet(hspd_t hspd, bs_t bs, gck_t gck, sep_t sep, osc_t osc, pol_t pol, cntset_t cntset, onest_t onest);
suupen 0:3a18655ada14 202
suupen 2:4d9aee0bd724 203 /** gray data set
suupen 2:4d9aee0bd724 204 * @param uint16_t *data [0]=OUTA[0], [1]=OUTB[0], [2]=OUTC[0], ... [9]=OUTA[3], [10]=OUTB[3], [11]=OUTC[3]
suupen 2:4d9aee0bd724 205 * @param uint8_t number MY9221 number (1 to 10)
suupen 2:4d9aee0bd724 206 */
suupen 2:4d9aee0bd724 207 void dataRawSet(uint16_t *data, uint8_t number);
suupen 3:2131a24e5489 208
suupen 3:2131a24e5489 209 /** gray data set
suupen 3:2131a24e5489 210 * @param float *data (0.0 to 1.0) [0]=OUTA[0], [1]=OUTB[0], [2]=OUTC[0], ... [9]=OUTA[3], [10]=OUTB[3], [11]=OUTC[3]
suupen 3:2131a24e5489 211 * @param uint8_t number MY9221 number (1 to 10)
suupen 3:2131a24e5489 212 */
suupen 2:4d9aee0bd724 213 void dataSet(float *data, uint8_t number);
suupen 0:3a18655ada14 214
suupen 2:4d9aee0bd724 215 /** MY9221 send data and latch
suupen 2:4d9aee0bd724 216 *
suupen 3:2131a24e5489 217 */
suupen 2:4d9aee0bd724 218 void refresh(void);
suupen 0:3a18655ada14 219
suupen 0:3a18655ada14 220 //----------------------------------------------------------
suupen 0:3a18655ada14 221 private:
suupen 1:60440eb16f81 222
suupen 2:4d9aee0bd724 223
suupen 2:4d9aee0bd724 224 /** send one word data
suupen 2:4d9aee0bd724 225 * @param uint16_t data : send data
suupen 2:4d9aee0bd724 226 * @param return none
suupen 2:4d9aee0bd724 227 */
suupen 2:4d9aee0bd724 228 void sendWord(uint16_t data);
suupen 0:3a18655ada14 229
suupen 2:4d9aee0bd724 230 /** data latch & display
suupen 2:4d9aee0bd724 231 * @param none
suupen 2:4d9aee0bd724 232 * @param return none
suupen 2:4d9aee0bd724 233 */
suupen 2:4d9aee0bd724 234 void latch(void);
suupen 0:3a18655ada14 235
suupen 2:4d9aee0bd724 236 /** send brock data
suupen 2:4d9aee0bd724 237 * @param commandData_t *data : MY9221 Data
suupen 2:4d9aee0bd724 238 * @param uint8_t number : connection number (min=1)
suupen 2:4d9aee0bd724 239 * @param none
suupen 2:4d9aee0bd724 240 */
suupen 2:4d9aee0bd724 241 void sendBrock(commandData_t *data);
suupen 1:60440eb16f81 242
suupen 1:60440eb16f81 243
suupen 1:60440eb16f81 244
suupen 1:60440eb16f81 245
suupen 1:60440eb16f81 246
suupen 1:60440eb16f81 247
suupen 0:3a18655ada14 248 DigitalOut _di;
suupen 0:3a18655ada14 249 DigitalOut _dcki;
suupen 1:60440eb16f81 250
suupen 0:3a18655ada14 251 int8_t _number;
suupen 2:4d9aee0bd724 252 uint16_t command;
suupen 1:60440eb16f81 253
suupen 1:60440eb16f81 254 commandData_t MY9221_data[10];//_number];
suupen 1:60440eb16f81 255
suupen 2:4d9aee0bd724 256
suupen 1:60440eb16f81 257
suupen 0:3a18655ada14 258 };
suupen 3:2131a24e5489 259 #endif // MBED_MY9221_H