아두이노 #51 MAX7219 8x8 LED Matrix - MAX7219 동작 원리
Lucy Archive
Lucy 2023
2020. 11. 30. 01:42

Arduino : MAX7219 8x8 LED Matrix 동작 원리

이전 포스트에서 8x8 LED Matrix 동작원리와 사용법에 대한 포스트를 작성하였습니다. 이번 포스트는

MAX7219 LED Dot Matrix를 사용하기 전에 MAX7219의 동작 원리

에 대해 설명합니다. 편리하게 사용할 수 있는 많은 라이브러리가 있기 때문에, LED Matrix 를 동작하기 위해 반드시 MAX7219의 동작 원리를 이해해야 하는 것은 아닙니다. 하지만, 기존 라이브러리에 없는 추가 기능을 만든다든지, 용량과 속도를 최적화 한다든지, 유사하지만 다르게 동작하는 LED Matrix 동작 시켜야 하는 등의 과제가 있을 때 도움이 될 것이라 생각합니다.

LED Matrix가 처음이라면?

LED Matrix가 처음이신 분들은 FND의 동작과, LED Matrix의 동작을 먼저 이해하시는 것을 추천드립니다. 구글에 검색하면 좋은 설명글들이 많습니다. 설명이 부족할 수 있지만 제가 이전에 작성한 포스트는 아래와 같습니다.

FND(7-SEGMENT) 기본 동작

 

아두이노 강좌 #22 7-SEGMENT FND 기본 동작 원리

Arduino Uno 7-Segment 7-Segment 는 7개의 문자용 SEGMENT와 1개의 DP SEGMENT 로 구성된 LED 표시기 입니다. 본 포스트에서는 FND 의 내부 회로 구성에 따른 종류를 알아보고, 아두이노에서 공통 캐소드 타입의..

juahnpop.tistory.com

4자리 FND(4Digit 7Segment) 기본 동작

 

아두이노 강좌 #23 4-Digit 7Segment 기본 동작 원리

Arduino Uno 4-Digit FND 사용 방법 지난 포스트에서 7-Segment 의 원리와 사용 방법에 대해 소개하였습니다. 이번에는 4자리 7-Segment 의 구조를 알아보고, 기초적인 사용법을 설명 합니다. 본 포스트에서

juahnpop.tistory.com

8x8 LED Dot Matrix 기본 동작

 

아두이노 강좌 #24 8x8 LED Dot Matrix 내부 구성과 기본 동작 방법

Arduino Uno 8x8 LED Dot Matrix Basic LED Dot Matrix 는 옥외 전광판 등에서 볼 수 있는 LED타입의 표시 장치입니다. 표시 장치로 LED를 사용하는 경우 LCD에 비해 가시거리가 먼 장점이 있습니다. 그래서 야외..

juahnpop.tistory.com

8x8 LED Matrix 문자 및 문자열 스크롤 관련 포스트도 있지만, 이 포스트를 이해하는데 필수적인 내용이 아니라서 하단에 링크하였습니다. 필요하시면 참고해주세요.

LED Matrix 종류

LED Matrix 단품과 모듈

8x8 LED Matrix 를 구매하기 위해 전자부품 사이트에서 부품 검색을 하면 (분류에 따라 다양하지만) 아래와 같이 LED Matrix 단품이 또는 MAX7219와 같은 LED Driver를 포함한 모듈이 있습니다. 왼쪽 그림은 8x8 LED Matrix 만 있는 부품이고, 왼쪽은 LED Controller(MAX7219)와 LED Matrix 가 함께 있는 부품입니다. 

8x8 LED Matrix 종류

종류별 어플리케이션 회로 예시

아래 그림은 LED Matrix 종류별 연결 회로 예시를 나타낸 그림입니다. 왼쪽의 LED Matrix 단품은 16개 핀을 사용하여 Arduino Uno의 경우 대부분의 핀을 사용하게 되고, 오른쪽 LED Module은 단 3개 핀(VCC, GND제외)으로 제어가 가능합니다. LED Matrix 단품을 사용하면 사용되는 핀의 개수는 많지만, 속도는 빠르게 구현할 수 있습니다.

(좌) 8x8 LED Matrix 연결 예시 (우) 8x8 LED Matrix Module 연결 예시

 

MAX7219 동작원리

MAX7219는 시리얼(Serially Interfaced)로 동작하는 8-Digit LED Display Drivers입니다. 데이터 시트의 Application Circuit를 보면 8개의 FND에 문자를 표시하기 위해 사용되는 것으로 보입니다. 주요한 인터페이스는 아래의 2가지 정도로 볼 수 있습니다. 결국 단순하게 MCU로 부터 시리얼 통신으로 데이터를 받은 대로, FND나 LED Matrix에 명령받은 대로 화면을 출력해주는 역할을 합니다.

  • MCU와 시리얼 통신
    • CLK : 클럭 신호 라인
    • DIN : 데이터 라인
    • LOAD/CS : DATA LATCH
  • FND 또는 LED Matrix 제어
    • DIGIT 8Pin, SEG 8 Pin

