suu pen
/
Library_MY9221
12-Channel LED Driver With Gray scale Adaptive Pulse Density Modulation Control IC maker MY-Semi
Diff: main.cpp
- Revision:
- 1:caa6335a5b06
- Parent:
- 0:104d4c4514b8
- Child:
- 2:b59a2fe78451
--- a/main.cpp Sun Oct 22 00:22:36 2017 +0000 +++ b/main.cpp Sun Oct 22 12:08:38 2017 +0000 @@ -12,296 +12,29 @@ #include "mbed.h" -#ifdef LIBMY9221 #include "MY9221.h" -MY9221 MY9221(p5, p10, 1); // di, clk, number -#else -DigitalOut DCKI (p10); // clk -DigitalOut DI(p5); - -//========================= -// command data description -//========================= -// 0x0000にクリアした上で、下記の定義をorしていく - -// CMD[10] 0000 0x00 0000 0000 lout Tr/Tf select -#define LOUT_SLOW_MODE (0x0000) -#define LOUT_FAST_MODE (0x0400) - -// CMD[9:8] 0000 00xx 0000 0000 Gryascale resolution select -#define GRAYSCALE_8BIT (0x0000) -#define GRAYSCALE_12BIT (0x0100) -#define GRAYSCALE_14BIT (0x0200) -#define GRAYSCALE_16BIT (0x0300) - -// CMD[7:5] 0000 0000 xxx0 0000 Internal oscillator freq select -#define ORIGINAL_FREQ1 (0x0000) -#define ORIGINAL_FREQ2 (0x0020) -#define ORIGINAL_FREQ4 (0x0040) -#define ORIGINAL_FREQ8 (0x0060) -#define ORIGINAL_FREQ16 (0x0080) -#define ORIGINAL_FREQ64 (0x00a0) -#define ORIGINAL_FREQ128 (0x00c0) -#define ORIGINAL_FREQ256 (0x00e0) - -// CMD[4] 0000 0000 000x 0000 Output waveform select -#define WAVE_MYPWM (0x0000) // Only Grayscale = 8bit -#define WAVE_APDM (0x0010) - -// CMD[3] 0000 0000 0000 x000 Grayscale clock source select -#define GCLOCK_INTERNAL (0x0000) -#define GCLOCK_EXTERNAL (0x0008) - -// CMD[2] 0000 0000 0000 0x00 Output polarity select -#define WORK_LED (0x0000) -#define WORK_MYPWM (0x0004) - -// CMD[1] 0000 0000 0000 00x0 Counter reset select -#define COUNTER_FREE (0x0000) -#define COUNTER_RESET (0x0002) - -// CMD[0] 0000 0000 0000 000x One-shot select -#define SHOT_REPEAT (0x0000) -#define SHOT_SHOT (0x0001) - -// commandData_t D[]の配列番号 -// MY9221のOUTxの番号と配列番号をあわせるための定義 -#define OUT3 (0) -#define OUT2 (1) -#define OUT1 (2) -#define OUT0 (3) - -//========================= -// MY9221 command data 定義 -//========================= -typedef struct { - uint16_t DA; - uint16_t DB; - uint16_t DC; -} dataSet_t; - -typedef struct { - uint16_t CMD; - dataSet_t D[4]; // [0]:OUT3 [1]:OUT2 [2]:OUT1 [3]:OUT0 -} commandData_t; - - -commandData_t MY9221_data[1] = { - - 0x0000, // CMD - - 0xffff, // DA3; - 0xffff, // DB3; - 0xffff, // DC3; - - 0x00ff, // DA2; - 0x00ff, // DB2; - 0x00ff, // DC2; - - 0x000f, // DA1; - 0x000f, // DB1; - 0x000f, // DC1; - - 0x0000, // DA0; - 0x0000, // DB0; - 0x0000 // DC0; - -}; +MY9221 MY9221(p5, p10, 2); // di, clk, number -/** send one word data - * @param uint16_t data : send data - * @param return none - */ -void sendWord(uint16_t data) -{ - uint16_t temp = data; - uint8_t count = 8; - - __disable_irq(); // 禁止 - DCKI = 0; - wait_us(1); - - do { - - DI = ((temp & 0x8000) == 0x8000) ? 1 : 0; - temp <<= 1; - wait_us(1); - - DCKI = 1; - wait_us(1); - - DI = ((temp & 0x8000) == 0x8000) ? 1 : 0; - temp <<= 1; - wait_us(1); - - DCKI = 0; - wait_us(1); - - } while(--count > 0); - - DI = 0; - DCKI = 0; - __enable_irq(); // 許可 - -} - -/** data latch & display - * @param none - * @param return none - */ -void latch(void) -{ - __disable_irq(); // 禁止 - - DCKI = 0; - wait_us(1); - - DI = 1; - wait_us(1); - DI = 0; - wait_us(1); +uint16_t D_gray[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +float D_gray2[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - DI = 1; - wait_us(1); - DI = 0; - wait_us(1); - - DI = 1; - wait_us(1); - DI = 0; - wait_us(1); - - DI = 1; - wait_us(1); - DI = 0; - wait_us(1); - - - DCKI = 0; - __enable_irq(); // 許可 - -} - -/** send brock data - * @param commandData_t *data : MY9221 Data - * @param uint8_t number : connection number (min=1) - * @param none - */ - -void sendBrock(commandData_t *data, uint8_t number) -{ - for(uint8_t i = 0; i < number; i++) { - - sendWord((data + i)->CMD); - - sendWord((data + i)->D[0].DA); - sendWord((data + i)->D[0].DB); - sendWord((data + i)->D[0].DC); - - sendWord((data + i)->D[1].DA); - sendWord((data + i)->D[1].DB); - sendWord((data + i)->D[1].DC); - - sendWord((data + i)->D[2].DA); - sendWord((data + i)->D[2].DB); - sendWord((data + i)->D[2].DC); - - sendWord((data + i)->D[3].DA); - sendWord((data + i)->D[3].DB); - sendWord((data + i)->D[3].DC); - } - - latch(); -} - -DigitalOut myled(LED1); -#endif - - -#ifndef LIBMY9221 int main() { - uint16_t temp[12]; - -MY9221_data[0].CMD = 0; + MY9221.commandSet(MY9221::fast, MY9221::bit16, MY9221::freq1, MY9221::waveApdm, MY9221::internal, MY9221::workLed, MY9221::free, MY9221::repeat); - MY9221_data[0].CMD = LOUT_FAST_MODE - | GRAYSCALE_16BIT - | ORIGINAL_FREQ1 - | WAVE_APDM - | GCLOCK_INTERNAL - | WORK_LED - | COUNTER_FREE - | SHOT_REPEAT; - - - for(uint8_t i=0; i < 12; i++){ - temp[i] = i * 0x0100; - } while(1) { - sendBrock(MY9221_data, 1); - - for(uint8_t i=0; i < 12; i++){ - temp[i] += 0x100; - if(temp[i] == 0){temp[i] = 1;} -} - printf("%04x %04x %04x\r\n",MY9221_data[0].CMD, temp[0], temp[1]); - - MY9221_data[0].D[OUT3].DA = temp[0]; - MY9221_data[0].D[OUT3].DB = 0;//temp[1]; - MY9221_data[0].D[OUT3].DC = 0;//temp[2]; - - MY9221_data[0].D[OUT2].DA = 0;//temp[3]; - MY9221_data[0].D[OUT2].DB = temp[4]; - MY9221_data[0].D[OUT2].DC = 0;//temp[5]; - - myled = 1; - - MY9221_data[0].D[OUT1].DA = 0;//temp[6]; - MY9221_data[0].D[OUT1].DB = 0;//temp[7]; - MY9221_data[0].D[OUT1].DC = temp[8]; - - MY9221_data[0].D[OUT0].DA = temp[9]; - MY9221_data[0].D[OUT0].DB = 0;//temp[10]; - MY9221_data[0].D[OUT0].DC = temp[11]; + for(int i=0; i < 12; i++) { + D_gray[i] += 0x1; + D_gray2[i] += 0.001; + if(D_gray2[i] > 1)D_gray2[i] = 0; + } + MY9221.dataRawSet(D_gray, 1); + MY9221.dataSet(D_gray2, 2); + wait_ms(20); + MY9221.refresh(); -/* - tempA++; - tempB++; - tempC++; - - MY9221_data[0].D[OUT3].DA = tempA; - MY9221_data[0].D[OUT3].DB = tempA; - MY9221_data[0].D[OUT3].DC = tempA; - - MY9221_data[0].D[OUT2].DA = tempA; - MY9221_data[0].D[OUT2].DB = tempA; - MY9221_data[0].D[OUT2].DC = tempA; - - myled = 1; - - MY9221_data[0].D[OUT1].DA = tempA; - MY9221_data[0].D[OUT1].DB = tempA; - MY9221_data[0].D[OUT1].DC = tempA; - - MY9221_data[0].D[OUT0].DA = tempA; - MY9221_data[0].D[OUT0].DB = tempA; - MY9221_data[0].D[OUT0].DC = tempA; -*/ -// wait(0.1); - myled = 0; -// wait(0.2); } } -#else -int main() -{ - MY9221.initialTest(); - while(1){ - MY9221.test(); - } -} -#endif