8×8 Dot LED Matrix (MAX7219)

1. 8×8 Dot LED Matrix (MAX7219)

8×8 LED Matrix로 글자와 이미지 출력에 이용합니다. 모듈을 여러개 일렬로 연결해서 사용하면 LED Matrix 전광판 처럼 사용할 수도 있습니다. 비교적 저렴한 가격도 장점.

LED Matrix 와 구동칩인 MAX7219 및 필요한 회로 부품들을 DIY 킷 형태로 팔기도 하고, 모두 조립된 형태로 팔기도 합니다. 사용되는 부품은 아래를 참고하세요.

  • 1x PCB board
  • 2x 5P bent pin single row pin
  • 1x 24P IC socket
  • The 1x Inline MAX7219 chip
  • 1x 10uF electrolytic capacitor
  • 1x 0.1uF ceramic capacitor
  • 1x 10K resistor
  • 2 Block 2x 8P round hole (pitch 2.54mm)
  • 1x 3mm 8 * 8 common cathode red dot

직접 DIY하는 과정은 [링크]의 내용을 참고하시면 됩니다.

20120914115804-ebfd2

2. 연결방법

여기서는 1개의 모듈만을 사용합니다. MAX7219 칩이 있는 쪽 5개 핀을 이용하시면 됩니다. 반대쪽 핀들은 LED Matrix를 여러개 연결해서 하나처럼 동작시킬 때 사용합니다.

LED Matrix        Arduino
VCC                        5V
GND                       GND
DIN                         D12
CS                          D10
CLK                        D11

아두이노와 MAX7219 칩간 통신을 위해 SPI 인터페이스를 사용합니다. 해외 포럼을 보니 위와 같이 사용하는게 일반적이네요. [링크] 참고

  • Pins 10-11-12 is bitbanging. (SS-MOSI-MISO)
  • Pins 10-11-13 are needed for actual SPI. (SS-MOSI-SCK)

20120914120004-08659

3. 소스코드 (스케치)

먼저 LedControlMS 라이브러리를 설치해야 합니다. [링크]를 참고하셔서 라이브러리를 설치하세요.

라이브러리에 포함되어 있는 예제는 좀 부실해서… 아래 링크에 있는 예제를 사용하세요. LED 매트릭스를 제어하기 위한 각종 코드를 충실히 담고 있습니다. 소스가 길기 때문에 여기서는 중요한 부분만 발췌해 보겠습니다.

예제 스케치를 살펴보면 먼저 클래스 인스턴스를 하나 생성하는데, 이 때 LED 매트릭스가 연결된 디지털 핀 넘버를 지정해줘야 합니다.

LedControl lc=LedControl(12,11,10,1);
  • pin 12 –> DataIn
  • pin 11 –> CLK
  • pin 10 –> CS

setup() 초기화 코드를 보면 LED 매트릭스 초기화를 합니다.

void setup() {
  lc.shutdown(0,false);
  lc.setIntensity(0,8);
  lc.clearDisplay(0);
}

위 코드를 그대로 사용하면 됩니다. lc.setIntensity(0,8); 함수는 LED 매트릭스의 밝기를 조절하는 함수입니다. 0은 LED 매트릭스 넘버 (아두이노와 가까운 매트릭스부터 0, 1, …, n) 두 번째 숫자 8 은 밝기를 의미합니다. 밝기는 숫자가 작을수록 어둡습니다.

이후 setup() 함수 안에서 LED 조작하는 각종 방법이 나옵니다. 아래 함수들을 이용해서 LED 조작이 가능합니다.

  • lc.setLed(0,0,0,true); // 0번 모듈, X-Y 좌표 (0, 0) LED on
  • lc.setLed(0,7,0,true); // 0번 모듈, X-Y 좌표 (7, 0) LED on
  • lc.setRow(0,1,0x0C); // 0번 모듈, row 값이 1인 LED 8개를 1byte 데이터(0x0C = 00001100)로 한번에 제어
  • lc.setColumn(0,7,iconHeart[0]); // 0번 모듈, column 값이 7인 LED 8개를 1byte 데이터(iconHeart[0])로 한번에 제어
  • lc.writeString(0,Hola Mundo); // 문자열 출력 함수 (모듈 넘버, 출력할 문자열)
  • lc.clearAll();  // 모든 LED off

아래 그림처럼 row, column 을 X, Y 좌표처럼 생각하면 됩니다. 좌표의 시작점 (0,0)은 좌측 아래입니다.

06_led_matrix_ori

loop() 함수 안에서는 특정 ASCII 문자 하나를 표시할 때 어떻게 가능한지 보여줍니다.

  • lc.displayChar(0, lc.getCharArrayPosition(ch));  // 0번 모듈에 ch 에 저장된 아스키 문자를 출력

You may also like...