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

Dependents:   Library_MY9221

Revision:
2:4d9aee0bd724
Parent:
1:60440eb16f81
Child:
3:2131a24e5489
--- a/MY9221.cpp	Sun Oct 22 00:22:18 2017 +0000
+++ b/MY9221.cpp	Sun Oct 22 12:08:22 2017 +0000
@@ -16,6 +16,9 @@
     // 変数初期化 ,マイコン機能の設定
     _di = 0;
     _dcki = 0;
+    
+    command = 0x0000;
+    commandRawSet(command);
 
 
 }
@@ -99,83 +102,138 @@
  * @param uint8_t number : connection number (min=1)
  * @param none
  */
-void MY9221::sendBrock(commandData_t *data, uint8_t number)
+void MY9221::sendBrock(commandData_t *data)
 {
-    for(uint8_t i = 0; i < number; i++) {
+    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[OUT3].DA);
+        sendWord((data + i)->D[OUT3].DB);
+        sendWord((data + i)->D[OUT3].DC);
 
-        sendWord((data + i)->D[1].DA);
-        sendWord((data + i)->D[1].DB);
-        sendWord((data + i)->D[1].DC);
+        sendWord((data + i)->D[OUT2].DA);
+        sendWord((data + i)->D[OUT2].DB);
+        sendWord((data + i)->D[OUT2].DC);
 
-        sendWord((data + i)->D[2].DA);
-        sendWord((data + i)->D[2].DB);
-        sendWord((data + i)->D[2].DC);
+        sendWord((data + i)->D[OUT1].DA);
+        sendWord((data + i)->D[OUT1].DB);
+        sendWord((data + i)->D[OUT1].DC);
 
-        sendWord((data + i)->D[3].DA);
-        sendWord((data + i)->D[3].DB);
-        sendWord((data + i)->D[3].DC);
+        sendWord((data + i)->D[OUT0].DA);
+        sendWord((data + i)->D[OUT0].DB);
+        sendWord((data + i)->D[OUT0].DC);
     }
 
     latch();
 }
 
-void MY9221::initialTest(void)
+
+void MY9221::commandRawSet(uint16_t command)
+{
+    for(int i = 0; i < _number; i++) {
+        MY9221_data[i].CMD = command;
+    }
+}
+
+
+void MY9221::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)
+{
+
+    command = 
+        ((hspd   << 11)  & 0x0400) |
+        ((bs     << 8)   & 0x0300) | 
+        ((gck    << 5)   & 0x0e00) | 
+        ((sep    << 4)   & 0x0010) | 
+        ((osc    << 3)   & 0x0008) | 
+        ((pol    << 2)   & 0x0004) | 
+        ((cntset << 1)   & 0x0002) | 
+        ((onest)         & 0x0001); 
+                    
+    for(int i = 0; i < _number; i++) {
+        MY9221_data[i].CMD = command;
+    }
+}
+
+void MY9221::dataRawSet(uint16_t *data, uint8_t number)
 {
 
-    MY9221::MY9221_data[0].CMD = 0;
+    uint8_t num = 0;
 
-    MY9221_data[0].CMD =         LOUT_FAST_MODE
-                                 |  GRAYSCALE_16BIT
-                                 |  ORIGINAL_FREQ1
-                                 |  WAVE_APDM
-                                 |  GCLOCK_INTERNAL
-                                 |  WORK_LED
-                                 |  COUNTER_FREE
-                                 |  SHOT_REPEAT;
+    if((number > 0) && (number < 11)) {
+        num = number - 1;
+    }
+
+    MY9221_data[num].D[OUT0].DA = *(data + 0);
+    MY9221_data[num].D[OUT0].DB = *(data + 1);
+    MY9221_data[num].D[OUT0].DC = *(data + 2);
 
-    MY9221_data[0].D[OUT0].DA = 0x0002;
-    MY9221_data[0].D[OUT0].DB = 0x0004;
-    MY9221_data[0].D[OUT0].DC = 0x0008;
-
-    MY9221_data[0].D[OUT1].DA = 0x0020;
-    MY9221_data[0].D[OUT1].DB = 0x0040;
-    MY9221_data[0].D[OUT1].DC = 0x0080;
+    MY9221_data[num].D[OUT1].DA = *(data + 3);
+    MY9221_data[num].D[OUT1].DB = *(data + 4);
+    MY9221_data[num].D[OUT1].DC = *(data + 5);
 
-    MY9221_data[0].D[OUT2].DA = 0x0200;
-    MY9221_data[0].D[OUT2].DB = 0x0400;
-    MY9221_data[0].D[OUT2].DC = 0x0800;
+    MY9221_data[num].D[OUT2].DA = *(data + 6);
+    MY9221_data[num].D[OUT2].DB = *(data + 7);
+    MY9221_data[num].D[OUT2].DC = *(data + 8);
 
-    MY9221_data[0].D[OUT3].DA = 0x2000;
-    MY9221_data[0].D[OUT3].DB = 0x4000;
-    MY9221_data[0].D[OUT3].DC = 0x8000;
+    MY9221_data[num].D[OUT3].DA = *(data + 9);
+    MY9221_data[num].D[OUT3].DB = *(data + 10);
+    MY9221_data[num].D[OUT3].DC = *(data + 11);
+
+//   printf("%04x  %04x %04x %04x        ",MY9221_data[num].CMD, 0,  *(data + 0), MY9221_data[num].D[OUT0].DA);
+
 }
 
