로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Arduino Open Source
아듀이노 함수의 상세설명
작성자 avrtools™        
작성일 2008/09/10
첨부#1 shiftout.pde (3KB) (Down:820)
Link#1 ?p=177 (Down:342)
ㆍ추천: 0  ㆍ조회: 3364   
  아듀이노 shiftOut
참조 : http://www.bryanchung.net/?p=177
제목 : Arduino with 8×8 LED Matrix

목적
아듀이노 기판으로 제어하는, MAX7219 구동 8x8 LED 매트릭스의 실습입니다.
특별한 기판은 MAX7219와 8x8 LED를 고정합니다.
별도로 분리된 12V 전원이 필요합니다. 이 전원은 아듀이노 기판에 들어가면 안됩니다.  

 

MAX7219를 제어하려면 4개의 연결이 필요합니다.
Data -------- 표시할 데이터 (직렬로 들어가는 여러개의 표시값)
Clock ------- 클럭 (직렬 데이터를 시프트한다)  
Latch/load -- 래치(시프트한 데이터를 표시)
Ground -----  접지(-)
시프트 명령을 출력한 다음에는, latch 핀을 LOW에서 HIGH로 출력한다.

시프트 출력

data와 clock 핀은 아듀이노의 74HC595를 제어하는 shiftOut() 명령과 일치한다.
참조 : http://www.arduino.cc/en/Reference/ShiftOut
 