데이터시트 : https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf

MAX7219의 동작 원리 개요

어떠한 칩, 회로, 시스템의 동작 원리를 빠르게 이해하는 방법 중의 하나는 분석하고자 하는 대상의 입력, 출력, 입력이 출력으로 변환되는 과정을 파악하면 보다 빠르게 이해할 수 있습니다. 당연한 이야기지만 MAX7219의 3 부분은 아래와 같이 분류할 수 있습니다.

  • Input : MCU(아두이노)로 부터 시리얼 입력
  • Process : MCU부터 시리얼로 수신 한 데이터를 저장소에 저장
    • 저장소 1 : Adress와 Data를 저장
    • 저장소 2 : Option 값을 저장
  • Output : 내부 저장소에 저장된 옵션과 데이터대로 SEG와 DIG핀을 출력함

MAX7219의 Input, Process, Output

MAX7219는 무엇을 저장하는가?

MAX7219에는 Address와 Data를 저장하는 SRAM과 각종 Option을 저장하는 REGISTER가 있습니다. 이렇게 글로 보면 어렵게 느껴질 수 있지만, 실제로 아래와 같은 데이터가 저장되는 장소입니다.

MAX7219가 저장하고 있는 데이터 종류

위 데이터 시트의 Typical Application Circuit과 같이 8개의 FND를 연결한 상태라고 가정했을 때, Digit 0 ~ Digit 7 이름의 저장공간에는 각각 0번째 ~ 7번째 FND에 어떤 데이터를 출력할 것인지 데이터를 저장하고 있습니다. FND를 사용하는 경우 0 ~ 9까지의 숫자를 표시하는 데이터가 저장될 수 있습니다. 

Digit 0 ~ Digit 7 이외 옵션을 저장하는 공간이 있습니다. MAX7219의 옵션은 Decode Mode 등 5가지의 옵션이 있습니다. 각 옵션을 간단히 설명하면 아래와 같습니다. 

  • Decode Mode : FND Decode 사용할지 여부로, FND를 사용하지 않을 경우 0x00을 입력
  • Intensity : LED 밝기 값, 16단계로 조정이 가능하며 데이터 입력 범위 0x00 ~ 0x0F
  • Scan Limit : Digit 포트를 사용할 숫자, 8개 모두 사용할 경우 0x07
  • Shutdown : 0x00 일 경우 끄기, 0x01일 경우 켜기
  • Display Test : 0x00 일 경우 일반 동작 모드, 0x01 일 경우 모든 LED ON Test

MAX7219 저장된 데이터와 출력의 관계

MAX7219의 출력은 MAX7219 레지스터에 저장된 데이터에 따라 DIG0 ~ DIG7 핀과 SEG A ~ SEG DP핀이 알아서 출력을 합니다. 

Register 에 저장된 데이터 예시

예를 들어 MAX7219의 레지스터에 위의 표와 같은 데이터가 저장되어 있고, MAX7219의 SEG 핀은 8x8 LED Matrix의 열에(Columns) DIG 핀은 행에(Rows)에 연결되어 있는 경우 아래의 출력을 순차적으로 반복합니다. 이 반복 속도는 N ~ N+7 한 주기로 약 800Hz의 속도로 출력합니다. 눈으로 보기에 상당히 빠르기 때문에 실제로 대각선으로 불이 들어와 있는 것처럼 보이게 됩니다. 

MAX7219 출력 예시

결론적으로, MAX7219의 저장소에 출력하고자 하는 옵션과 데이터만 저장해 놓으면 자동적으로 DIG, SEG 이 동작합니다.

어떻게 데이터를 설정/저장하는가?

MAX7219에 내가 표시하고자 하는 데이터와 옵션을 저장하는 방법은 데이터 시트에 아래와 같이 나와있습니다. MCU에서 아래의 16bit의 데이터 포맷을 만들어 시리얼 데이터를 송신하면 됩니다. D12~D15는 무관한 값, D8 ~ D11은 Register의 Address, D0 ~ D7은 Register에 저장이나 설정할 데이터를 입력합니다.

MAX7219 Data Frame

예를 들어 MCU에서 아래와 같은 16bit 데이터를 MAX7219에게 보내면 MCU는 꺼지게 됩니다. 

데이터 프레임 예시


마무리

이번 포스트에서는 MAX7219의 동작 원리에 대해 알아보았습니다. 다음 포스트는 이번 포스트에 설명한 MAX7219의 동작 원리대로 코드를 작성하는 예시를 소개할 예정입니다. 이 원리를 이해하고 코드를 작성하면 라이브러리 없이도 여러 가지 기능을 직접 구현 가능할 것이라 예상합니다.

관련포스트

👉 아두이노 LED Matrix 관련글 목록 보기

👉 아두이노 디스플레이 장치 관련글 목록 보기

👉 아두이노 관련글 전체 목록 보기