RGB LED Driver demo

Dependents:   NJU6063_HelloWorld

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?

UserRevisionLine numberNew 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 }