24-bit Fm+ I2C-bus 100 mA 40 V LED driver
Dependencies: mbed
PCA9626B.cpp
- Committer:
- wataaki
- Date:
- 2015-02-04
- Revision:
- 0:e573ba46ffc6
File content as of revision 0:e573ba46ffc6:
#include "mbed.h" #include "PCA9626B.h" I2C i2c(p28,p27); // sda, scl Serial pc(USBTX, USBRX); // tx, rx //LM75B tmp(p28,p27); char cmd[32]; int i; void set_ch(char sel) { // PCA9541のサンプル // MST_0側の自分にスレーブ側の制御権を得る場合 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg i2c.write( 0xe2, cmd, 1); // Cont Regを指定 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み wait(0.1); // 0.1s待つ switch(cmd[0] & 0xf) { case 0: // bus off, has control case 1: // bus off, no control case 5: // bus on, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 4; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 2: // bus off, no control case 3: // bus off, has control case 6: // bus on, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 5; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 9: // bus on, no control case 0xc: // bus on, no control case 0xd: // bus off, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 0; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 0xa: // bus on, no control case 0xe: // bus off, no control case 0xf: // bus on, has control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 1; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; default: break; } cmd[0] = sel; // PCA9546 Cont Reg sel channel enabled i2c.write( 0xe8, cmd, 1); // Send command string } int main () { i2c.frequency(100000); pc.printf("PCA9626B Sample Program\r\n"); set_ch(1); // PCA9626Bはch0に接続 // PCA9626B cmd[0] = MODE1; // MODE1 cmd[1] = 0x0; // SLEEP = 0 i2c.write(PCA9626B_ADDR, cmd, 2); // cmd[0]Regにcmd[1]を書込み cmd[0] = LEDOUT0 + 0x80; // LEDOUT0, Auto incriment cmd[1] = 0xaa; // LED3,2,1,0 10= PWM cmd[2] = 0xaa; // LED7,6,5,4 10= PWM cmd[3] = 0xaa; // LED11,10,9,8 10= PWM cmd[4] = 0xaa; // LED15,14,13,12 10= PWM cmd[5] = 0xaa; // LED19,18,17,16 10= PWM cmd[6] = 0xaa; // LED23,22,21,20 10= PWM i2c.write( 0x8, cmd, 7); // cmd[0]Regにcmd[1-6]を書込み cmd[0] = PWM0 + 0x80; // PWM0, Auto incriment for(i=0; i<24; i++) cmd[i+1] = 0x80; // PWM = 50% i2c.write(PCA9626B_ADDR, cmd, 25); // cmd[0]Regにcmd[1-25]を書込み while(1) { if (i>30) i = 7; // LTR_0_ON cmd[0] = 0x1c; // CHASE cmd[1] = i++; // LTR_x_ON i2c.write(PCA9626B_ADDR, cmd, 2); // cmd[0]Regにcmd[1]を書込み wait(0.5); } }