검색
홈으로 마이페이지 주문조회 장바구니
로그인
회원정보 게시판
회사소개 이메일
도서(BOOK)
키트(KIT)
특판 상품
졸업작품&전자기초
응용모듈
전자부품
모터
기구
엔클로져
고객센터 게시판
자유게시판
MCU 통합 게시판
강좌-RaspberryPi
강좌-드론(쿼드콥터)
강좌-아두이노(기초)
강좌-아두이노(응용)
신제품/신기술 소개
DIY 공작 게시판
윤교수의 연구실 칼럼
 ☎ : 02-776-4868

 F: 02-779-6757

☞ 평일 : 09~18시
☞ 주말 : 10~13시


국민822401-04-027758
☞ 예금주 : Ohm사
국민822401-04-027761
☞ 예금주 : R&C사
 
 
1 (주)알트소프트 사이트
 
2 LabVIEW 강좌 사이트
 
3 윤교수의 마이크로프로세서 월드
 
4 전자 엔지니어
 

 

 
강좌-아두이노(기초)
 
2014. 05. 20 (11:07)
제목[아두이노] 14. 도트메트릭스 – MAX7219
작성자 조회 : 6824

14. 도트메트릭스 – MAX7219


이번 강좌에서는 도트메트릭스 제어에 대해서 알아 보도록 한다. 8x8 LED 도트메트릭스를 이용하며 MAX7219 LED Display Driver를 이용한 방법에 대해서 알아본다. 아두이노 라이브러리를 추가하여 예제를 구동해 보면서 살펴 보자.

 

MAX7219 7-Segment를 구동할 경우에 주로 사용하지만, 이번 강좌의 예처럼 도트메트릭스를 직접 제어가 가능하다.

MAX7219는 아래 응용회로를 참조하는 것으로 설명을 대신하겠다. 각자 데이터시트를 보면서 자세한 내용은 참고하기 바란다.



여기서 중요한 내용은 MCU와 연결 할 경우, 단지 3개의 핀만을 필요로 한다는 것이다. 이를 꼭 기억하고 넘어 가도록 한다.

 

이번 강좌에서 사용하게 될 8x8 도트메트릭스 모듈은 다음과 같다.



관련 회로는 아래 회로도를 참고한다,


아두이노와는 다음과 같이 회로를 구성한다.


 

모듈에 전원과 제어 신호 3핀만 연결하면 쉽게 구동할 수 있다.

실제 결선은 다음과 같이 구성한다.



예제를 열어서 동작을 시켜 보기 전에, 미리 작업을 해야 할 내용이 있다. 아두이노 개발환경에는 이 라이브러리가 포함되어 있지 않기 때문에 직접 공식 사이트에서 다운을 받아서 라이브러리 폴더에 저장하도록 하자.

 

http://playground.arduino.cc/Main/LedControlDemos

 

위 링크에서 보면, 빨간 박스로 표시한 부분의 파일을 받아서 저장하도록 한다.




위와 같이 [LCDemoMatrix] 예제를 열어 보도록 하자.


//We always have to include the library


#include "LedControl.h"

LedControl lc=LedControl(2,3,4,1);

 

/* we always wait a bit between updates of the display */

 

unsigned long delaytime=100;

 

void setup() {

 

  /*

 

   The MAX72XX is in power-saving mode on startup,

 

   we have to do a wakeup call

 

   */

 

  lc.shutdown(0,false);

 

  /* Set the brightness to a medium values */

 

  lc.setIntensity(0,8);

 

  /* and clear the display */

 

  lc.clearDisplay(0);

}

 

/*

 

 This method will display the characters for the

 

 word "Arduino" one after the other on the matrix.

 

 (you need at least 5x7 leds to see the whole chars)

 

 */

 

