-
아두이노 | SIPO 시프트 레지스터 74HC595Technology/Arduino 2024. 3. 15. 17:00
1. 시프트 레지스터
시프트 레지스터(Shift Resistor)는 이진수 정보를 저장하여 서로 주고 받는 논리 회로가 직렬로 연결된 전자 소자로, 직렬로 들어오는 정보를 병렬로 내보내거나(Serial-in, Parallel-out, SIPO), 병렬로 들어오는 정보를 직렬로 내보낸다(Parallel-in, Serial-out, PISO). SIPO 기능을 하는 시프트 레지스터를 사용하면 구동기를 제어하기 위한 여러 출력 정보를 직렬로 내보낸 뒤 병렬로 나눌 수 있기 때문에 마이크로컨트롤러의 출력 핀의 개수를 절약할 수 있다. 반대로 PISO 기능을 하는 시프트 레지스터를 사용하면 여러 센서로부터 들어오는 입력 정보를 하나의 직렬 정보로 받을 수 있기 때문에 마이크로컨트롤러의 입력 핀의 개수를 절약할 수 있다.
2. SIPO 시프트 레지스터 74HC595
74HC595는 SIPO 기능을 하는 8비트 시프트 레지스터로, 총 16개의 단자를 가지고 있다. DC 5V 전원과 접지 단자, 직렬로 입력된 정보를 병렬로 내보내는 출력 단자 8개, 입력 단자 3개, 그리고 테스트 단자 2개로 구성되어 있다. 테스트 단자 중 출력 활성화(Output Enable, OE) 단자는 디지털 신호 LOW가 입력되면 출력 단자가 활성화되는 단자로, 일반적으로 동작시키기 위해서는 해당 단자에 디지털 신호 LOW를 가하면 된다. 마스터 리셋(Master Reset, MR) 단자는 디지털 신호 LOW가 입력되면 시프트 레지스터의 모든 정보를 디지털 신호 0으로 초기화하는 단자이다. 초기화 없이 일반적으로 동작시키기 위해서는 해당 단자에 디지털 신호 HIGH를 가하면 된다. 시프트 레지스터 74HC595는 아래 링크로 접속하면 구매할 수 있다.
3. 제어 방법
시리얼 데이터 입력(Serial Data Input, SER) 단자에 8비트로 구성된 데이터를 입력한 뒤, 시프트 레지스터 클럭(Shift Resistor Clock, SRCLK) 단자에 디지털 LOW 상태에서 디지털 HIGH 상태가 되는 상승 에지(edge)를 형성하면, 시리얼 데이터가 시프트 레지스터에 차례대로 입력되어 저장된다. 이를 위해 아두이노 플랫폼에서는 시프트 레지스터 클럭 단자의 상승 에지에 맞게 시리얼 데이터를 전송하는 함수를 지원하는데, 왼쪽 끝 비트부터 순서대로 받을지(Most Significant Bit First , MSBFIRST) 오른쪽 끝 비트부터 순서대로 받을지(Least Significant Bit First, LSBFIRST) 설정할 수 있다. 그 다음 스토리지 레지스터 클럭 단자(Storage Resistor Clock, RCLK) 단자에 상승 에지를 형성하면 시프트 레지스터에 있던 데이터가 스토리지 레지스터에 저장되면서 출력 단자로 데이터를 내보낸다.
4. 예제
4.1. 회로 구성
4.2. 프로그램 작성
int DataPin = 12; // 정수형 변수 선언 후 디지털 핀 번호 12번으로 초기화 int ClockPin = 11; int LatchPin = 10; // 정수형 2차원 배열 선언 후 숫자를 나타내는 8비트 배열로 초기화 int DataArray[10] = { B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B10111110, // 6 B11100000, // 7 B11111110, // 8 B11110110 // 9 }; void setup() { pinMode(DataPin, OUTPUT); // 디지털 12번 핀을 출력(OUTPUT) 모드로 설정 pinMode(ClockPin, OUTPUT); pinMode(LatchPin, OUTPUT); } void loop() { // 7-세그먼트 디스플레이에 숫자를 순서대로 출력 for (int i = 0; i < 10; i++) { digitalWrite(LatchPin, LOW); // 디지털 10번 핀에 디지털 신호 LOW 출력 // ClockPin에서의 상승 에지에 맞게 DataPin으로부터 입력 받은 DataArray[i]를 오른쪽 끝부터 전달 shiftOut(DataPin, ClockPin, LSBFIRST, DataArray[i]); digitalWrite(LatchPin, HIGH); // 디지털 10번 핀에 디지털 신호 HIGH 출력 delay(1000); } }
[함께 읽으면 좋은 페이지]
참고문헌
- Arduino. (n.d.). shiftOut(). https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/. 2023.11.07.
- DroneBot Workshop. (2020). 74HC595 & 74HC165 Shift Registers with Arduino. YouTube. https://www.youtube.com/watch?v=Ys2fu4NINrA. 2023.10.31.
- element14 presents. (2020). How Shift Resisters Work - The Learning Circuit. https://www.youtube.com/watch?v=lK_LKo3MwgQ. 2023.11.08.
- Texas Instruments. (2004). SN54HC595, SN74HC595 8-bit Shift Resisters with 3-state Output Resisters. SparkFun. https://www.sparkfun.com/datasheets/IC/SN74HC595.pdf. 2023.10.31.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | 네 자리 7-세그먼트 디스플레이 (0) 2024.03.22 아두이노 | PISO 시프트 레지스터 74HC165 (0) 2024.03.15 아두이노 | 7-세그먼트 디코더 CD4511 (2) 2024.03.08 아두이노 | 7-세그먼트 디스플레이 (0) 2024.03.01 아두이노 프로젝트 | 적외선 무선 원격 통신을 이용한 무선 RC카 (0) 2024.02.23