다음 소스는 시프트 출력을 시험하기 위해 단순히 0~255를 출력한다
int latchPin = 8;    // HC595의 ST 핀    // 포트 핀에 이름을 지어준다.
int clockPin = 12;  // HC595의 SH 핀
int dataPin = 11;    // HC595의 DS 핀

 
void setup()         // 기판의 작동을 준비 
{
  pinMode(latchPin, OUTPUT);      // 3개의 핀을 출력으로 설정

  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop()          // 무한반복 주함수

{
  for (int j = 0; j < 256; j++)    // 0 ~ 255 까지 {,,,}를 실행한다.

 {
    digitalWrite(latchPin, LOW);        // latch를 LOW로 출력. (HC595를 전송상태로)

   // 시험용 시프트 출력 명령 (data, clock을 하위우선으로 255개 출력한다)
    shiftOut(dataPin, clockPin, LSBFIRST, j);     

    digitalWrite(latchPin, HIGH);                        // latch 핀을 HIGH로 출력 (시프트한 데이터로 새롭게 표시한다)
    delay(1000);                   // 1 초를 기다린다 
  }                                     // 0~255 반복문의 끝
}                                       // loop를 다시시작 

 
데이터의 구조는 8x8 LED 매트릭스이다. 8x8 LED 어레이를 사용한다.
LED에서 하나의 ROW (수직줄)은 Y배열변수를 사용한다,
ROW(수직줄)에서 하나의 표시할 비트는 X 배열변수를 사용한다,
1은 켜고 0은 끈다. X는 1 비트씩 시프트된다. 
 
소스 예제 :
// MAX7219에 연결된 LED 어레이의 1줄을 움직인다.
int CLOCK = 12;  // D12를 clock으로 사용
int LATCH = 13;  // D13을 latch로 사용
int DATA  = 11;   // D11을 data로 사용
byte matrix[8];   // 8개의 표시 값을 사용할 배열변수 8 바이트
int idx = 0;          // 표시할 줄의 번호를 0으로 시작

void setup()        // 기판의 준비
{
  pinMode(CLOCK, OUTPUT);    // 3개의 핕을 출력으로 설정
  pinMode(LATCH, OUTPUT);
  pinMode(DATA,  OUTPUT);

  digitalWrite(CLOCK, LOW);       // 3개의 핀을 LOW로 출력
  digitalWrite(LATCH, LOW);
  digitalWrite(DATA,  LOW);
  initLED();                                // MAX7219를 리셋한다
  clearLED();
}

void loop()                                 // 무한반복 주함수의 시작  
{
  for (int j=0;j<8;j++) updateLED(idx, j, true);       // idx에 순서대로 0~7을 하나씩 저장 
  refreshLED();                          //
  delay(200);
  for (int j=0;j<8;j++) updateLED(idx, j, false);
  refreshLED();

  delay(100);                                // 0.1초를 기다린다. (현재 줄을 표시하는 시간)
  idx++;                                       // idx에 1을 더하고 idx에 다시저장
  idx %= 8;                                  // idx를 8로 나누고, 정수만 저장(소슷점을 버린다)
}                                                // 무한반복 주함수의 끝 (주함수 시작으로 복귀)

void ledOut(int n)                         // 주함수에서 부르는 보조함수, 정수형 변수 n을 주함수로 부터 받아서 실행한다
{
  digitalWrite(LATCH, LOW);          // latch 핀을 전송상태로 변경
  shiftOut(DATA, CLOCK, MSBFIRST, (n>>8));    // 상위비트 n/2회 시프트 출력.
  shiftOut(DATA, CLOCK, MSBFIRST, (n));         // 상위비트 n회 시프트 출력 
  digitalWrite(LATCH, HIGH);          // 시픝한 표시값들을 출력한다

  delay(1);                                   // 1ms 을 기다린다. (시간간격을 맞추기 위해, 아무일도 안한다)
  digitalWrite(LATCH, LOW);          //  latch 핀을 원위치
}

void initLED()                              // MAX7219를 초기화하는 전용명령 (IC 데이터에 나온다) 
{
  ledOut(0×0B07);
  ledOut(0×0A0C);
  ledOut(0×0900);
  ledOut(0×0C01);
}

void clearLED()                          // LED에 표시할 변수를 모두 0으로 지운다
{
  for (int i=0;i<8;i++) matrix[i] = 0×00;
  refreshLED();                          // 0으로 지운값을 출력한다 =실지로 LED를 지운다.
}

void refreshLED()
{
  int n1, n2, n3;                         // 지역변수 3개를 선언 (저장할 공간의 이름을 준비)
  for (int i=0;i<8;i++)                   // 8번 반복 실행
  {
    n1 = i+1;                              //  n1 = 1~8 까지 변화한다
    n2 = matrix[i];                      // 저장된 표시값을 읽어서 n2에 저장
    n3 = (n1<<8) +n2;                  // 표시값을 n3를 만든다. 
    ledOut(n3);                           // 실제로 LED를 제어하는 보조함수를 실행.
  }
}

void updateLED(int i, int j, boolean b)   // 새로운 표시값으로 LED를 표시한다.
{
  int t = 1;                                   // 지역변수 3개를 준비한다.
  int n = 0;
  int m = 0;

  if (j==0) m = 7;
  else m = j-1;
  n = t<<m;
  if (b) matrix[i] = n | matrix[i];
  else
 {
    n = ~n;
    matrix[i] = n & matrix[i];
  }
}

MAX7219는 우리나라에서 잘 안씁니다, 그렇지만 시프트출력을 위해서 설명햇습니다.
이 자료를 74HC595에서 시험해 보고, 결과를 수정해야 할 것 같습니다. 

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
  
AVRTOOLS™

   
  0
9999
윗글 아듀이노 터치스위치
아래글 아듀이노 스위치와 LED점등
    N         제목    글쓴이 작성일 조회 추천
판매상품의 사용설명서는 다른 자료실에,,, avrtools™ 2011/08/30 (화) 1461 0
23 LCD 문자표시 (신형) avrtools™ 2012/04/12 (목) 2101 0
22 아듀이노 멜로디 연주 avrtools™ 2008/08/22 (금) 3454 0
21 아듀이노 4비트 LCD (구형) avrtools™ 2008/09/02 (화) 4302 0
20 아듀이노 가변저항 avrtools™ 2008/08/26 (화) 3073 0
19 직렬 데이터 이동(shift) 출력 avrtools™ 2012/04/10 (화) 1711 0
18 디지털 신호의 펄스폭을 측정하는 함수 avrtools™ 2012/04/10 (화) 1973 0
17 EEPROM 읽기, 쓰기 함수 avrtools™ 2012/04/10 (화) 2281 0
16 변수의 크기 avrtools™ 2012/04/10 (화) 1613 0
15 플레시 메모리에 상수를 저장하고 읽는 함수 avrtools™ 2012/04/10 (화) 1897 0
14 소프트웨어 Serial 함수 avrtools™ 2012/04/10 (화) 1793 0
13 아듀이노 터치스위치 [3] avrtools™ 2008/08/11 (월) 4104 0
12 아듀이노 shiftOut avrtools™ 2008/09/10 (수) 3364 0
11 아듀이노 스위치와 LED점등 avrtools™ 2008/08/13 (수) 4634 0
10 아듀이노의 주파수 출력 함수 avrtools™ 2009/10/20 (화) 2736 0
9 One Button Switch Library avrtools™ 2012/03/09 (금) 1841 0
8 아듀이노 논리연산 avrtools™ 2008/08/26 (화) 3004 0
7 아듀이노 PS2 키보드 읽기 avrtools™ 2008/09/10 (수) 4072 0
6 아듀이노 가로채기 함수 avrtools™ 2008/08/23 (토) 3185 0
5 아듀이노 전용명령 avrtools™ 2008/09/16 (화) 3914 0
4 아듀이노 PWM 출력과 타이머1 전용명령 avrtools™ 2008/08/19 (화) 3561 0
3 8비트 포트의 단일비트 조작방법 avrtools™ 2010/10/30 (토) 2365 0
2 직렬포트에서 문자를 받아 숫자 int로 저장 avrtools™ 2012/04/08 (일) 1682 0
1 직렬통신포트의 초기화 avrtools™ 2012/04/06 (금) 1468 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0