24-bit Fm+ I2C-bus 100 mA 40 V LED driver

Dependencies:   mbed

Committer:
wataaki
Date:
Wed Feb 04 06:06:42 2015 +0000
Revision:
0:e573ba46ffc6
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wataaki 0:e573ba46ffc6 1 #include "mbed.h"
wataaki 0:e573ba46ffc6 2 #include "PCA9626B.h"
wataaki 0:e573ba46ffc6 3
wataaki 0:e573ba46ffc6 4 I2C i2c(p28,p27); // sda, scl
wataaki 0:e573ba46ffc6 5 Serial pc(USBTX, USBRX); // tx, rx
wataaki 0:e573ba46ffc6 6 //LM75B tmp(p28,p27);
wataaki 0:e573ba46ffc6 7 char cmd[32];
wataaki 0:e573ba46ffc6 8 int i;
wataaki 0:e573ba46ffc6 9
wataaki 0:e573ba46ffc6 10 void set_ch(char sel)
wataaki 0:e573ba46ffc6 11 { // PCA9541のサンプル
wataaki 0:e573ba46ffc6 12 // MST_0側の自分にスレーブ側の制御権を得る場合
wataaki 0:e573ba46ffc6 13 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg
wataaki 0:e573ba46ffc6 14 i2c.write( 0xe2, cmd, 1); // Cont Regを指定
wataaki 0:e573ba46ffc6 15 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み
wataaki 0:e573ba46ffc6 16 wait(0.1); // 0.1s待つ
wataaki 0:e573ba46ffc6 17 switch(cmd[0] & 0xf)
wataaki 0:e573ba46ffc6 18 {
wataaki 0:e573ba46ffc6 19 case 0: // bus off, has control
wataaki 0:e573ba46ffc6 20 case 1: // bus off, no control
wataaki 0:e573ba46ffc6 21 case 5: // bus on, no control
wataaki 0:e573ba46ffc6 22 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg
wataaki 0:e573ba46ffc6 23 cmd[1] = 4; // bus on, has control
wataaki 0:e573ba46ffc6 24 i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み
wataaki 0:e573ba46ffc6 25 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み
wataaki 0:e573ba46ffc6 26 break;
wataaki 0:e573ba46ffc6 27 case 2: // bus off, no control
wataaki 0:e573ba46ffc6 28 case 3: // bus off, has control
wataaki 0:e573ba46ffc6 29 case 6: // bus on, no control
wataaki 0:e573ba46ffc6 30 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg
wataaki 0:e573ba46ffc6 31 cmd[1] = 5; // bus on, has control
wataaki 0:e573ba46ffc6 32 i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み
wataaki 0:e573ba46ffc6 33 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み
wataaki 0:e573ba46ffc6 34 break;
wataaki 0:e573ba46ffc6 35 case 9: // bus on, no control
wataaki 0:e573ba46ffc6 36 case 0xc: // bus on, no control
wataaki 0:e573ba46ffc6 37 case 0xd: // bus off, no control
wataaki 0:e573ba46ffc6 38 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg
wataaki 0:e573ba46ffc6 39 cmd[1] = 0; // bus on, has control
wataaki 0:e573ba46ffc6 40 i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み
wataaki 0:e573ba46ffc6 41 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み
wataaki 0:e573ba46ffc6 42 break;
wataaki 0:e573ba46ffc6 43 case 0xa: // bus on, no control
wataaki 0:e573ba46ffc6 44 case 0xe: // bus off, no control
wataaki 0:e573ba46ffc6 45 case 0xf: // bus on, has control
wataaki 0:e573ba46ffc6 46 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg
wataaki 0:e573ba46ffc6 47 cmd[1] = 1; // bus on, has control
wataaki 0:e573ba46ffc6 48 i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み
wataaki 0:e573ba46ffc6 49 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み
wataaki 0:e573ba46ffc6 50 break;
wataaki 0:e573ba46ffc6 51 default:
wataaki 0:e573ba46ffc6 52 break;
wataaki 0:e573ba46ffc6 53 }
wataaki 0:e573ba46ffc6 54
wataaki 0:e573ba46ffc6 55 cmd[0] = sel; // PCA9546 Cont Reg sel channel enabled
wataaki 0:e573ba46ffc6 56 i2c.write( 0xe8, cmd, 1); // Send command string
wataaki 0:e573ba46ffc6 57 }
wataaki 0:e573ba46ffc6 58
wataaki 0:e573ba46ffc6 59 int main ()
wataaki 0:e573ba46ffc6 60 {
wataaki 0:e573ba46ffc6 61 i2c.frequency(100000);
wataaki 0:e573ba46ffc6 62 pc.printf("PCA9626B Sample Program\r\n");
wataaki 0:e573ba46ffc6 63
wataaki 0:e573ba46ffc6 64 set_ch(1); // PCA9626Bはch0に接続
wataaki 0:e573ba46ffc6 65
wataaki 0:e573ba46ffc6 66 // PCA9626B
wataaki 0:e573ba46ffc6 67 cmd[0] = MODE1; // MODE1
wataaki 0:e573ba46ffc6 68 cmd[1] = 0x0; // SLEEP = 0
wataaki 0:e573ba46ffc6 69 i2c.write(PCA9626B_ADDR, cmd, 2); // cmd[0]Regにcmd[1]を書込み
wataaki 0:e573ba46ffc6 70
wataaki 0:e573ba46ffc6 71 cmd[0] = LEDOUT0 + 0x80; // LEDOUT0, Auto incriment
wataaki 0:e573ba46ffc6 72 cmd[1] = 0xaa; // LED3,2,1,0 10= PWM
wataaki 0:e573ba46ffc6 73 cmd[2] = 0xaa; // LED7,6,5,4 10= PWM
wataaki 0:e573ba46ffc6 74 cmd[3] = 0xaa; // LED11,10,9,8 10= PWM
wataaki 0:e573ba46ffc6 75 cmd[4] = 0xaa; // LED15,14,13,12 10= PWM
wataaki 0:e573ba46ffc6 76 cmd[5] = 0xaa; // LED19,18,17,16 10= PWM
wataaki 0:e573ba46ffc6 77 cmd[6] = 0xaa; // LED23,22,21,20 10= PWM
wataaki 0:e573ba46ffc6 78 i2c.write( 0x8, cmd, 7); // cmd[0]Regにcmd[1-6]を書込み
wataaki 0:e573ba46ffc6 79
wataaki 0:e573ba46ffc6 80
wataaki 0:e573ba46ffc6 81 cmd[0] = PWM0 + 0x80; // PWM0, Auto incriment
wataaki 0:e573ba46ffc6 82 for(i=0; i<24; i++) cmd[i+1] = 0x80; // PWM = 50%
wataaki 0:e573ba46ffc6 83 i2c.write(PCA9626B_ADDR, cmd, 25); // cmd[0]Regにcmd[1-25]を書込み
wataaki 0:e573ba46ffc6 84
wataaki 0:e573ba46ffc6 85 while(1)
wataaki 0:e573ba46ffc6 86 {
wataaki 0:e573ba46ffc6 87 if (i>30) i = 7; // LTR_0_ON
wataaki 0:e573ba46ffc6 88 cmd[0] = 0x1c; // CHASE
wataaki 0:e573ba46ffc6 89 cmd[1] = i++; // LTR_x_ON
wataaki 0:e573ba46ffc6 90 i2c.write(PCA9626B_ADDR, cmd, 2); // cmd[0]Regにcmd[1]を書込み
wataaki 0:e573ba46ffc6 91 wait(0.5);
wataaki 0:e573ba46ffc6 92 }
wataaki 0:e573ba46ffc6 93 }
wataaki 0:e573ba46ffc6 94
wataaki 0:e573ba46ffc6 95