スイッチサイエンスさんから出ているLEDモジュールの使い方のメモです。
PCA9624PW 8ch I2C 電圧スイッチ型LEDコントローラ ピッチ変換済みモジュール
PCA9955BTW I2C 16ch 電流源型LEDドライバ基板
PCA9956BTW I2C 24ch 電流源型LEDドライバ基板
上記のモジュールはそれぞれ NXP社の以下のチップを使用しているようです。
NXP社 PCA9624PW
NXP社 PCA9955BTW
NXP社 PCA9956BTW
各チップはPWMによって各チャンネル独立して明るさの変更や周波数を制御することができます。
今回は、PCA9624PWを使用してみます。
参考リンク
PCA9624PW データシート
スイッチサイエンスさんがArduino用のスケッチを提供してくれていますので動作確認の参考にします。
http://trac.switch-science.com/wiki/PCA9624PW
#PCA9624PW 使い方 基本事項
- デバイスIDの確認
デフォルトは0xC0(1100 000X)です。このアドレスはソルダージャンパー [A0 to A6]により変更可能です。
- 接続PINの確認
PCA9624PWのピン構成はシンプルに以下のようになっていますね。
アウトプット制御 [OE]がプルアップされているので、ここをGNDに接続する点は注意です。
- 電源 [VDD]
以下のコントロールレジスタによってレジスタを指定してデータを書きこみします。
D0 to D4でレジスタを指定、その後にデータを入力します。
レジスタ一覧は以下
以下、動作別にメモします。
#LEDのON/OFF 制御
まずは、単純にLED0 to LED7 のON/OFFする方法です。
コマンドは以下です。
- モード設定
0x0000
- LEDの点灯
0x0C55
0x0D55
- LEDの消灯
0x0C00
0x0D00
<コマンド解説>
- モード設定
MODE1のレジスタアドレスは 0x00
cmd[0] = MODE1;
cmd[1] = 0x00;
- LEDの点灯
以下のLED0(0x0C), LED1(0x0D)レジスタで制御します。
以下の設定の00と01で制御します。
00 LEDドライバーOFF
01 最大点灯でON
10 PWMによる光量調整ON
11 PWMによる光量調整ONとgroup dimming/blinking コントロールON
全点灯するには
cmd[0] = LEDOUT0
cmd[1] = 0x55; //LED 3, 2, 1, 0
cmd[0] = LEDOUT1
cmd[1] = 0x55; //LED 7, 6, 5, 4
全消灯するには
cmd[0] = LEDOUT0
cmd[1] = 0x00; //LED 3, 2, 1, 0
cmd[0] = LEDOUT1
cmd[1] = 0x00; //LED 7, 6, 5, 4
#LEDのPWM 制御
ここではPWMで明るさを調整します。
ON/OFFとの違いは各LEDポートの設定をPWM制御ONとして、PWMのレジスタで明るさを制御するところです。
コマンドは以下
- モード設定
0x0000
- LEDポートの設定
0x0CAA
0x0DAA
- LEDのPWM制御
最大で全点灯
0x82ffffffffffffffff
中くらいで全点灯
0x82f0f0f0f0f0f0f0f0
全消灯
0x820000000000000000
<コマンド解説>
- LEDポートの設定
LEDOUT0、LEDOUT1を以下に設定します。
10 PWMによる光量調整ON
cmd[0] = LEDOUT0
cmd[1] = 0xAA; //LED 3, 2, 1, 0
cmd[0] = LEDOUT1
cmd[1] = 0xAA; //LED 7, 6, 5, 4
- LEDのPWM制御
PWM0(0x02)からPWM7(0x09)のレジスタに0から256のステップで値を指定します。
ここで、レジスタのPWM0からPWM7すべてを順番に指定するのは大変なので、コントロールレジスタのAutoIncrement Flagを使用します。これを指定するとレジスタの値を自動でインクリメントして次のデータを書き込みしてもらえます。
全点灯
cmd[0] = PWM0 | 0x80; //PWM0から連続書き込み(0x80の指定)
cmd[1] = 0xFF; //LED 0
cmd[2] = 0xFF; //LED 1
cmd[3] = 0xFF; //LED 2
cmd[4] = 0xFF; //LED 3
cmd[5] = 0xFF; //LED 4
cmd[6] = 0xFF; //LED 5
cmd[7] = 0xFF; //LED 6
cmd[8] = 0xFF; //LED 7
あとはPWM値を変えると明るさを制御できます。
#LEDのブリンク制御
LEDをブリンクさせます。
ON/OFFとの違いは各LEDポートの設定をPWM制御+ブリンクONとして、GRPPWM(0x0a)とGRPFREQ(0x0b)レジスタで点灯時の明るさ、ブリンク周期を制御するところです。
コマンドは以下
- モード設定
0x0125
- LEDポートの設定
0x8CFFFF
- LEDのブリンク制御
デューティサイクルを指定
0x0a10
ブリンク周期を指定
0x0b10
<コマンド解説>
cmd[0] = LEDOUT0| 0x80;
cmd[1] = 0xFF; //LED 3, 2, 1, 0
cmd[2] = 0xFF; //LED 7, 6, 5, 4