LoginSignup
4

More than 5 years have passed since last update.

PCA9624PW I2C LEDモジュール

Last updated at Posted at 2017-04-19

スイッチサイエンスさんから出ている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]
  • グランド [Vss]
  • I2C 制御 [SCL/SDA]
  • アウトプット制御 [OE]
  • アドレス設定のピン[A0 to A6]
  • LED出力 [LED0 to LED7] LED8_1.png
  • PCA9624PWの制御

以下のコントロールレジスタによってレジスタを指定してデータを書きこみします。
LED_2.png
D0 to D4でレジスタを指定、その後にデータを入力します。
レジスタ一覧は以下
LED_3.png

以下、動作別にメモします。

LEDのON/OFF 制御

まずは、単純にLED0 to LED7 のON/OFFする方法です。
コマンドは以下です。
1. モード設定
0x0000 
2. LEDの点灯
0x0C55
0x0D55
3. LEDの消灯
0x0C00
0x0D00

<コマンド解説>

  • モード設定 MODE1のレジスタアドレスは 0x00 cmd[0] = MODE1; cmd[1] = 0x00;

LED_4.png

  • LEDの点灯 以下のLED0(0x0C), LED1(0x0D)レジスタで制御します。

LED_1.png

以下の設定の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のレジスタで明るさを制御するところです。
コマンドは以下
1. モード設定
0x0000 
2. LEDポートの設定
0x0CAA
0x0DAA
3. 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)レジスタで点灯時の明るさ、ブリンク周期を制御するところです。
コマンドは以下

  1. モード設定

    0x0125 

  2. LEDポートの設定

    0x8CFFFF

  3. LEDのブリンク制御

    デューティサイクルを指定
    0x0a10
    ブリンク周期を指定
    0x0b10

<コマンド解説>

  • LEDモードの設定
    CP2112A_ソフトウェア6.png

  • LEDポートの設定
    LEDOUT0、LEDOUT1を以下に設定します。
    11 PWMによる光量調整ONとgroup dimming/blinking コントロールON

cmd[0] = LEDOUT0| 0x80;
cmd[1] = 0xFF; //LED 3, 2, 1, 0
cmd[2] = 0xFF; //LED 7, 6, 5, 4

  • デューティの設定
    CP2112A_ソフトウェア7.png
    ここで指定した値が点灯時の明るさに影響します。
    点灯時の明るさは、ここで指定した値とPWM制御で指定した値で決まります。
    詳細はこのあたりです↓
    CP2112A_ソフトウェア9.png

  • 周期の設定
    CP2112A_ソフトウェア8.png
    数式を参考にして決定する。
    例えば1秒周期にしたければ、23(0x17)を指定する。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4