Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: NJU6063_HelloWorld
Diff: NJU6063.cpp
- Revision:
- 2:137675ac48ab
- Parent:
- 1:bbc915c814da
- Child:
- 3:f83202c2ae59
diff -r bbc915c814da -r 137675ac48ab NJU6063.cpp
--- 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);
}