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

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
wataaki
Date:
Wed Feb 04 06:06:42 2015 +0000
Commit message:
Initial version

Changed in this revision

PCA9626B.cpp Show annotated file Show diff for this revision Revisions of this file
PCA9626B.h Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r e573ba46ffc6 PCA9626B.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCA9626B.cpp	Wed Feb 04 06:06:42 2015 +0000
@@ -0,0 +1,95 @@
+#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);
+  }
+}
+
+
diff -r 000000000000 -r e573ba46ffc6 PCA9626B.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCA9626B.h	Wed Feb 04 06:06:42 2015 +0000
@@ -0,0 +1,41 @@
+#define PCA9626B_ADDR 0x8
+
+#define MODE1            0x00
+#define MODE2            0x01
+#define PWM0             0x02
+#define PWM1             0x03
+#define PWM2             0x04
+#define PWM3             0x05
+#define PWM4             0x06
+#define PWM5             0x07
+#define PWM6             0x08
+#define PWM7             0x09
+#define PWM8             0x0a
+#define PWM9             0x0b
+#define PWM10            0x0c
+#define PWM11            0x0d
+#define PWM12            0x0e
+#define PWM13            0x0f
+#define PWM14            0x10
+#define PWM15            0x11
+#define PWM16            0x12
+#define PWM17            0x13
+#define PWM18            0x14
+#define PWM19            0x15
+#define PWM20            0x16
+#define PWM21            0x17
+#define PWM22            0x18
+#define PWM23            0x19
+#define GRPPWM           0x1a
+#define GRPFREQ          0x1b
+#define CHASE            0x1c
+#define LEDOUT0          0x1d
+#define LEDOUT1          0x1e
+#define LEDOUT2          0x1f
+#define LEDOUT3          0x20
+#define LEDOUT4          0x21
+#define LEDOUT5          0x22
+#define SUBADR1          0x23
+#define SUBADR2          0x24
+#define SUBADR3          0x25
+#define ALLCALLADR       0x26
diff -r 000000000000 -r e573ba46ffc6 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Feb 04 06:06:42 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1
\ No newline at end of file