RGB LED Driver demo
Dependents: NJU6063_HelloWorld
NJU6063.cpp@2:137675ac48ab, 2016-01-10 (annotated)
- Committer:
- og
- Date:
- Sun Jan 10 11:49:59 2016 +0000
- Revision:
- 2:137675ac48ab
- Parent:
- 1:bbc915c814da
- Child:
- 3:f83202c2ae59
F401 test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
og | 0:0283db13b7f1 | 1 | #include "NJU6063.h" |
og | 0:0283db13b7f1 | 2 | |
og | 0:0283db13b7f1 | 3 | NJU6063::NJU6063( PinName sda, PinName scl, PinName rst) |
og | 0:0283db13b7f1 | 4 | : _i2c(sda, scl), _rst(rst) |
og | 0:0283db13b7f1 | 5 | { |
og | 2:137675ac48ab | 6 | uint32_t i2cAddr = I2C_1; |
og | 2:137675ac48ab | 7 | //_i2c.frequency(400000); |
og | 2:137675ac48ab | 8 | _i2c_cr1 = (uint32_t *)i2cAddr; |
og | 2:137675ac48ab | 9 | _i2c_dr = (uint32_t *)(i2cAddr + 0x10); |
og | 2:137675ac48ab | 10 | _i2c_sr1 = (uint32_t *)(i2cAddr + 0x14); |
og | 2:137675ac48ab | 11 | _i2c_sr2 = (uint32_t *)(i2cAddr + 0x18); |
og | 0:0283db13b7f1 | 12 | } |
og | 0:0283db13b7f1 | 13 | |
og | 0:0283db13b7f1 | 14 | void NJU6063::reset(void) |
og | 0:0283db13b7f1 | 15 | { |
og | 2:137675ac48ab | 16 | //_i2c_type->CR1 &= CR1_ACK_Reset; |
og | 2:137675ac48ab | 17 | //SetCR1(0x200); |
og | 0:0283db13b7f1 | 18 | wait_ms(100); |
og | 0:0283db13b7f1 | 19 | _rst = 0; |
og | 0:0283db13b7f1 | 20 | wait_ms(100); |
og | 0:0283db13b7f1 | 21 | _rst = 1; |
og | 0:0283db13b7f1 | 22 | } |
og | 0:0283db13b7f1 | 23 | |
og | 2:137675ac48ab | 24 | uint8_t NJU6063::set_multi_device(uint8_t n) |
og | 0:0283db13b7f1 | 25 | { |
og | 0:0283db13b7f1 | 26 | char data[3]; |
og | 0:0283db13b7f1 | 27 | data[0] = 0x00; // Initial chip addres |
og | 0:0283db13b7f1 | 28 | data[1] = 0x0d; // multi device address |
og | 0:0283db13b7f1 | 29 | for (uint8_t i=1; i<=n; i++) { |
og | 0:0283db13b7f1 | 30 | data[2] = i; |
og | 2:137675ac48ab | 31 | ack= _i2c.write(NJU6063_SLAVE, data, 3); |
og | 2:137675ac48ab | 32 | wait_us(500*3); |
og | 2:137675ac48ab | 33 | if (ack) { |
og | 2:137675ac48ab | 34 | n = i-1; |
og | 2:137675ac48ab | 35 | } |
og | 0:0283db13b7f1 | 36 | } |
og | 2:137675ac48ab | 37 | return(n); |
og | 0:0283db13b7f1 | 38 | } |
og | 0:0283db13b7f1 | 39 | void NJU6063::init(uint8_t chip_addr, uint8_t d) |
og | 0:0283db13b7f1 | 40 | { |
og | 0:0283db13b7f1 | 41 | char data[3]; |
og | 0:0283db13b7f1 | 42 | data[0] = chip_addr; |
og | 0:0283db13b7f1 | 43 | data[1] = 0x00; |
og | 0:0283db13b7f1 | 44 | data[2] = d; |
og | 2:137675ac48ab | 45 | ack = _i2c.write(NJU6063_SLAVE, data, 3); |
og | 2:137675ac48ab | 46 | wait_us(500*3); |
og | 0:0283db13b7f1 | 47 | } |
og | 0:0283db13b7f1 | 48 | |
og | 0:0283db13b7f1 | 49 | void NJU6063::set_iled(uint8_t chip_addr, uint8_t d1, uint8_t d2, uint8_t d3) |
og | 0:0283db13b7f1 | 50 | { |
og | 0:0283db13b7f1 | 51 | char data[3]; |
og | 0:0283db13b7f1 | 52 | data[0] = chip_addr; |
og | 0:0283db13b7f1 | 53 | data[1] = 0x01; |
og | 0:0283db13b7f1 | 54 | data[2] = (0x03&d1) | (0x03&d2)<<2 | (0x03&d3) <<4; |
og | 2:137675ac48ab | 55 | ack = _i2c.write(NJU6063_SLAVE, data, 3); |
og | 2:137675ac48ab | 56 | wait_us(500*3); |
og | 0:0283db13b7f1 | 57 | } |
og | 0:0283db13b7f1 | 58 | |
og | 0:0283db13b7f1 | 59 | void NJU6063::set_pwm(uint8_t chip_addr, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t loop, uint8_t son) |
og | 0:0283db13b7f1 | 60 | { |
og | 0:0283db13b7f1 | 61 | char data[7]; |
og | 0:0283db13b7f1 | 62 | data[0] = chip_addr; |
og | 0:0283db13b7f1 | 63 | data[1] = 0x02; |
og | 0:0283db13b7f1 | 64 | data[2] = d1; |
og | 0:0283db13b7f1 | 65 | data[3] = d2; |
og | 0:0283db13b7f1 | 66 | data[4] = d3; |
og | 0:0283db13b7f1 | 67 | data[5] = loop; |
og | 0:0283db13b7f1 | 68 | data[6] = son; |
og | 2:137675ac48ab | 69 | ack = _i2c.write(NJU6063_SLAVE, data, 7); |
og | 2:137675ac48ab | 70 | wait_us(500*7); |
og | 0:0283db13b7f1 | 71 | } |
og | 0:0283db13b7f1 | 72 | void NJU6063::dim_start(uint8_t chip_addr) |
og | 0:0283db13b7f1 | 73 | { |
og | 0:0283db13b7f1 | 74 | char data[3]; |
og | 0:0283db13b7f1 | 75 | data[0] = chip_addr; |
og | 0:0283db13b7f1 | 76 | data[1] = 0x07; // reg addres |
og | 0:0283db13b7f1 | 77 | data[2] = 0x01; // start |
og | 2:137675ac48ab | 78 | ack = _i2c.write(NJU6063_SLAVE, data, 3); |
og | 2:137675ac48ab | 79 | wait_us(500*3); |
og | 0:0283db13b7f1 | 80 | } |
og | 0:0283db13b7f1 | 81 | |
og | 1:bbc915c814da | 82 | void NJU6063::dim_stop(uint8_t chip_addr) |
og | 1:bbc915c814da | 83 | { |
og | 1:bbc915c814da | 84 | char data[3]; |
og | 1:bbc915c814da | 85 | data[0] = chip_addr; |
og | 1:bbc915c814da | 86 | data[1] = 0x07; // reg addres |
og | 1:bbc915c814da | 87 | data[2] = 0x02; // stop |
og | 2:137675ac48ab | 88 | ack = _i2c.write(NJU6063_SLAVE, data, 3); |
og | 2:137675ac48ab | 89 | wait_us(500*3); |
og | 1:bbc915c814da | 90 | } |
og | 1:bbc915c814da | 91 | |
og | 1:bbc915c814da | 92 | void NJU6063::check_dim(void) |
og | 0:0283db13b7f1 | 93 | { |
og | 2:137675ac48ab | 94 | uint8_t timeout = 0x0f; |
og | 0:0283db13b7f1 | 95 | char data[3]; |
og | 0:0283db13b7f1 | 96 | data[0] = 0xff; |
og | 0:0283db13b7f1 | 97 | data[1] = 0x0b; |
og | 0:0283db13b7f1 | 98 | data[2] = 0x00; |
og | 2:137675ac48ab | 99 | /* |
og | 0:0283db13b7f1 | 100 | do { |
og | 2:137675ac48ab | 101 | ack = _i2c.write(NJU6063_SLAVE, data, 3); |
og | 2:137675ac48ab | 102 | wait_us(200*3); |
og | 2:137675ac48ab | 103 | timeout--; |
og | 2:137675ac48ab | 104 | if (timeout==0) ACK = 1; |
og | 2:137675ac48ab | 105 | } while(!ack); |
og | 2:137675ac48ab | 106 | */ |
og | 2:137675ac48ab | 107 | wait_ms(500); |
og | 0:0283db13b7f1 | 108 | } |