-void MY9221::test(void)
+void MY9221::dataSet(float *data, uint8_t number)
 {
+    uint16_t bit = (command >> 8 ) & 0x0003;
+    uint16_t bias; 
 
-    MY9221_data[0].D[OUT0].DA += 0x0002;
-    MY9221_data[0].D[OUT0].DB += 0x0004;
-    MY9221_data[0].D[OUT0].DC += 0x0008;
+    uint8_t num = 0;
 
-    MY9221_data[0].D[OUT1].DA += 0x0020;
-    MY9221_data[0].D[OUT1].DB += 0x0040;
-    MY9221_data[0].D[OUT1].DC += 0x0080;
+    if((number > 0) && (number < 11)) {
+        num = number - 1;
+    }
 
-    MY9221_data[0].D[OUT2].DA += 0x0200;
-    MY9221_data[0].D[OUT2].DB += 0x0400;
-    MY9221_data[0].D[OUT2].DC += 0x0800;
+    switch(bit){
+        case MY9221::bit8:
+        bias = 0x00ff;
+        break;
+        case MY9221::bit12:
+        bias = 0x0fff;
+        break;
+        case MY9221::bit14:
+        bias = 0x3fff;
+        break;
+        case MY9221::bit16:
+        bias = 0xffff;
+        break;
+        default:
+        bias = 0x00ff;
+        break;
+        }
 
-    MY9221_data[0].D[OUT3].DA += 0x2000;
-    MY9221_data[0].D[OUT3].DB += 0x4000;
-    MY9221_data[0].D[OUT3].DC += 0x8000;
+    MY9221_data[num].D[OUT0].DA = (uint16_t)(*(data + 0) * bias);
+    MY9221_data[num].D[OUT0].DB = (uint16_t)(*(data + 1) * bias);
+    MY9221_data[num].D[OUT0].DC = (uint16_t)(*(data + 2) * bias);
+
+    MY9221_data[num].D[OUT1].DA = (uint16_t)(*(data + 3) * bias);
+    MY9221_data[num].D[OUT1].DB = (uint16_t)(*(data + 4) * bias);
+    MY9221_data[num].D[OUT1].DC = (uint16_t)(*(data + 5) * bias);
 
+    MY9221_data[num].D[OUT2].DA = (uint16_t)(*(data + 6) * bias);
+    MY9221_data[num].D[OUT2].DB = (uint16_t)(*(data + 7) * bias);
+    MY9221_data[num].D[OUT2].DC = (uint16_t)(*(data + 8) * bias);
 
-    sendBrock(MY9221_data, 1);
+    MY9221_data[num].D[OUT3].DA = (uint16_t)(*(data + 9) * bias);
+    MY9221_data[num].D[OUT3].DB = (uint16_t)(*(data + 10) * bias);
+    MY9221_data[num].D[OUT3].DC = (uint16_t)(*(data + 11) * bias);
+
+//   printf("%04x   %04x %f %04x\r\n",MY9221_data[num].CMD, bias,  *(data + 0), MY9221_data[num].D[OUT0].DA);
 
 }
+
+void MY9221::refresh(void){
+
+    sendBrock(MY9221_data);
+}