아두이노 강좌 #20 시프트 레지스터 74HC595 내부 구조 및 동작 원리
Lucy Archive
Lucy / Facilitate4U
2020. 8. 8. 23:26

74HC595 Shift Register 원리 사용법74HC595 Shift Register 원리 사용법

Arduino Shift Register 74HC595

지난 포스트에서 shiftOut() 함수를 사용하는 방법에 대해 알아보았습니다. shiftOut() 함수는 시리얼 인터페이스를 장치에 사용 할 수 있으며 대표적으로 아두이노에서 쉬프트 레지스터 74HC595 를 제어하는데 많이 사용 됩니다. 본 포스트에서는

74HC595의 내부 구조와 동작 원리에 대해 설명

합니다.

📌 시프트 레지스터를 사용하기 위해 시프트 레지스터의 내부 구조를 알 필요는 없습니다. 이 포스트는 혹시 74HC595의 내부 구조를 이해하고 싶은 분들을 위해 작성하였습니다. 74HC595의 내부를 이해하면 더 복잡한 형태의 시프트 레지스터도 이해 할 수 있을 것이라 생각합니다.


시프트 레지스터

시프트 레지스터(Shift Register)는 일반적으로 직렬(Serial) 과 병렬(Pararrel) 인터페이스를 변환하는데 사용됩니다. 쉬프트 레지스터는 여러가지 종류가 있지만, 보편적으로 아래와 같이 3가지 종류가 있습니다. 

  • SIPO (Serial Input Parallel Output) : 직렬 입력을 병렬 출력으로 변환
  • SISO (Serial Input Serial Output) : 직렬 입력을 직렬 출력으로 변환
  • PISO (Parallel Input Serial Output) : 병렬 데이터를 직렬 출력으로 변환

74HC595

[각주:1]74HC595는 시프트 레지스터 IC로 SIPO 와 SISO 를 지원합니다. 아래는 74HC595 를 직렬 데이터 입력 하여 병렬 출력을 얻는 방식을 간략시 도식화 한 그림입니다. CLK 데이터의 상승 에지 타이밍에 DATA 라인의 전압 상태를 판단하고, 클럭 펄스의 순서에 따라 Q0 ~ Q7 출력 포트의 값을 변경 합니다. 

74HC595 간략한 도식화74HC595 간략한 도식화


74HC595 내부구조

위 그림은 74HC595의 주요한 기능을 간략하게 표시한 것이고, 아래 그림은 74HC595 내부 블록다이어그램과 사용 핀을 나타낸 데이터 시트의 그림입니다.

74HC595 의 내부 구조74HC595 의 내부 구조

74HC595 내부 구조를 나타낸 각각의 다이어 그램을 보면 아래와 같은 사실을 알 수 있습니다.

  • Logic Symbol : 5개의 핀으로 8+1개의 핀 제어가 가능함 (실제로는 DS, SH_CP, ST_CP 3개의 핀만 제어 해도 됩니다.)
  • Funcational Diagram : 74HC595 는 Shift RegisterStorage Register, 3-State Outputs 3부분으로 구성됨
  • Logic Diagram
    • Shift Register 와 Storage Register 는 D플리플롭(D Flip-Flop)으로 구성
    • 3-State Outputs 은 버퍼로 구성

Functional Diagram 에서 보여주는 3가지의 블록만 이해하면 74HC595 의 동작 원리를 이해 하는데 많은 도움이 됩니다. 

Shift Register : 데이터를 이동

아래은 D 플리플롭의 다이어그램과 진리표를 나타낸 그림입니다. 핵심적으로 알아 두어야 하는 부분은 CLK 핀의 전압이 상승에지(High Edge) 일 떄 D핀의 값이 Q로 출력된다는 것입니다. CLK 핀이 상승 에지가 아닌 경우에 Q값은 이전의 값을 유지하고 있습니다.  

D 플리플롭, D 래치D Flip-Flop

이런 특성을 가지는 D Flip-Flop 이 아래와 같이 여러 개가 연결 되어 있다고 생각해봅시다. 아래와 같은 배치의 경우 CLK 에 상승 에지 ( LOW -> HIGH )가 발생하면 Q0의 값은 Q1, Q1의 값은 Q2 ..... Q6 의 값은 Q7 로 이동합니다. 

74HC595 Shift Register 구조74HC595 Shift Register 구조


Storage Register : 데이터를 저장 및 업데이트

아래 그림은 위의 Shift Register 와 Storage Register 를 도식화한 그림입니다. CLK핀은 아래 D플리플롭의 라인을 컨트롤 하여 D플리플롭에 입력된 데이터를 오른쪽으로 이동 시킵니다. LATCH 핀은 윗 라인의 D플리플롭을 제어하며, LATCH 가 상승 에지 일 때 Q0 ~ Q7 단자의 데이터를 OUT1 ~ OUT7번 단자로 이동시킵니다. 