void writeArduinoOnMatrix() {

 

  /* here is the data for the characters */

 

  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};

 

  byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};

 

  byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};

 

  byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};

 

  byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};

 

  byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};

 

  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

 

  /* now display them one by one with a small delay */

 

  lc.setRow(0,0,a[0]);

 

  lc.setRow(0,1,a[1]);

 

  lc.setRow(0,2,a[2]);

 

  lc.setRow(0,3,a[3]);

 

  lc.setRow(0,4,a[4]);

 

  delay(delaytime);

 

  lc.setRow(0,0,r[0]);

 

  lc.setRow(0,1,r[1]);

 

  lc.setRow(0,2,r[2]);

 

  lc.setRow(0,3,r[3]);

 

  lc.setRow(0,4,r[4]);

 

  delay(delaytime);

 

  lc.setRow(0,0,d[0]);

 

  lc.setRow(0,1,d[1]);

 

  lc.setRow(0,2,d[2]);

 

  lc.setRow(0,3,d[3]);

 

  lc.setRow(0,4,d[4]);

 

  delay(delaytime);

 

  lc.setRow(0,0,u[0]);

 

  lc.setRow(0,1,u[1]);

 

  lc.setRow(0,2,u[2]);

 

  lc.setRow(0,3,u[3]);

 

  lc.setRow(0,4,u[4]);

 

  delay(delaytime);

 

  lc.setRow(0,0,i[0]);

 

  lc.setRow(0,1,i[1]);

 

  lc.setRow(0,2,i[2]);

 

  lc.setRow(0,3,i[3]);

 

  lc.setRow(0,4,i[4]);

 

  delay(delaytime);

 

  lc.setRow(0,0,n[0]);

 

  lc.setRow(0,1,n[1]);

 

  lc.setRow(0,2,n[2]);

 

  lc.setRow(0,3,n[3]);

 

  lc.setRow(0,4,n[4]);

 

  delay(delaytime);

 

  lc.setRow(0,0,o[0]);

 

  lc.setRow(0,1,o[1]);

 

  lc.setRow(0,2,o[2]);

 

  lc.setRow(0,3,o[3]);

 

  lc.setRow(0,4,o[4]);

 

  delay(delaytime);

 

  lc.setRow(0,0,0);

 

  lc.setRow(0,1,0);

 

  lc.setRow(0,2,0);

 

  lc.setRow(0,3,0);

 

  lc.setRow(0,4,0);

 

  delay(delaytime);

 

}

 

/*

 

  This function lights up a some Leds in a row.

 

 The pattern will be repeated on every row.

 

 The pattern will blink along with the row-number.

 

 row number 4 (index==3) will blink 4 times etc.

 

 */

 

void rows() {

 

  for(int row=0;row<8;row++) {

 

    delay(delaytime);

 

    lc.setRow(0,row,B10100000);

 

    delay(delaytime);

 

    lc.setRow(0,row,(byte)0);

 

    for(int i=0;i

 

      delay(delaytime);

 

      lc.setRow(0,row,B10100000);

 

      delay(delaytime);

 

      lc.setRow(0,row,(byte)0);

 

    }

 

  }

 

}

 

/*

 

  This function lights up a some Leds in a column.

 

 The pattern will be repeated on every column.

 

 The pattern will blink along with the column-number.

 

 column number 4 (index==3) will blink 4 times etc.

 

 */

 

void columns() {

 

  for(int col=0;col<8;col++) {

 

    delay(delaytime);

 

    lc.setColumn(0,col,B10100000);

 

    delay(delaytime);

 

    lc.setColumn(0,col,(byte)0);

 

    for(int i=0;i

 

      delay(delaytime);

 

      lc.setColumn(0,col,B10100000);

 

      delay(delaytime);

 

      lc.setColumn(0,col,(byte)0);

 

    }

 

  }

 

}

 

/*

 

 This function will light up every Led on the matrix.

 

 The led will blink along with the row-number.

 

 row number 4 (index==3) will blink 4 times etc.

 

 */

 

void single() {

 

  for(int row=0;row<8;row++) {

 

    for(int col=0;col<8;col++) {

 

      delay(delaytime);

 

      lc.setLed(0,row,col,true);

 

      delay(delaytime);

 

      for(int i=0;i

 

        lc.setLed(0,row,col,false);

 

        delay(delaytime);

 

        lc.setLed(0,row,col,true);

 

        delay(delaytime);

 

      }

 

    }

 

  }

 

}

 

void loop() {

 

  writeArduinoOnMatrix();

 

  rows();

 

  columns();

 

  single();

 

}

 

 

좀 길다….^^


예제를 구동해 보면, 빠르게 지나가는  arduino 글자와 다양한 패턴들을 표현하고 있다. 아래 동영상을 참고 하도록 하자.


