アプリケーションノート 4021

MAX6956プログラミングガイド

筆者: Walter Chen

要約: このインストラクションガイドは、LEDディスプレイドライバおよびI/OエキスパンダMAX6956のプログラミングに関する詳細情報を提供します。類似デバイス(MAX6957、MAX7300、およびMAX7301)についてのプログラミングのヒントについても説明します。

概要

LEDドライバおよびI/OエキスパンダMAX6956は、20個または28個(パッケージタイプに依存)のLED駆動ポートすべてに対して、外付けの電流制限抵抗を使用せずに、希望する定電流レベルの供給と維持を行うことができます。16通りの定電流レベル(1.5mA~24mA)をすべてのポートに同時に印加するか、または個々のポートに異なる値を選択することができます。MAX6956はLEDの輝度レベルを制御するだけでなく、高精度なポート間マッチングによって色相の一貫性も向上します。定電流LEDとしての機能に加えて、MAX6956では個々のポートを遷移検出機能付きの入力ポートとして使用することも、またシンク電流10mAおよびソース電流4.5mAのプッシュプル出力ポートとして使用することも可能です。

MAX6957はMAX6956に類似していますが、I²C対応インタフェースではなくSPI™対応インタフェースを備えています。MAX7300はMAX6956に似た汎用入出力(GPIO)ポートエキスパンダですが、定電流LED駆動機能を備えていません。MAX7301はMAX7300に似たGPIOポートエキスパンダですが、I²C対応インタフェースではなくSPI対応インタフェースを備えています。

図1に、MAX6956を使用して、電流制限抵抗の必要なしに10個の白色およびRGB LEDを駆動する、簡単なアプリケーション例を示します。

Figure 1. Application circuit for the MAX6956.
図1. MAX6956のアプリケーション回路

MAX6956のコンフィギュレーションレジスタ

MAX6956の詳細な動作は、その89個のレジスタに書き込むことによって制御します。データシートに記載されている4つのレジスタ(Global Current:全体電流、Configuration:設定、Transition Detection Mask:遷移検出マスク、およびDisplay Test:表示テスト)に加えて、MAX6956は他に3つのグループのレジスタを提供します。
  1. Port Configuration:ポート設定(0x09~0x0F)
    Port Configurationレジスタ内には、各ポートについて2つのビットが用意されています。これらのビットは、各ポートをLEDドライバ、出力ポート、またはプルアップ抵抗付き/なしの入力ポートとして定義するために使用します。28ポートに対応して7個のPort Configurationレジスタが存在します。
  2. Individual Current:個別電流(0x12~0x1F)
    Individual Currentレジスタ内には、各ポートについて4つのビットが用意されています。これらのビットは、個々のポートについて希望する定電流レベルを定義するために使用します。最小ステップは、ISET端子に接続された外付け抵抗によって設定される最大レベルの16分の1です。
  3. Port I/O Value:ポート入出力値(0x20~0x5F)
    Port I/O Valueレジスタは、各ポートについて29個あります(ポート31には2個のレジスタがあります)。21個のPort I/O Valueレジスタは、8個の異なるポートからなるグループについて同時にI/O値を定義するために使用することができます。残りのPort I/O Valueレジスタは、2、3、4、5、6、または7個の異なるポートからなるグループを同時に定義するために使用することができます。

MAX6956のI²Cコマンド

次に示すのは、起動時にすべてのポートを(39kΩの外付け抵抗に基づいて)最大定電流レベルである24mAの半分に設定するためのI²Cコマンドです。AD0とAD1の両端子がグランドに接続されているとき、MAX6956のI²Cデバイスアドレスは0x80になります。I2CWriteルーチンは、MAX6956の1つのレジスタに特定のバイトを書き込むか、またはレジスタアドレス自動インクリメント機能を利用することによって一連のレジスタに複数のバイトを書き込むためのコマンドを発行します。

I2CWrite(0x80, 0x02, 0x07);  // Set a half global constant current

I2CWrite(0x80, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);  // Set all ports to LED drive mode

I2CWrite(0x80, 0x04, 0x01); // Set the shutdown/run bit of the configuration register
基準チェックポイントとして、shutdown/runビットをセットするための書込みコマンドと等価なバイナリコードも示しておきます。
I2CWrite(0x80, 0x04, 0x01);

1 0 0 0 0 0 0 0  	0 0 0 0 0 1 0 0  	0 0 0 0 0 0 0 1  
次に示すのは、起動時に1つのポート(この例ではP4)を完全な定電流レベルに設定するためのI²Cコマンドです。
I2CWrite(0x80, 0x12, 0x07);  // Set a half port P4 constant current

