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

Dependencies:   MY9221 mbed

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