주요 코드를 살펴 보도록 하자.

 

           #include "LedControl.h"

 

더 이상 말 안 해도 알겠죠? 라이브러리를 사용하니깐

 

           LedControl lc=LedControl(2,3,4,1);

           LedControl(dataPin,clockPin,csPin,numDevices)

 

새로운 인스턴스를 생성하고, 각 파라미터를 지정해 준다.

 

제어핀 3핀은 SPI 신호에 대한 포트 정의를 해 준다. 마지막에 numDevice는 연결된 모듈의 수를 지정한다. 예제에서는 1개만 사용하기 떄문에, 이 값이 1로 되어 있지만, cascade로 여러 개가 연결되어 있으면, 연결되어 있는 숫자만큼 적어 주면 된다.

 

           lc.shutdown(0,false);

       shutdown(int addr, bool b);

 

power saving 모드를 위한 함수이며, addr은 제어를 위한 디바이스의 주소이며, btrue power saving 모드, false이면 정상 모드이다.

 

          lc.setIntensity(0,8);

       setIntensity(int addr, int intensity);

 

디스플레이의 밝기를 지정해 준다. addr은 디바이스 주소이며, Intensity는 밝기의 단계로 0(어두움)부터 15(밝음)까지 지정할 수 있다.

 

           lc.clearDisplay(0);

       clearDisplay(int addr); 

 

디스플레이의 모든 LED OFF시킨다.

 

            lc.setRow(0,0,a[0]);

       setRow(int addr, int row, byte value);  

 

row 8 LED에 대해서 설정한다. addr은 디바이스 주소이며, row는 설정 하고자 하는 row이고, value는 대응되는 8 LED의 상태를 표시한다.

 

           lc.setColumn(0,col,B10100000);

void setColumn(int addr, int col, byte value);

 

  column 8 LED에 대해서 설정한다. addr은 디바이스 주소이며, col는 설정 하고자 하는 column이고, value는 대응되는 8 LED의 상태를 표시한다.

 

          lc.setLed(0,row,col,true);

      setLed(int addr, int row, int col, boolean state);

 

해당 위치의 LED ON/OFF 시킨다. addr은 디바이스 주소이며, row col은 각각 rowcolumn의 위치이다. 이 값은 0-7로 지정이 가능하다. state true LED ON, false LED OFF가 된다.

 

차근차근 위의 예제를 분석해 보면서, 이해를 하도록 하자.

 

매번 강좌에서는 가능한 라이브러리를 사용하려고 했다. 그 이유는 아두이노는 하드웨어에 쉽게 접근을 하고자 하는 사람들을 위해서 만들어 진 것처럼 이 강좌에서는 프로그램 기법을 가르치지 않고 제공된 라이브러리를 쉽게 사용할 수 있는 방향에 초점을 두었기 때문이다. 프로그램 기법은 경험이 많을수록 쌓이게 되는 것이기 때문에 여기서 까지는 다룰 필요가 없다고 생각된다.

 

어느덧 다음 강좌가 마지막이다. 물론, 기초에 대한 강좌가 마지막이다. 마지막을 어떤 내용으로 할지 아직 결정이 되지 않았지만계획 없이 강좌 연재한다고 욕하겠는걸~~

 

이런 저런 카페를 보다 보니, 서보 모터 제어에 대해서 질문이 많은 편이어서 서보 모터를 다뤄 볼까 한다…..갑자기 맘이 변할 수도 있으니 마지막 강좌는 꼭 확인 해 보세요


비밀번호 확인 닫기
name password
  Content name date hits
[아두이노] 14. 도트메트릭스 – MAX7219  
2014/05/20 6824
상호명 : R&C사 사업자등록번호 : 106-02-43112 통신판매업신고번호 : 용산 03564
대표 : 곽민수 사업장소재지 : 서울시 용산구 갈월동 17-1번지 세기빌딩 101호
전화 : ☎ : 02-776-4868 ,F: 02-779-6757 개인정보담당자 : 곽민수
[회사소개] [이용안내] [이용약관] [개인정보취급방침]
Copyright ⓒ 도서출판 OHM사와 학습기기 R&C사 All Rights Reserved.