반응형

 【 아두이노 센서#9】 시프트 레지스터 이해하기 실습1

지난시간 시프트 레지스터의 개념에 대해 다루었다.(시프트 레지스터 이해하기

☜클릭).  

이제 이어지는 몇 가지 실험을 잘 수행 한다면 시프트 레지스터를 능숙히 다룰 수 있을 것이다. 



▶ 실험에 사용되는 74HC595 IC 자료



《 74HC595 IC 핀배열》


▶ 실습 목표 :  


1. 8bit 시프트 레지스터 IC 이기 때문에, LED 8개를 연결하고,  데이터(2진 값) 예, '10101010' 혹은 '01010101' 등을 LED로 시프트 시켜 표시해보는 실습이다. 

 

2. 예를 들어, 짝수번째 LED 켜기, 홀수 번째 LED켜기, 11110000, 00001111, 11001011, 등등 원하는 데이터를 아두이노에서 IC에 시리얼로 입력하면 패러럴(병렬) 형태로 LED로 나타낼 수 있다. 


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)





(괄호 안은 2단으로 연결할 경우 필요 수량)





▶ 실습 절차  : 

1. 위 회로 연결 도면을 보며 착오가 없도록 연결해준다. LED의 +, - 극성 방향에 주의 해서 연결한다. 

2. 저항은 LED를 보호해 줄 수 있는 저항 값을 달아주면 되기에 가지고 있는 저항 중에 100Ω~470Ω 사이의 저항값이 있으면, 어떤 것이든 사용가능하다. 


3. IC가 동작하기 위한 전원(vcc-16번, Gnd-8번)은 반드시 인가 되어야 동작이 되며, 만약 +,-를 정반대로 인가할 경우 IC가 손상될 수 있으니 주의한다.



▶ 프로그램 코드 및 설명 : 


const int SER=8;        // 아두 8<-> 595IC Serial Data  (14)

const int LATCH=9;  // 아두 9<-> 595IC  Latch CLK (12)

const int CLK= 10;    // 아두 10<-> 595IC Shift CLK (11)


void setup() {

  //시프트 레지스터에 연결된 각 핀의 입출력 모드를 출력으로 지정

  pinMode(SER, OUTPUT);

  pinMode(LATCH, OUTPUT);

  pinMode(CLK, OUTPUT);

  digitalWrite(LATCH, LOW);

  // 비트값 10101010 전송 (2진 값을 10진 값으로(170) 바꾸어본다

  shiftOut(SER, CLK, MSBFIRST, B10101010); 

  //LATCHHIGH 입력 : 홀수 LED 점등

  digitalWrite(LATCH, HIGH);

}

void loop() {     

          // Loop 문에는 비워 놓는다

}



1.  프로그램 코드를 파악할 때 맨 위쪽 《74HC595 핀배열 을 참고해서 본다면 파악하기가 훨씬 쉽다. 
2.  int 변수 선언에서 'const int' 라고 선언을 하면, 선언된 변수의 내용 값이 프로그램 내에서 어떤 계산이나 착오에 의해 변하는 것을 막고 싶을 때 선언하는 것이다. 때문에 이런 염려가 없을 경우는 그냥 'int' 로 선언 하면 된다. 

3.  shiftout() 함수 속 데이터 값은 2진 값 형태로 입력이 가능하고 10진값 등의 형태로도 입력이 가능하다. 따라서 B10101010을 10진값으로 변환하면 '170'이 되고 이값을 그대로 입력해도 똑같은 결과를 얻을 수 있다. 만약 2진 ↔ 10진 변환을 손쉽게 하고 싶다면, 윈도우에 있는 계산기(calculator)를 실행시키고 옵션에 공학용 계산기로 변환하면 2진, 8진, 10진, 16진 값을 동시에 확인 할 수 있어 편리하다.

▶ 실행 결과 :

 (영상은 고화질로 설정하고 전체화면으로 보세요)



▶ 아두이노 파일(다운) :

01_shift-Register.ino


반응형