テキスト ボックス:  PCA9622

 

 

 

I2Cセンサーの種類

16bit  100mA/40V
LED driver

主な機能

100mA/40Vまでシンクできる出力ポートが16

8bitPWM信号で輝度調整可能、ポートをまとめてグループ化し一括制御可能

I2Cデバイス名

PCA9622

写真

 

I2C 8x8 LEDマトリックス基板(MFT版)--在庫限り

開発したデバイスの入手先 

製品名 品番・型番

スイッチサイエンス

I2C 8×8 LEDマトリックス基板(写真のLED実装基板の製品は生産終了)

デバイスのData-Sheet

http://www.nxp.com/documents/data_sheet/PCA9622.pdf

デバイスの主な仕様

 

電源電圧

I2Cアドレス

1ポート電流電圧

I2C通信速度

全出力時規格

2.3~5.5V 

A0~A6までの128通りをPINで設定可能

100A/ 40Vまでシンク可能

1Mbps

1.6A/ 40V

説明

一つの出力ポートで100A/40Vまでシンク可能なオープンドレイン出力が16ch有ります。Data-Sheetでは、LED制御とかバックライト制御との記述が有りますが、16chでこの容量は、一般のP.L.C(プログラマブル・コントローラ)のトランジスタ出力モジュールに匹敵する容量が有ります。外部にトランジスタアレー等を使用せず、P.L.CとのDIOでのやり取り、小型のアクチェータとの直接接続も可能と思います。

各ポートは8bitの分解能ですがPWM出力も可能です。

 

複数の出力を一つのレジスタで一発変更する為の機能(輝度調整目的?)も有り、電光掲示版等での利用を想定していると思います。

また、I2Cの通信ラインにはノイズフィルタを内臓し、I2C通信も1Mbpsまでサポートしています。

 

出力ステートコントロールレジスタ等、1Byte2bit毎に分割し、各出力ポートに割り当ててありますが、I2Cセンサードライバーでは各々2bit毎に個別にプロパティを準備していますので、bit位置をきにせず、プロパティセットのみで利用可能です。

 

通常のレジスタの読み書きは、register
address
を指定した後に処理を行いますが、I2Cセンサー・ドライバーを使用する場合は使用するプロパティにregister addressが紐づけして有る為レジスタアドレスの指定は不要でプロパティへ値の代入、読み出しのみで可能です。

 

 

 

 

開発・テスト風景

IMG_2429

各、列毎に輝度調整をしましたが、写真では余り解りませんね。

IMG_2430

 

I2Cデバイス内部のレジスタ構成(レジスタに対する設定値、レジスタの内容等のご質問はお答えできません)

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<![endif]>

 

 

I2Cセンサー・ドライバーで準備済みのプロパティ・メソッド

プロパティ

機能名

機能説明

MODE1

MODE1レジスタを取得または設定します。

MODE2

MODE2レジスタを取得または設定します。

PWM0

LED0の輝度制御値を取得または設定します。

PWM1

LED1の輝度制御値を取得または設定します。

PWM2

LED2の輝度制御値を取得または設定します。

PWM3

LED3の輝度制御値を取得または設定します。

PWM4

LED4の輝度制御値を取得または設定します。

PWM5

LED5の輝度制御値を取得または設定します。

PWM6

LED6の輝度制御値を取得または設定します。

PWM7

LED7の輝度制御値を取得または設定します。

PWM8

LED8の輝度制御値を取得または設定します。

PWM9

LED9の輝度制御値を取得または設定します。

PWM10

LED10の輝度制御値を取得または設定します。

 

機能名

機能説明

PWM11

LED11の輝度制御値を取得または設定します。

PWM12

LED12の輝度制御値を取得または設定します。

PWM13

LED13の輝度制御値を取得または設定します。

PWM14

LED14の輝度制御値を取得または設定します。

PWM15

LED15の輝度制御値を取得または設定します。

GRPPWM

グループ輝度制御レジスタを取得または設定します。

GRPFREQ

グループ周波数レジスタ(点滅周期)を取得または設定します。

LDR0

LED0の出力制御を取得または設定します。

LDR1

LED1の出力制御を取得または設定します。

LDR2

LED2の出力制御を取得または設定します。

LDR3

LED3の出力制御を取得または設定します。

LDR4

LED4の出力制御を取得または設定します。

LDR5

LED5の出力制御を取得または設定します。

LDR6

LED6の出力制御を取得または設定します。

LDR7

LED7の出力制御を取得または設定します。

LDR8

LED8の出力制御を取得または設定します。

LDR9

LED9の出力制御を取得または設定します。

LDR10

LED10の出力制御を取得または設定します。

LDR11

LED11の出力制御を取得または設定します。

LDR12

LED12の出力制御を取得または設定します。

LDR13

LED13の出力制御を取得または設定します。

