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 12:08:22 2017 +0000
Revision:
2:4d9aee0bd724
Parent:
1:60440eb16f81
Child:
3:2131a24e5489
??????

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