여기서 포인트는 OUT0 ~ OUT7 의 단자의 값은 LATCH 핀이 상승 에지가 되기 전까지는 이전의 값을 유지 합니다. 즉, 아래와 같은 그림에서 8개의 클럭과 함께 데이터를 보내면 Q0 ~ Q7 단자에 순차적인 데이터가 기록되고, 8번째 클럭 이후에 LATCH 핀의 전압을 LOW -> HIGH 로 변경하면 Q0 ~ Q7 의 데이터가 OUT0 ~ OUT7 단자로 일괄적으로 이동합니다. 결론적으로 8개의 클럭 펄스 발생 이후 LATCH 핀을 HIGH 로 변경 시 직렬 8비트 데이터가 병렬 8비트 데이터로 변환 됩니다.

74HC595 Storage Register 구조74HC595 Storage Register 구조

아래는 74HC595 의 타이밍 다이어그램에서 지금까지 설명한 내용만 하이라이트로 표시하였습니다. 아래의 타이밍 다이어그램에서, 데이터는 한번 HIGH 로 입력되고(한번 입력 된다는 의미는 HIGH 를 유지 하는 동안 CLK의 Rising Edge 가 한번 있었다는 의미 입니다.), 이후 클럭이 주기적으로 입력되고, LATCH 도 주기적으로 입력 됩니다. CLK의 Rising Edge 발생에 따라 HIGH 데이터는 Q0 -> Q1 ---> Q7 으로 이동하고, 중간 중간 LATCH의 Rising Edge 발생으로 Shift Register 의 데이터가 Stoage Register 의 출력으로 이동합니다. 아래 파형에서 LATCH 의 상승에지 타이밍에 따라 HIGH 데이터가 Q0 -> Q1 -> Q6 -> Q7 로 이동 하는 것을 확인 할 수 있습니다.

74HC595 의 타이밍 다이어그램74HC595 의 타이밍 다이어그램


3-State Output

74HC595의 출력부는 아래 그림과 같이 Tri-State Buffer 로 구성됩니다. 아래 그림과 같이 3상 버퍼는 쉽게 스위치와 같이 생각 할 수 있으며, 스위치의 입력부, 출력부, 스위치를 열고 닫는 3가지의 핀이 존재한다고 생각 할 수 있습니다. Enable 핀이 HIGH 일 때 스위치가 켜지고, LOW 일 때 스위치가 꺼진다고 가정을 해봅시다. Enable 핀이 LOW 인 경우 스위치는 오픈되어 OUT 단자에서 바라 보았을 때 아무것도 연결 된 것이 없는 저항이 무한대(선로가 끊어진 상태)로 보입니다. Enable 핀이 HIGH 인 경우 스위치가 켜지면 IN 단자의 전압이 OUT 단자 그대로 입력이 됩니다. 결론적으로 74HC595 의 OE핀으로 데이터를 출력핀으로 출력 할지 말지를 결정한다는 의미입니다.

74HC595 출력부74HC595 출력부 Tri-State Output

출력을 별도로 꺼야하는 상황이 없는 경우이면 74HC595의 단자를 LOW 전압인 GND 로 연결 하고, 상황에 따라 출력을 꺼야 하는 타이밍이 있는 경우 아두이노 또는 기타 마이크로의 컨트롤러의 GPIO 에 연결하여 사용합니다. 일반적으로 데이터가 변경되는 타이밍 (Latch 가 off -> On )되는 타이밍에 순간적인 데이터 변화 중에 출력을 비활성화합니다. 쉽게 말해서 옷 갈아 입는 과정 동안은 보여주지 않고, 옷을 다 갈아입고 보여주는 방식으로 종종 사용됩니다.

📌 OE 는 Output Enable 의 약자이고, OE 글자의 상단바는 Active Low 를 의미합니다. Active Low 란 LOW 전압일 때 해당 기능이 동작한다는 의미입니다. 즉, OE핀이 GND (LOW 전압) 으로 연결되어 있을 때 Output Enable 기능을 활성화 한다는 의미입니다.


마무리

본 포스트에서 시프트 레지스터로 많이 사용되는 74HC595 에 대해 알아보기 위해

내부 Shift Register, Storage Register, Tri-State Output 에 대해 알아보고 74HC595 동작 원리 이해를 위한 설명

을 작성하였습니다. 이후 포스트에서는 아두이노에서 시프트레지스터를 사용한 예제들을 다룰 예정입니다.

끝까지 읽어주셔서 감사합니다. 😊

관련포스트

👉 아두이노 74HC595 관련글 목록 보기

👉 아두이노 관련글 전체 목록 보기


  1. 74HC595 Datasheet : https://pdf1.alldatasheet.com/datasheet-pdf/view/15644/PHILIPS/74HC595.html [본문으로]