개요: 이 애플리케이션 노트에서는 대형 LED 디스플레이 또는 도트 매트릭스 요소를 지원하기 위해 다중 MAX696x 8 x 8 매트릭스 LED 드라이버를 배치하고 프로그래밍하는 방법에 대해 자세히 설명한다. 이 드라이버 제품군은 최대 256개의 IC를 데이지 체인 (daisy-chained) 방식으로 연결하여 대형 매트릭스 디스플레이를 구동, 제어 및 프로그래밍할 수 있다. 또한 이 애플리케이션 노트는 여러 장치 간의 차이와 함께 다중 플레인, 다중 행, 다중 열 사용을 위해 이들 드라이버를 이용하는 방법에 대해 설명한다.
소자 개요
MAX6960 LED 드라이버는 외부 부품을 사용하지 않으면서 다중화된 8행 (row) 및 16열 (column) 포트를 통해 2개의 단일 컬러, 8 x 8 도트 매트릭스 디지트를 구동한다. 단일, 오픈 드레인, 행 포트는 각각 최대 40mA의 일정한 소싱 전류로 모든 16열 포트로부터 전류를 싱킹할 수 있다. 이들 8행 포트는 시간적으로 다중화되므로 주어진 시간에 하나의 행 포트만 전류 싱킹을 위해 활성화된다. 따라서 각 열 포트를 통과하는 평균 전류는 5mA이다.
MAX6960은 또한 단일 2컬러(적색, 녹색), 8 x 8 도트 매트릭스 디지트를 구동할 수 있다. 각각의 도트 매트릭스 요소는 개별적으로 켜고 끄거나 4가지 (오프 포함) 휘도 레벨을 갖는다. 모든 디지트의 조명 휘도는 256 단계로 PWM 제어할 수 있다. 또한 최대 256개 MAX6960 소자를 데이지 체인 방식으로 연결하여 대형 제어 유닛을 형성할 수 있으며, 이들 유닛의 디스플레이 메모리는 호스트 컨트롤러에 의해 DIN, DOUT, CLK, 액티브 로우 CS로 구성되는 4-wire 직렬 인터페이스를 통해 어드레스싱할 수 있다. 또 다른 3-wire 인터페이스는 모든 데이지 체인 칩 사이에서 사용되는 ADDCLK, ADDIN, ADDOUT으로 구성되므로 호스트 컨트롤러의 개입 없이 인터커넥션을 자체 구성할 수 있다.
이 LED 드라이버 제품군의 다른 제품군들은 MAX6960과 비슷하다. 그러나 MAX6961은 도트 매트릭스 요소를 켜고 끄는 기능으로만 제한된다. MAX6962는 단일 컬러 디지트만 구동할 수 있다. 마지막으로 MAX6963은 도트 매트릭스 요소를 켜고 끄며 단일 컬러 디지트만 구동할 수 있다.
애플리케이션 예
그림 1은 2개의 MAX6960을 사용하여 4개의 단일 컬러 디지트를 구동하는 간단한 애플리케이션을 보여준다. LDM-24288NI는 Lumex®의 8 x 8 녹색, 도트 매트릭스 LED이다. 4개 디지트(D1, D2, D3, D4)는 왼쪽에서 오른쪽으로 배치되어 8행 및 32열의 디스플레이를 형성한다. U1의 RISET0 및 RISET1과 U2의 RISET0 및 RISET1이 모두 접지되기 때문에 열의 전류 레벨은 모두 고정 40mA로 설정된다.
U1 및 U2의 4-wire 인터페이스는 병렬로 연결되며 DIN 및 DOUT를 통해 데이지 체인 연결되지 않는다. 파워 업 후 고유 소자 어드레스들이 3-wire 인터페이스를 통해 구성되기 때문에 단 하나의 칩만 개별 칩 명령에 선택된다. 글로벌 명령을 동시에 MAX6960에 인가할 수 있는데, 이는 2개 이상의 MAX6960을 함께 연결할 때 해당된다. 4-wire 인터페이스는 모두 병렬로 연결된다.
각 MAX6960은 3-wire 인터페이스를 가지며 모든 MAX6960은 이 3-wire 인터페이스를 통해 데이지 체인 연결된다. 보통 하나의 MAX6960이 마스터로 선택된다. 마스터는 0의 소자 어드레스를 가지며 나머지 MAX6960을 위한 클록을 발생시킨다. 모든 MAX6960의 ADDCLK 핀은 함께 연결되고 마스터의 ADDIN 핀만 V+로 연결된다. 나머지 MAX6960의 ADDIN 핀은 이전 소자의 ADDOUT 핀에 연결되며, 이 소자의 어드레스는 자체 어드레스보다 한 카운트 적다. 최종 소자의 ADDOUT 핀은 개방 상태로 있다.
그림 1. 다중 MAX6960 소자가 4개의 단일 컬러 디지트를 구동한다.
파워 업 시 모든 MAX6960의 드라이버 어드레스 레지스터 0x00은 모두 제로로 초기화되며 ADDOUT 핀은 로직 로우로 설정된다. 마스터 MAX6960은 소자의 ADDIN 핀이 클록 신호의 존재 없이 로직 하이이기 때문에 소자의 상태를 검출한다. 다음으로 마스터는 클록 신호를 발생시키고 ADDOUT를 로직 하이로 구동한다. 이후의 각 MAX6960은 ADDIN이 로직 하이가 되기 전에 클록 시간을 카운트하여 드라이버 어드레스를 설정한 다음 ADDOUT를 로직 하이로 구동한다. 이와 같이 모든 MAX6960의 드라이버 어드레스 레지스터는 256개 ADDCLK 클록 사이클로 초기화된다.
디스플레이 메모리 어드레스 구성
각 MAX6960은 64바이트 디스플레이 메모리를 가지며, 이들 메모리는 2개 또는 4개의 휘도 플레인으로 나눌 수 있다. 특정 시간에 이들 포트를 구동하는 데 단 하나의 플레인만 선택된다. 사용자가 하나의 플레인으로 LED를 구동하면서 다른 것을 업데이트할 수 있는 다중 플레인도 사용할 수 있다. 또한 다중 플레인을 통한 스위칭이 가능한 애니메이션 옵션이 있다.
4플레인을 사용할 경우 각각의 플레인은 픽셀당 1비트에서 16열 x 8행 픽셀에 대해 16바이트 또는 128비트를 갖는다. 2플레인의 경우에서도 각 플레인은 픽셀당 2비트에서 16열 x 8행에 대해 32바이트 또는 256비트를 갖는다. 단일 컬러 디지트는 8열 및 8행을 가지며 2컬러 디지트는 16열 및 8행을 갖는다. 하나의 플레인은 각각 단일 컬러의 경우 2디지트, 2컬러의 경우 1디지트를 커버할 수 있다.
디스플레이 메모리는 한 번에 8비트씩 액세스된다. 픽셀당 1비트의 경우 디스플레이 메모리가 쓰여질 때 첫 번째 8비트는 처음 열에, 두 번째 8비트는 두 번째 열에 쓰여지는 식으로 수행된다. 픽셀당 1비트를 갖는 8 x 8 픽셀의 디지트는 8바이트로 쓰여진다. 이것은 첫 번째 디지트의 첫 번째 열의 어드레스는 0이고, 첫 번째 디지트의 두 번째 열의 어드레스는 1, 두 번째 디지트의 첫 번째 열의 어드레스는 8이 되는 식으로 수행된다는 것을 의미한다. 다중 드라이버를 사용할 경우 모든 디스플레이 메모리는 결합되고 디스플레이 메모리 어드레스는 다음과 같은 방식으로 결정된다.
메모리 어드레스 = (드라이버 번호 - 1) × 16 + (디지트 번호 - 1) × 8 + (열 번호 - 1)
픽셀당 2비트의 경우 8비트 디스플레이 메모리 액세스는 half-column만 업데이트한다. 앞에서 설명했듯이 드라이버 번호는 파워 업 후 3-wire 인터페이스를 통해 자동으로 구성되고 레지스터 0x00에 저장된다. 다음으로 14비트를 사용하여 결합된 디스플레이 메모리에서 1바이트를 식별한다. 첫 번째 2비트는 플레인을 식별하고 나머지 12비트는 픽셀당 1비트에 대해 256개 드라이버 중에서 2048개 열 중 하나를 찾는 데 사용된다. 첫 번째 비트는 플레인을 식별하고 나머지 13비트는 픽셀당 2비트에 대해 256개 드라이버 중에서 4096개 half-column 중 하나를 찾는 데 사용된다.
MAX6960은 4-wire 인터페이스를 통해 8, 16 또는 24비트의 전송을 받아들인다. 액티브 로우 CS의 하강 및 이후의 상승 에지 간의 비트 번호를 정확히 포함하지 않는 모든 전송은 무시된다.
레지스터에 액세스하는 간접 방법
8비트 전송의 간접 방법이 사용될 때 디스플레이 메모리 어드레스는 필요하지 않다. 각 MAX6960에는 2개의 글로벌 드라이버, 간접 어드레스 레지스터(0x09 및 0x0A)가 있다. 이들 레지스터는 각각 동일한 글로벌 간접 디스플레이 메모리 어드레스를 추적한다. 파워 업 시 이들 레지스터는 모두 어드레스 0으로 시작한다. 각각의 8비트 간접 디스플레이 메모리 액세스 후 모든 MAX6960의 레지스터는 1씩 증가한다. 간접 디스플레이 메모리 액세스 동안 각 MAX6960은 이 2개 레지스터의 어드레스를 자체 드라이버 어드레스와 비교하여 디스플레이 메모리를 업데이트할 필요가 있는지 결정한다.
사용자는 24비트 전송을 사용하여 결합된 디스플레이 메모리의 특정 바이트에 액세스할 수 있다. 이들 24비트 중에서 첫 번째 비트는 그 비트가 쓰기 (0) 또는 읽기 (1) 동작인지를 나타내고 두 번째 비트는 아무 의미가 없으므로 무시할 수 있다. 다음 14비트는 결합된 디스플레이 메모리의 1바이트를 식별하는 데 사용되며 마지막 8비트는 데이터 바이트이다.
16비트 전송은 MAX6960의 16개 레지스터에 액세스하는 데 사용된다. 이들 16비트 중에서 첫 번째 비트는 그 비트가 쓰기 (0) 또는 읽기 (1) 동작인지를 나타내고 두 번째 비트는 어드레스의 자동 증가 활성화를 결정한다. 세 번째 비트는 레지스터 액세스가 로컬 (0) 또는 글로벌(1)인지 식별하고 네 번째는 항상 0이어야 한다. 다음 4비트는 의도된 레지스터를 식별하며 마지막 8비트는 데이터 바이트이다. 로컬 레지스터 액세스의 경우 드라이버 어드레스는 0x08에서 글로벌 드라이버 간접 어드레스 레지스터에 저장된다. 모든 MAX6960의 레지스터 0x08은 파워 업 시 0으로 초기화된다. 이들 레지스터는 16비트 전송을 사용하여 전체적으로 바꿀 수 있다. 이들은 또한 두 번째 비트가 설정되어 있는 경우 매번 16비트 전송 후 동시에 증가시킬 수 있다.
파워 온 디폴트 값이 디스플레이 크기, 컬러 또는 휘도 레벨 규격을 만족하지 않을 경우 MAX6960은 초기화가 필요할 수 있다. 256개 MAX6960의 경우 레지스터 파워 온 디폴트 값은 행으로 연결되어 있으며 단일 컬러, 픽셀당 1비트, 풀 디지트 및 하프 패널 (half-panel) 휘도를 갖는다.
간접 방법을 사용할 경우 디스플레이 메모리는 한 번에 1디지트(8 x 8)씩 픽셀의 왼쪽에서부터 오른쪽 열로 액세스된다. 다음으로 간접 방법은 왼쪽에서 오른쪽으로 디지트별로 MAX6960 드라이버 행의 끝에 도달할 때까지 이동한다. 마지막으로 위에서 아래로 MAX6960 드라이버 행을 시퀀싱한다. 이 간접 방법은 먼저 전체 디스플레이를 위해 적색 메모리에 액세스한 다음 녹색 메모리에 액세스한다. 0x0E에서 글로벌 드라이버 소자 레지스터를 초기화할 필요가 있다. 따라서 디스플레이 간접 어드레스 카운트는 올바른 번호에서 스스로 리셋할 수 있다. 이것은 그림 2와 3에 나와 있는데, 여기서 DAN은 디지트 액세스 번호(Digit Access Number)를 나타낸다. 단일 비트 액세스는 디스플레이 메모리의 8바이트(픽셀당 1비트 또는 픽셀당 2비트에 대한 8 x 8 또는 4 x 8 디스플레이 매트릭스)를 업데이트한다. 글로벌 드라이버 소자 레지스터는 MAX6960에 1을 뺀 전체 숫자로 초기화되어야 한다.
그림 2. 단일 컬러, 픽셀당 1비트, 디스플레이 메모리 액세스 시퀀스
그림 3. 2컬러, 픽셀당 1비트, 디스플레이 메모리 액세스 시퀀스
또한 픽셀 분해능이 2비트일 경우 0x0F에서 글로벌 드라이버 행 레지스터를 초기화할 필요가 있다. 이러한 초기화는 그림 4와 5에서 보듯이 다음 행으로 이동하기 전에 MAX6960 행에 먼저 액세스할 수 있도록 보장한다. 글로벌 드라이버 행 레지스터는 행에서 1을 뺀 MAX6960의 전체 숫자로 초기화되어야 한다.
그림 4. 단일 컬러, 픽셀당 2비트, 디스플레이 메모리 액세스 시퀀스
그림 5. 2컬러, 픽셀당 2비트, 디스플레이 메모리 액세스 시퀀스
휘도 제어 레지스터
MAX6960의 동작 세부사항은 소자의 16개 레지스터에 쓰기를 통해 제어된다. 이 레지스터에는 픽셀 휘도 스케일(0x01), 패널 휘도(0x02), 디지트 0 휘도(0x03), 디지트 1 휘도(0x04), 오류 (0x05) 및 글로벌 패널 구성(0x0D)이 포함된다. 이들 휘도 제어 레지스터에는 각각 8비트가 있다.
글로벌 드라이버 소자 초기화
다음은 그림 1의 간단한 애플리케이션 회로를 위한 글로벌 드라이버 소자 및 글로벌 드라이버 행 레지스터를 초기화하는 16비트 전송의 예이다.
0x0E, 0x01, // Write to global driver devices register with two total devices.
0x0F, 0x01, // Write to global driver rows register with two MAX6960s in a row.
다음은 그림 1의 회로 구성을 갖는 8 x 32 매트릭스 정보에서 4개의 8 x 8 디지트로 구성된 디스플레이 에지를 켜는 8비트 및 한 번의 16비트 전송의 예이다.
0xFF, // Light up the left edge.
0x81, // Light up top and bottom pixels of the second column.
0x81, // Light up top and bottom pixels of the third column.
...
0x81, // Light up top and bottom pixels of the fourteenth column.
0x81, // Light up top and bottom pixels of the fifteenth column.
0xFF, // Light up the left edge.
0x0D, 0x31, // Turn on the shutdown bit.