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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PCA9626B.cpp Source File

PCA9626B.cpp

00001 #include "mbed.h"
00002 #include "PCA9626B.h"
00003  
00004 I2C i2c(p28,p27);        // sda, scl
00005 Serial pc(USBTX, USBRX); // tx, rx
00006 //LM75B tmp(p28,p27);
00007     char cmd[32];
00008 int i;
00009  
00010 void set_ch(char sel)
00011 {    // PCA9541のサンプル
00012         // MST_0側の自分にスレーブ側の制御権を得る場合
00013     cmd[0] = 1;                     // PCA9541 コマンドコード Cont Reg
00014     i2c.write( 0xe2, cmd, 1);       // Cont Regを指定
00015     i2c.read( 0xe2, cmd, 1);        // Cont Regを読込み
00016     wait(0.1);                      // 0.1s待つ
00017     switch(cmd[0] & 0xf)
00018     {
00019     case 0:                         // bus off, has control
00020     case 1:                         // bus off, no control
00021     case 5:                         // bus on, no control
00022         cmd[0] = 1;                 // PCA9541 コマンドコード Cont Reg
00023         cmd[1] = 4;                 // bus on, has control
00024         i2c.write( 0xe2, cmd, 2);   // Cont Regにcmd[1]を書込み
00025         i2c.read( 0xe2, cmd, 1);    // Cont Regを読込み
00026         break;
00027     case 2:                         // bus off, no control
00028     case 3:                         // bus off, has control
00029     case 6:                         // bus on, no control
00030         cmd[0] = 1;                 // PCA9541 コマンドコード Cont Reg
00031         cmd[1] = 5;                 // bus on, has control
00032         i2c.write( 0xe2, cmd, 2);   // Cont Regにcmd[1]を書込み
00033         i2c.read( 0xe2, cmd, 1);    // Cont Regを読込み
00034         break;
00035     case 9:                         // bus on, no control
00036     case 0xc:                       // bus on, no control
00037     case 0xd:                       // bus off, no control
00038         cmd[0] = 1;                 // PCA9541 コマンドコード Cont Reg
00039         cmd[1] = 0;                 // bus on, has control
00040         i2c.write( 0xe2, cmd, 2);   // Cont Regにcmd[1]を書込み
00041         i2c.read( 0xe2, cmd, 1);    // Cont Regを読込み
00042         break;
00043     case 0xa:                       // bus on, no control
00044     case 0xe:                       // bus off, no control
00045     case 0xf:                       // bus on, has control
00046         cmd[0] = 1;                 // PCA9541 コマンドコード Cont Reg
00047         cmd[1] = 1;                 // bus on, has control
00048         i2c.write( 0xe2, cmd, 2);   // Cont Regにcmd[1]を書込み
00049         i2c.read( 0xe2, cmd, 1);    // Cont Regを読込み
00050         break;
00051     default:
00052         break;
00053     }
00054 
00055     cmd[0] = sel;                   // PCA9546 Cont Reg sel channel enabled
00056     i2c.write( 0xe8, cmd, 1);       // Send command string
00057 }
00058 
00059 int main ()
00060 {
00061    i2c.frequency(100000);
00062     pc.printf("PCA9626B Sample Program\r\n");
00063      
00064     set_ch(1);              // PCA9626Bはch0に接続
00065 
00066   // PCA9626B
00067   cmd[0] = MODE1;           // MODE1
00068   cmd[1] = 0x0;           // SLEEP = 0
00069   i2c.write(PCA9626B_ADDR, cmd, 2);   // cmd[0]Regにcmd[1]を書込み
00070 
00071   cmd[0] = LEDOUT0 + 0x80;   // LEDOUT0, Auto incriment
00072   cmd[1] = 0xaa;          // LED3,2,1,0 10= PWM
00073   cmd[2] = 0xaa;          // LED7,6,5,4 10= PWM
00074   cmd[3] = 0xaa;          // LED11,10,9,8 10= PWM
00075   cmd[4] = 0xaa;          // LED15,14,13,12 10= PWM
00076   cmd[5] = 0xaa;          // LED19,18,17,16 10= PWM
00077   cmd[6] = 0xaa;          // LED23,22,21,20 10= PWM
00078   i2c.write( 0x8, cmd, 7);   // cmd[0]Regにcmd[1-6]を書込み
00079 
00080 
00081   cmd[0] = PWM0 + 0x80;           // PWM0, Auto incriment
00082   for(i=0; i<24; i++)  cmd[i+1] = 0x80;   // PWM = 50%
00083   i2c.write(PCA9626B_ADDR, cmd, 25);   // cmd[0]Regにcmd[1-25]を書込み
00084 
00085   while(1)
00086   {
00087     if (i>30) i = 7;                    // LTR_0_ON
00088     cmd[0] = 0x1c;        // CHASE
00089     cmd[1] = i++;         // LTR_x_ON
00090     i2c.write(PCA9626B_ADDR, cmd, 2);   // cmd[0]Regにcmd[1]を書込み
00091     wait(0.5);
00092   }
00093 }
00094 
00095