16-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:05:20 2015 +0000
Commit message:
Initial version

Changed in this revision

PCA9622.cpp Show annotated file Show diff for this revision Revisions of this file
PCA9622.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 099730f5f776 PCA9622.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCA9622.cpp	Wed Feb 04 06:05:20 2015 +0000
@@ -0,0 +1,88 @@
+#include "mbed.h"
+#include "PCA9622.h"
+ 
+I2C i2c(p28,p27);        // sda, scl
+Serial pc(USBTX, USBRX); // tx, rx
+char cmd[32];
+int i, j;
+ 
+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("PCA9622 Sample Program\r\n");
+     
+    set_ch(1);              // PCA9622はch0に接続
+
+  // PCA9622
+  cmd[0] = MODE1;
+  cmd[1] = 0x0;           // SLEEP = 0
+  i2c.write(PCA9622_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
+  i2c.write(PCA9622_ADDR, cmd, 5);   // cmd[0]Regにcmd[1-4]を書込み
+
+  while(1)
+  {
+    if (i>15) i = 0;
+    cmd[0] = PWM0 + 0x80;           // PWM0, Auto incriment
+    for(j=0; j<16; j++)  cmd[j+1] = 0x0;   // PWM = 0%
+    cmd[i+1] = 0xff;   // PWM = 99.6%
+    i2c.write(PCA9622_ADDR, cmd, 17);   // cmd[0]Regにcmd[1-16]を書込み
+    wait(0.5);
+    i++;
+  }
+}
+
diff -r 000000000000 -r 099730f5f776 PCA9622.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCA9622.h	Wed Feb 04 06:05:20 2015 +0000
@@ -0,0 +1,30 @@
+#define PCA9622_ADDR 0x80
+
+#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 GRPPWM           0x12
+#define GRPFREQ          0x13
+#define LEDOUT0          0x14
+#define LEDOUT1          0x15
+#define LEDOUT2          0x16
+#define LEDOUT3          0x17
+#define SUBADR1          0x18
+#define SUBADR2          0x19
+#define SUBADR3          0x1a
+#define ALLCALLADR       0x1b
diff -r 000000000000 -r 099730f5f776 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Feb 04 06:05:20 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1
\ No newline at end of file