Embedded System/ATmega128

MAX7219를 이용한 도트매트릭스 제어

전두선 2017. 8. 11. 00:30

MAX7219

Serially Interfaced, 8-Digit LED Display Drivers

- 3-wire serial interface

- 8x8 static RAM

- SPI 지원


 

MAX7219는 여러개의 7-SE를 제어하기 위해서 만들어졌는데, 비슷한 제어를 요구하는 다른 제품에도 사용 가능하다.

나는 이 MAX7219를 사용해 8x8 도트매트릭스를 제어해봤다.

 

도트매트릭스의 구동 방법 & MAX7219를 사용하는 이유

 

한 가지 색상을 사용할 수 있는 8x8 도트매트릭스에는 64개의 발광 다이오드가 존재한다.

이 64개의 발광 다이오드를 제어하려면 스태틱(Static) 구동 방법다이나믹(Dynamic) 구동방법중에 하나를 택해야 하는데,

 

여기서 스태틱 구동방법은 이 64개의 발광 다이오드를 모두 한 번에 제어하는것을 말하고, -> 한 번에 제어하는 만큼 많은 포트를 요구

다이나믹 구동방법은 한번에 64개를 제어하지 않고, 8x8 도트매트릭스의 행 단위로 순차적으로 제어를 하는데 빠른 속도로 제어하여 잔상효로 인해 우리 눈은 모두 켜져 있는것 처럼 착시효과가 생겨 모두 보이게 되는 방식이다. 다이나믹 구동방법은 아래 이미지를 참고하면 이해가 갈것이다.

 

 

<그림 출처: http://blog.naver.com/PostView.nhn?blogId=almdri02&logNo=150123104874>

 

 

대부분의 도트매트릭스는 다이나믹 구동방법을 사용하여 제어하는데, 많은 포트를 요구하는 스태틱 구동방법에 비해 다이나믹 구동방법은 적은 포트로도 제어가 가능하고, 전류 소모도 줄일 수 있다는 장점이 있기에 이 방법을 주로 사용한다. 다이나믹 구동방법은 행 단위로 제어하기 때문에 행 8핀, 열 8핀 총 16핀이 있으면 위에 처럼 행단위로 차례대로 뿌릴 수 가 있다.

 

하지만 이것도 핀수가 적지만 나는 더 줄이고싶다? 그러면 디코더를 사용해서 줄일 수도 있고, 시리얼 통신으로 줄일 수 있는 방법도 있는데 

이 두 가지 방법을 모두 이용한 것이 MAX7219 이다. 

 


 

 

 

 

 

MAX7219와 도트매트릭스를 공부하기위해 제품을 찾았는데,

다행히도 디바이스 마트에 아주 저렴한 제품이 있었다.

http://www.devicemart.co.kr/1326937

 

 

 PIN NAME  FUNCTION 
 1 DIN   시리얼 데이터 입력. CLK의 상승 에지에서 내부 16bit 시프트 레지스터로 로드된다.
 2,3,5-8,10,11  DIG 0 - DIG 7   도트매트릭스 행(공통 캐소드)
 4,9 GND   그라운드.
 12 LOAD   로드 데이터 입력. 직렬 데이터의 마지막 16 비트는 LOAD의 상승 에지에서 래치됩니다. 
 13 CLK   직렬 클럭 입력 CLK의 하강 에지에서 데이터는 DOUT에서 클록 아웃된다
 14-17,20-23 SEG A- SEG G,DP   도트매트릭스 열
 18 ISET  데이터 시트 참고.
 19  V+   전원. 
 24 DOUT   직렬 데이터 출력. [ 모듈을 여러개 사용할때 필요 ]

 

 

DIN(MOSI), LOAD(/SS), CLK(SCLK)  -> 3 wire interface SPI 통신으로 제어 가능하다.

 


 

제품 타이밍 다이어그램의 중요성

 

 

어떠한 제품이든 데이터 시트를 전체적으로 이해하여야 제어가 가능하지만 무엇보다도 집중적이게 봐야할 것이 나는 이 타이밍 다이어그램이라고 생각된다.  다른 내용을 다 이해했어도 이 타이밍 다이어그램을 놓친다면 아무리 소스를 잘짜도 동작을 하지 않기 때문이다.

 

 

 

 

 

MAX7219의 통신은 LOAD 데이터를 Low로 주면 시작된다. SPI 통신으로 치면 /SS를 Low 준다라는 즉 이 슬레이브랑 통신을 하겠다는 말이다. 다음에 봐야할것이 클럭(SCLK)과 데이터선(MOSI/MISO)의 동기화 방법인데, GPIO 방법을 사용하면 있는 그대로 타이밍도를 표현하면 되는데, SPI 통신을 사용할 경우에는 SPI 레지스터를 설정하여 타이밍도에 맞는 동기화 방법을 정확히 설정 해줘야지만 동작한다.

 

또 전송속도, MSB부터 전송할껀지, LSB부터 전송할껀지와 같이 고려해야할 것들이 있으므로 주의해야한다.

 

전체적인 동작과정은 [LOAD] Low ->  [CLK] Low -> [DIN] Data 1bit in -> [CLK] High ->  [CLK] Low -> ······16 cycle····· -> [LOAD] High

 

 


 

타이밍 다이어그램만 봐도 MAX7219는 한번에 2바이트씩 데이터를 전송한다는것을 알수있다. 그럼 어떤 데이터를 전송할까?

 

 

 

상위 8비트중 4비트는 주소(명령)을 보낼때 사용되고, 하위 8비트는 데이터를 전송하는데 사용된다는것을 위 테이블을 보면 쉽게 알수있다.

초기에 설명했던 다이나믹 구동방법 타이밍 다이어그램의 이해를 완벽히 하였다면 테이블1과 2를 보고 사용이 가능할것이다.

 

 

 

 

물론, 초기화 작업을 거친후에 말이다. 데이터 시트를 읽어보면 알겠지만 처음에 말했듯이 이 IC는 7-SE 제어를 전용으로 만들어진것이다. 그렇기에 명령에 보면 디코드 모드처럼 7-SE를 제어하는데 있어서 도움을 주는 기능들이 있는데, 나처럼 도트매트릭스를 사용한다면 이 기능들을 사용안하는 쪽으로 설정을 해야한다. 

 

또 밝기조절, DIG 활성화(Scan limit), 셧다운, 디스플레이 테스트 등 사용자가 제어하려는 제품에 맞게 초기에 꼭 초기화 작업을 진행해야 한다.

 


 

아래는 간단하게 SPI 제어를 통해서 문자를 표시해보았다.

 

 

 

 

공부할때 정말 많은 도움이 된 전자공작 사이트 주소입니다.   https://cafe.naver.com/circuitsmanual