【 아두이노 센서#8】 시프트 레지스터 이해하기 (Shift Register)
오늘은 시프트 레지스터에 대해 다루어 보고자 한다. 시프트 레지스터를 활용하면 여러개의 포트를 사용하여 병렬로 제어할 수 밖에 없는 상황에서, 한 두개의 시리얼 라인으로 제어가 가능한 장점이 있다. 이를 위해서는 시프트 기능을 구현해주는 레지스터 구조로 되어 있는 IC인 74HC595 칩을 활용 하면 된다.
▶ 실험에 사용되는 74HC595 IC 자료
《상세 스팩》
《로직 다이어그램》
1. 아래 이미지에서 보면 SER(시리얼 데이터)가 첫 번째 레지스터에 입력되고 동기클럭신호(SRCLK) 에 따라 다음단의 레지스터로 차례로 시프트(이동)된다.
2. 모든 데이터(8bit)가 스토리지 레지스터(버퍼)로 이동된 상태가 되면, RCLK(래치 클럭) 신호에 의해 외부로 동시에(병렬) 출력이 된다. 이 때 3-state 버퍼라고 하는 것이 출력에 달려있는데, OE(아웃 인에이블) 단자로 출력을 할지? 말지?(홀드)를 조절 가능하다.
《 핵심 개념 》
※ 아래 이미지를 보면 마지막 시프트 레지스터의 출력 단자에서 나오는 출력이 보일 것이다.(Serial data output) 이 단자를 두 번째 시프트 레지스터의 시리얼 데이터 입력으로 넣게 되면, 다단 연결이 가능하게 된다. 이런 식으로 3단, 4단, 다단연결이 가능하게 된다.
1. 먼저 버퍼(Buffer)란? 무엇인지 살펴보자, 아래 이미지에서 AND게이트에서 나오는 출력 C부분에 Buffer를 연결하였다.
보통의 경우 C에서 나오는 출력 값(예, 5V)의 레벨이 떨어져 나오는 경우가 발생할 수 있다. 그런 신호를 사용하면 회로에서 원하는 결과를 얻지 못 할 수 있다. 이 때 버퍼를 한 단계 거치게 되면 버퍼에 공급되는 전원을 출력하는 형태가 되기 때문에 출력레벨을 원래대로 맞출 수 있는 장점이 있어 사용하게 된다.
또한 결과적으로 출력값을 한 스텝 저장(홀드)하게 된다.
2. 두 개 이상의 게이트를 직결할 경우를 생각해보자,
AND1에서의 출력과 AND2에서의 출력을 하나의 라인으로 이용하고자 연결한 것이겠지만, AND1과 AND2에서 동시에 데이터가 출력이 되었을 때 문제가 된다.
만약 AND1에서 HIGH 신호가 나오고, AND2에서 LOW 신호가 동시에 나오면? HIGH 신호가 될까? LOW 신호가 될까? (마치 5V 선과 0V 선을 이어 붙인 것이나 다름없다)
또한 AND1에서 나온 X 출력이 F단자로 빠져나가기도 하겠지만, AND2의 출력단자 Y로도 역입력이 되게 되는데, 이는 무리가 가게 되고 경우에 따라서는 손상을 입힐 수도 있다.
2-1. 따라서 아래 이미지 처럼 각 AND게이트 각 출력단에 3state 버퍼를 연결하여 이런 문제를 해결하게 된다.
3 state란? 세 가지 상태를 말하는데, 0(LOW) 출력상태, 1(HIGH) 출력상태, Hi-임피던스 상태를 말한다.
- EN(인에이블) 단자를 이용해서 0과 1을 출력하게 만들거나(Enable 단자 On)
- 다른 곳의 출력이 여기에 되먹임 되지 않도록(손상이 가지 않도록) '고 임피던스'(High 저항) 상태로 만들수 있다(Enable 단자 Off).
'아두이노 > 2. 아두이노센서' 카테고리의 다른 글
【 아두이노 센서#10】 나이트 라이더 만들어보기 (0) | 2018.12.14 |
---|---|
【 아두이노 센서#9】 시프트 레지스터 이해하기 실습1 (0) | 2018.12.13 |
【 아두이노 센서#7】 I2C LCD로 TMP36 온도센서값 출력하기 #3 (0) | 2018.12.11 |
【 아두이노 센서#6】 I2C (Inter Integrated Circuit) 통신 (0) | 2018.12.10 |
【 아두이노 센서#5】 TMP36 온도센서 #3 with LCD (0) | 2018.12.07 |