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
'Embedded System > ATmega128' 카테고리의 다른 글
[ATmega128] DHT11(온습도 센서) 제어 (10) | 2019.12.02 |
---|---|
[ATmega128] sg90(서보모터) 제어 (2) | 2019.10.02 |
[ATmega128] Smart Moving Trash Can Project (0) | 2019.09.18 |
[ATmega128] DFPlayer_Mini (15) | 2019.08.16 |
HC-SR04(초음파 센서)의 이해 (7) | 2017.08.13 |