3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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 

  1. LEDポートの設定

0x8CFFFF

  1. 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)を指定する。

3
4
0

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
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?