12-Channel LED Driver With Gray scale Adaptive Pulse Density Modulation Control IC Library. maker MY-Semi
Diff: MY9221.cpp
- 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); + +}