본문 바로가기

이론/AVR

무이메이커스_[arduino]Shift Register(시프트레지스터) 사용하기/아두이노핀 부족할 때 대처법/74HC595

안녕하세요 허니컴의 무이메이커스입니다.

오늘은 아두이노 I/O포트가 부족할 때 해결법을 알아보겠습니다.

< 문제점 >

아두이노에 여러개의 센서나 모듈을 연결해서 사용하다보면 아두이노 입/출력 핀이 부족할 때가 있습니다. 입출력 핀이 부족한 경우의 해결책으로 Shift Register을 사용하여

아두이노 3개 핀으로 8개 LED를 제어하는 방법을 알아보겠습니다.

Shift Register는 clock신호를 인가할 때마다 비트를 한자리 씩 옮기는 레지스터입니다.

 

< 아두이노 시프트레지스터 회로도 >

사용부품 : 74HC595 1개, LED 8개

 

< 아두이노 시프트레지스터 연결방법 >

74HC595 핀 배치도

 

ARDUINO (UNO)

Shift Register (74HC595)

LED

 

1~7, 15

LED의 +

GND

8,13

LED의 -

5V

10,16

 

3

11

 

2

12

 

4

14

 

 

< 아두이노 시프트레지스터 소스코드 >

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

 

int latch = 2;

int clock = 3;

int data = 4;

int i;

 

void setup() 

{

  pinMode(latch, OUTPUT);

  pinMode(clock, OUTPUT);

  pinMode(data, OUTPUT);

}

 

void loop() 

{

  for (i=0 ; i<8 ; i++)

  {

    digitalWrite(latch, LOW); //데이터를 입력받을 때에는 latch를 LOW로 설정 

                              //latch는 저장된 값을 그대로 내보내거나 데이터를 차례로 이동시킬 때 사용

    shiftOut(data, clock, LSBFIRST, 1 << i); 

    digitalWrite(latch, HIGH); //입력된 값들을 출력할 때에는 latch를 HIGH로 설정

                               //latch는 저장된 값을 그대로 내보내거나 데이터를 차례로 이동시킬 때 사용

    delay(500);   

  }

  

  for(i=0 ; i<8 ; i++)

  {

    digitalWrite(latch, LOW);

    shiftOut(data, clock, MSBFIRST, 1<<i);

    digitalWrite(latch, HIGH);

    delay(500);

  }

  

  for(i=0 ; i<8 ; i+=2)

  {

    digitalWrite(latch, LOW);

    shiftOut(data, clock, MSBFIRST, 2<<i);

    digitalWrite(latch, HIGH);

    delay(500);

  }

  

}

Colored by Color Scripter

 

< 동작설명 >

시프트레지스터의 클럭 입력이 활성화 됐을 때 입력을 받아 저장하고, 클럭이 비활성화 됐을 때 출력 측으로 전달합니다.

Clock : HIGH상태일 때 시프트레지스터의 값이 1비트씩 이동

LATCH : 저장된 값을 그대로 내보내거나 데이터를 차례로 이동시킬 때 사용

digitalWrite(latch,LOW) : latch를 비활성화 하여 데이터를 입력받도록 설정

digitalWrite(latch,HIGH) : latch를 활성화 하여 데이터를 출력핀으로 전달

shiftOut() : 데이터를 시프트레지스터에 저장

 

LSB(최하위비트, 74H595의 QH, 화면상 오른쪽 파란색LED)부터 한칸 간격으로 LED가 켜집니다.

 

 

MSB(최상위비트, 74H595의 QA, 화면상 왼쪽 흰색 LED) 부터 한칸 간격으로 LED가 켜집니다.

 

 

MSB(최상위비트, 74H595의 QA, 화면상 왼쪽 흰색 LED) 부터 두칸 간격으로 LED가 켜집니다.

 

< 동작영상 >