LDR14

LED14の出力制御を取得または設定します。

LDR15

LED15の出力制御を取得または設定します。

SUBADR1

I2C-bus
subaddress 1
を取得または設定します。

SUBADR2

I2C-bus
subaddress 2
を取得または設定します。

SUBADR3

I2C-bus
subaddress 3
を取得または設定します。

ALLCALLADR

ALLCALL
I2C-bus address register
を取得または設定します。

 

メソッド

機能名

機能説明

Init

I2Cバスコントローラに指定された接続設定を使って非同期的に接続します。

Read

指定レジスタ読込

Write

指定レジスタ書込


定数

機能名

機能説明

定数値

REG_ADDR.MODE1

レジスタMODE1

0x00

REG_ADDR.MODE2

レジスタMODE2

0x01

REG_ADDR.PWM0

レジスタPWM0

0x02

REG_ADDR.GRPPWM

レジスタGRPPWM

0x12

REG_ADDR.LEDOUT0

レジスタLEDOUT0

0x14

REG_ADDR.SUBADR1

レジスタSUBADR1

0x18

REG_ADDR.ALLCALLADR

レジスタALLCALLADR

0x1B

 

 

I2Cセンサードライバーを使ったVBでのサンプルソース

Imports I2CLibrary

Public NotInheritable Class PCA9622Page

 Inherits Page

 Private Const PCA9622_Address As Byte = &H50

 Private PCA9622 As PCA9622 = New PCA9622()

 Public Sub New()

  InitializeComponent()

  Call Init()

 End Sub

 

 Private Async Sub Init()

  Await PCA9622.Init(PCA9622_Address)

 End Sub

 

 Private Sub btnLEDOn_Click(sender As Object, e As RoutedEventArgs)

  PCA9622.Read(PCA9622.REG_ADDR.MODE1)

  PCA9622.Read(PCA9622.REG_ADDR.MODE2)

  PCA9622.Read(PCA9622.REG_ADDR.PWM0)

  PCA9622.Read(PCA9622.REG_ADDR.LEDOUT0)

  PCA9622.MODE1 = &H0

  PCA9622.Write(PCA9622.REG_ADDR.MODE1)

   PCA9622.LDR0 = &H0

  PCA9622.LDR1 = &H0

  PCA9622.LDR2 = &H0

  PCA9622.LDR3 = &H2

  PCA9622.LDR4 = &H2

  PCA9622.LDR5 = &H0

  PCA9622.LDR6 = &H0

  PCA9622.LDR7 = &H0

  PCA9622.LDR8 = &H2

  PCA9622.LDR9 = &H2

  PCA9622.LDR10 = &H2

  PCA9622.LDR11 = &H2

  PCA9622.LDR12 = &H2

  PCA9622.LDR13 = &H2

  PCA9622.LDR14 = &H2

  PCA9622.LDR15 = &H2

  PCA9622.Write(PCA9622.REG_ADDR.LEDOUT0)

  PCA9622.PWM0 = &H0

  PCA9622.PWM1 = &H0

  PCA9622.PWM2 = &H0

  PCA9622.PWM3 = &HFF

  PCA9622.PWM4 = &HFF

  PCA9622.PWM5 = &H0

  PCA9622.PWM6 = &H0

  PCA9622.PWM7 = &H0

  PCA9622.PWM8 = &H2

  PCA9622.PWM9 = &H4

  PCA9622.PWM10 = &H8

  PCA9622.PWM11 = &H10

  PCA9622.PWM12 = &H20

  PCA9622.PWM13 = &H40

  PCA9622.PWM14 = &H80

  PCA9622.PWM15 = &HFF

  PCA9622.Write(PCA9622.REG_ADDR.PWM0)

 End Sub 

 

 Private Sub btnLEDOff_Click(sender As Object, e As  RoutedEventArgs)

  PCA9622.LDR0 = 0

  PCA9622.LDR1 = 0

  PCA9622.LDR2 = 0

  PCA9622.LDR3 = 0

  PCA9622.LDR4 = 0

  PCA9622.LDR5 = 0

  PCA9622.LDR6 = 0

  PCA9622.LDR7 = 0

  PCA9622.LDR8 = 0

  PCA9622.LDR9 = 0

  PCA9622.LDR10 = 0

  PCA9622.LDR11 = 0

  PCA9622.LDR12 = 0

  PCA9622.LDR13 = 0

  PCA9622.LDR14 = 0

  PCA9622.LDR15 = 0

  PCA9622.Write(PCA9622.REG_ADDR.LEDOUT0)

 End Sub

 

 Private Sub btnBack_Click(sender As Object, e As  RoutedEventArgs)

  RefreshTimer.Stop()

  ADC121C021.close()

  App.rootFrame.Navigate(GetType(MenuPage))

 End Sub

 

End Class