본문 바로가기
아두이노 러닝보드/아두이노 러닝보드 하드웨어설계

도트 매트릭스 및 MAX7219CNG 연결하기 💡

by 모빌리티키즈 2024. 12. 13.
728x90
반응형

안녕하세요, 여러분! 오늘은 8x8 도트 매트릭스와 MAX7219CNG 드라이버를 사용하여 문자, 기호 및 이미지를 표시하는 방법을 설명하겠습니다. 도트 매트릭스는 휴대폰, 텔레비전 등 다양한 현대 디스플레이 기술에 사용되는 LED 어레이로, LED를 이용한 디스플레이에 관심이 많은 분들께 특히 유용합니다.

도트 매트릭스란?

도트 매트릭스는 2차원 패턴으로 배열된 LED 어레이로, 각 LED는 독립적으로 제어되어 다양한 이미지를 표시할 수 있습니다. 일반적인 8x8 도트 매트릭스 장치는 64개의 LED로 구성되며, 이러한 LED는 행과 열로 제어됩니다.

 

MAX7219 드라이버

MAX7219는 도트 매트릭스를 보다 쉽게 제어할 수 있도록 돕는 IC입니다. 이 드라이버는 16개의 출력 라인을 통해 64개의 LED를 구동하며, 24개의 핀 중 5개 핀만을 I/O에 연결하여 제어할 수 있습니다. 또한, LED의 밝기를 제어할 수 있는 기능도 있습니다.

 

회로 연결

먼저, MAX7219 드라이버를 Arduino에 연결하는 방법을 살펴보겠습니다.

  1. 전원 및 접지 연결:
    • VCC를 Arduino의 5V 핀에 연결합니다.
    • GND를 Arduino의 GND 핀에 연결합니다.
  2. 제어 핀 연결:
    • DIN를 Arduino의 디지털 핀 (예: D11)에 연결합니다.
    • CLK를 Arduino의 디지털 핀 (예: D13)에 연결합니다.
    • CS를 Arduino의 디지털 핀 (예: D10)에 연결합니다.

이제 도트 매트릭스를 MAX7219에 연결합니다. 각 LED는 MAX7219의 출력 라인(Q0-Q7 및 DP)과 연결됩니다.

 

예제 코드

다음은 MAX7219와 도트 매트릭스를 사용하여 간단한 텍스트를 표시하는 예제 코드입니다:

#include <LedControl.h>

// Define the pins used for the connections
int DIN = 11; // Data input
int CLK = 13; // Clock input
int CS = 10;  // Load (CS)

LedControl lc = LedControl(DIN, CLK, CS, 1); // Define LedControl object

void setup() {
  lc.shutdown(0, false); // Wake up displays
  lc.setIntensity(0, 8); // Set brightness level (0 is min, 15 is max)
  lc.clearDisplay(0); // Clear display register
}

void loop() {
  lc.setRow(0, 0, B10101010); // Example pattern for row 0
  delay(500);
  lc.setRow(0, 1, B01010101); // Example pattern for row 1
  delay(500);
}

#include "LedControl.h"                                    // 8x8 매트리스 라이브러리

#define A { 0x7E, 0x88, 0x88, 0x88, 0x7E }                 // A  
#define R { 0xFE, 0x90, 0x98, 0x94, 0x62 }                 // R
#define D { 0xFE, 0x82, 0x82, 0x44, 0x38 }                 // D
#define U { 0xFC, 0x02, 0x02, 0x02, 0xFC }                 // U
#define I { 0x82, 0xFE, 0x82, 0x00, 0x00 }                 // I
#define N { 0xFE, 0x20, 0x10, 0x08, 0xFE }                 // N
#define O { 0x7C, 0x82, 0x82, 0x82, 0x7C }                 // O
#define SP {0x00, 0x00, 0x00, 0x00, 0x00 }                 // Space

#define DIN                   12                           // DIN을 12번핀에 연결
#define CLK                   11                           // CLK를 11번핀에 연결
#define CS                    10                           // CS를 10번핀에 연결
#define NUM_MATRIX            1                            // 연결된 매트릭스 개수

LedControl matrix = LedControl(DIN, CLK, CS, NUM_MATRIX);  // matrix 객체 생성(DIN, CLK, CS, 연결된 개수) 

uint8_t sentence[][5] = { A, R, D, U, I, N, O, SP };       // 출력 문자 2차원 배열
int num = sizeof(sentence) / 5;                            // 출력 문자 개수
int position[18] = {-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12};   // 출력 위치

void setup() 
{
  matrix.shutdown(0, false);                               // 첫번째(0) 매트릭스, 절전모드 wake-up(false)
  matrix.setIntensity(0, 5);                               // 첫번째 매트릭스, 밝기 5 (0~15)
  matrix.clearDisplay(0);                                  // 첫번째 매트릭스, 화면 지움
}

void loop() {
    for (int k = 0; k < num; k++)                                   // 글자수 만큼 회전
    {
      for (int j = 18; j >= 5; j--)                                 // 한 문자를 5 + 8 + 5 만큼 회전
      {
        for (int i = 0; i < 5; i++)                                 // 한 문자만 출력
        {
          matrix.setColumn(0, position[i + j - 5], sentence[k][i]); // 첫번째 매트릭스, 각각 열, 행 출력 
        }
        delay(50);                                                  // 출력 속도 조절
        matrix.clearDisplay(0);                                     // 첫번째 매트릭스, 화면 지움
      }
    }
}

모듈 확장

여러 개의 도트 매트릭스 모듈을 연결하려면, 이전 모듈의 출력 핀을 새 모듈의 입력 핀에 연결합니다. 예를 들어, 이전 모듈의 DOUT 핀을 새 모듈의 DIN 핀에 연결하면 됩니다. 이를 통해 도트 매트릭스를 쉽게 확장할 수 있습니다.

결론

이번 포스트에서는 8x8 도트 매트릭스와 MAX7219CNG 드라이버를 Arduino에 연결하고 제어하는 방법에 대해 알아보았습니다. 이 기술을 사용하면 간단하게 LED 디스플레이를 만들 수 있으며, 다양한 패턴과 이미지를 표시할 수 있습니다. 프로젝트 진행 중 궁금한 점이 있으면 언제든지 문의해 주세요!

이 블로그 포스트가 여러분의 프로젝트에 도움이 되길 바랍니다. 다양한 가능성을 탐구하며 전자 프로젝트의 세계를 즐겨보세요! 🎉✨

728x90
반응형