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

Dependents:   Library_MY9221

Revision:
1:60440eb16f81
Parent:
0:3a18655ada14
Child:
2:4d9aee0bd724
--- a/MY9221.cpp	Thu Oct 19 05:28:32 2017 +0000
+++ b/MY9221.cpp	Sun Oct 22 00:22:18 2017 +0000
@@ -1,35 +1,181 @@
 /**
  * MY9221 Library
  */
+#define _MY9221_C
 
-#include "mbed.h" 
+#include "mbed.h"
 #include "MY9221.h"
- 
+
 /**
  *
  */
 MY9221::MY9221(PinName di, PinName dcki, uint8_t number
-                    ) : _di(di), _dcki(dcki), _number(number)
+              ) : _di(di), _dcki(dcki), _number(number)
 {
- 
+
     // 変数初期化 ,マイコン機能の設定
     _di = 0;
-    _dcki = 0; 
+    _dcki = 0;
+
+
+}
+
+/** send one word data
+ * @param uint16_t data : send data
+ * @param return none
+ */
+void MY9221::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 MY9221::latch(void)
+{
+    __disable_irq(); // 禁止
+
+    _dcki = 0;
+    wait_us(1);
+
+    _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);
+
+    _di = 1;
+    wait_us(1);
+    _di = 0;
+    wait_us(1);
+
+
+    _dcki = 0;
+    __enable_irq(); // 許可
+
+}
 
-/*
-    _onEdge = 0;
-    _offEdge = 0;
-    _levelNow = 1;
-    _levelOld = 1;
- 
-    if(_pull == 1) {
-        _sw.mode(PullUp);
-    } else {
-        _sw.mode(PullDown);
+/** send brock data
+ * @param commandData_t *data : MY9221 Data
+ * @param uint8_t number : connection number (min=1)
+ * @param none
+ */
+void MY9221::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);
     }
-    
-    _sw.rise(this, &DigitalSw::swLevelUp);
-    _sw.fall(this, &DigitalSw::swLevelDown);
-*/ 
- 
-}
\ No newline at end of file
+
+    latch();
+}
+
+void MY9221::initialTest(void)
+{
+
+    MY9221::MY9221_data[0].CMD = 0;
+
+    MY9221_data[0].CMD =         LOUT_FAST_MODE
+                                 |  GRAYSCALE_16BIT
+                                 |  ORIGINAL_FREQ1
+                                 |  WAVE_APDM
+                                 |  GCLOCK_INTERNAL
+                                 |  WORK_LED
+                                 |  COUNTER_FREE
+                                 |  SHOT_REPEAT;
+
+    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[0].D[OUT2].DA = 0x0200;
+    MY9221_data[0].D[OUT2].DB = 0x0400;
+    MY9221_data[0].D[OUT2].DC = 0x0800;
+
+    MY9221_data[0].D[OUT3].DA = 0x2000;
+    MY9221_data[0].D[OUT3].DB = 0x4000;
+    MY9221_data[0].D[OUT3].DC = 0x8000;
+}
+
+void MY9221::test(void)
+{
+
+    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[0].D[OUT2].DA += 0x0200;
+    MY9221_data[0].D[OUT2].DB += 0x0400;
+    MY9221_data[0].D[OUT2].DC += 0x0800;
+
+    MY9221_data[0].D[OUT3].DA += 0x2000;
+    MY9221_data[0].D[OUT3].DB += 0x4000;
+    MY9221_data[0].D[OUT3].DC += 0x8000;
+
+
+    sendBrock(MY9221_data, 1);
+
+}