I2CWrite(0x80, 0x09, 0xA8); // Set P4 to LED drive mode

I2CWrite(0x80, 0x04, 0x01); // Set the shutdown/run bit of the configuration register
起動時には、すべてのポートがプルアップ抵抗なしのロジック入力に設定されます。すべての起動時デフォルトでMAX6956を動作させるために必要なのは、次のI²Cコマンドだけです。
I2CWrite(0x80, 0x04, 0x01); // Set the shutdown/run bit of the configuration register

MAX6957のSPIコマンド

レジスタアドレスバイトとそれに続くデータバイトで構成された16ビットワードをSPIインタフェース経由で送信することによっても、MAX6957の任意のレジスタに対する読み書きを行うことが可能です。アドレスバイトの先頭ビットによって、書込みコマンド(0)か読込みコマンド(1)かが決まります。すべての16ビットワードを連続させて、ひとまとめに送信することが可能です。

次に示すのは、すべてのポートを最大定電流レベルである24mAの半分に設定するための、MAX6957のDIN入力端子へのデータバイトです。これらのコマンドはMAX6956用のものと似ていますが、デバイスアドレスを指定する必要がありません。SPIインタフェースの場合、アクティブローのCS入力端子をローにすることによって特定のデバイスを選択します。MAX6957には、レジスタアドレスの自動インクリメント機能はありません。
0x02, 0x07;  	// Set a half global constant current

0x09, 0x00;	// Set ports P4 through P7 to LED drive mode

0x0A, 0x00;	// Set ports P8 through P11 to LED drive mode

0x0B, 0x00;	// Set ports P12 through P15 to LED drive mode

0x0C, 0x00;	// Set ports P16 through P19 to LED drive mode

0x0D, 0x00;  	// Set ports P20 through P23 to LED drive mode

0x0E, 0x00;	// Set ports P24 through P27 to LED drive mode

0x0F, 0x00;  	// Set ports P28 through P31 to LED drive mode

0x04, 0x01; 	// Set the shutdown/run bit of the configuration register

MAX7300/MAX7301のコンフィギュレーションレジスタ

MAX7300およびMAX7301には、定電流LED駆動機能がありません。詳細な動作は、その73個のレジスタに書き込むことによって制御します。データシートに記載されているConfigurationレジスタとTransition Detection Maskレジスタに加えて、他に2つのグループのレジスタが存在します。
  1. Port Configuration:ポート設定(0x09~0x0F)
  2. Port I/O Value:ポート入出力値(0x20~0x5F)

MAX7300のI²Cコマンド

起動時には、すべてのポートがプルアップ抵抗なしのロジック入力に設定されます。次に示すのは、半数のポート(P14~P23)をロジックレベルハイの出力に設定した後、チップを初期シャットダウンから動作させるためのI²Cコマンドです。AD0とAD1の両端子がグランドに接続されているとき、MAX7300のI²Cデバイスアドレスは0x80になります。
I2CWrite(0x80, 0x0B, 0x5A, 0x55, 0x55);  	// Set P14 through P23 to output

I2CWrite(0x80, 0x4E, 0xFF);  			// Set P14 through P21 to logic high

I2CWrite(0x80, 0x56, 0x03);  			// Set P22 through P23 to logic high

I2CWrite(0x80, 0x04, 0x01); 			// Set the shutdown/run bit 

MAX7301のSPIコマンド

レジスタアドレスバイトとそれに続くデータバイトで構成された16ビットワードをSPIインタフェース経由で送信することによって、MAX7301の任意のレジスタに対する読み書きを行うことが可能です。アドレスバイトの先頭ビットによって、書込みコマンド(0)か読込みコマンド(1)かが決まります。すべての16ビットワードを連続させて、ひとまとめで送信することが可能です。

次に示すのは、半数のポート(P14~P23)をロジックレベルハイの出力に設定した後、チップを初期シャットダウンから動作させるための、MAX7301のDIN入力端子へのデータバイトです。これらのコマンドはMAX7300用のものと似ていますが、デバイスアドレスを指定する必要がありません。SPIインタフェースの場合、アクティブローのCS入力端子をローにすることによって特定のデバイスを選択します。MAX7300には、レジスタアドレスの自動インクリメント機能はありません。
0x0B, 0x5A; 		// Set P14 and P15 to output

0x0C, 0x55; 		// Set P16 through P19 to output

0x0D, 0x55;  		// Set P20 through P23 to output

0x4E, 0xFF;  		// Set P14 through P21 to logic high

0x56, 0x03;  		// Set P22 and P23 to logic high

0x04, 0x01; 		// Set the shutdown/run bit