RGB LED Driver demo
Dependents: NJU6063_HelloWorld
Diff: NJU6063.cpp
- Revision:
- 2:137675ac48ab
- Parent:
- 1:bbc915c814da
- Child:
- 3:f83202c2ae59
--- a/NJU6063.cpp Sat Jan 09 07:39:52 2016 +0000 +++ b/NJU6063.cpp Sun Jan 10 11:49:59 2016 +0000 @@ -3,25 +3,38 @@ NJU6063::NJU6063( PinName sda, PinName scl, PinName rst) : _i2c(sda, scl), _rst(rst) { + uint32_t i2cAddr = I2C_1; + //_i2c.frequency(400000); + _i2c_cr1 = (uint32_t *)i2cAddr; + _i2c_dr = (uint32_t *)(i2cAddr + 0x10); + _i2c_sr1 = (uint32_t *)(i2cAddr + 0x14); + _i2c_sr2 = (uint32_t *)(i2cAddr + 0x18); } void NJU6063::reset(void) { + //_i2c_type->CR1 &= CR1_ACK_Reset; + //SetCR1(0x200); wait_ms(100); _rst = 0; wait_ms(100); _rst = 1; } -void NJU6063::set_multi_device(uint8_t n) +uint8_t NJU6063::set_multi_device(uint8_t n) { char data[3]; data[0] = 0x00; // Initial chip addres data[1] = 0x0d; // multi device address for (uint8_t i=1; i<=n; i++) { data[2] = i; - _i2c.write(NJU6063_SLAVE, data, 3); + ack= _i2c.write(NJU6063_SLAVE, data, 3); + wait_us(500*3); + if (ack) { + n = i-1; + } } + return(n); } void NJU6063::init(uint8_t chip_addr, uint8_t d) { @@ -29,7 +42,8 @@ data[0] = chip_addr; data[1] = 0x00; data[2] = d; - _i2c.write(NJU6063_SLAVE, data, 3); + ack = _i2c.write(NJU6063_SLAVE, data, 3); + wait_us(500*3); } void NJU6063::set_iled(uint8_t chip_addr, uint8_t d1, uint8_t d2, uint8_t d3) @@ -38,7 +52,8 @@ data[0] = chip_addr; data[1] = 0x01; data[2] = (0x03&d1) | (0x03&d2)<<2 | (0x03&d3) <<4; - _i2c.write(NJU6063_SLAVE, data, 3); + ack = _i2c.write(NJU6063_SLAVE, data, 3); + wait_us(500*3); } void NJU6063::set_pwm(uint8_t chip_addr, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t loop, uint8_t son) @@ -51,7 +66,8 @@ data[4] = d3; data[5] = loop; data[6] = son; - _i2c.write(NJU6063_SLAVE, data, 7); + ack = _i2c.write(NJU6063_SLAVE, data, 7); + wait_us(500*7); } void NJU6063::dim_start(uint8_t chip_addr) { @@ -59,7 +75,8 @@ data[0] = chip_addr; data[1] = 0x07; // reg addres data[2] = 0x01; // start - _i2c.write(NJU6063_SLAVE, data, 3); + ack = _i2c.write(NJU6063_SLAVE, data, 3); + wait_us(500*3); } void NJU6063::dim_stop(uint8_t chip_addr) @@ -68,17 +85,24 @@ data[0] = chip_addr; data[1] = 0x07; // reg addres data[2] = 0x02; // stop - _i2c.write(NJU6063_SLAVE, data, 3); + ack = _i2c.write(NJU6063_SLAVE, data, 3); + wait_us(500*3); } void NJU6063::check_dim(void) { - uint8_t ACK; + uint8_t timeout = 0x0f; char data[3]; data[0] = 0xff; data[1] = 0x0b; data[2] = 0x00; + /* do { - ACK = _i2c.write(NJU6063_SLAVE, data, 3); - } while(!ACK); + ack = _i2c.write(NJU6063_SLAVE, data, 3); + wait_us(200*3); + timeout--; + if (timeout==0) ACK = 1; + } while(!ack); + */ + wait_ms(500); }