3장. 74HC595, LED 실습
실습은 개인 학습을 위해 "주) 엘케이 임베디드" 사이트에서 구매한 아두이노 코딩 배우기 고급 키트를 이용한 학습입니다. 동봉된 책을 기반으로 학습하면서 개인적인 궁금증과 추가 필요한 부분을 정리한 블로그임을 미리 알려드립니다
< 준비물 >
아두이노 우노 R3 : 1개
USB 케이블 : 1개
점퍼 케이블(숫숫) : 30개가량
브레드 보드 : 1개, 830홀 사용
74HC595 : 1개
LED : 8개
저항 : 220Ω 8개
< 개요 >
74HC595를 이용 8개의 LED를 0.5초 간격으로 순차 점등하는 실습니다.
팅커 캐드 링크입니다 : https://www.tinkercad.com/things/0eSQkDdIAj5
< 참고 지식 >
⦿ 74HC595
74HC 시리즈 중 가장 범용적인 시프트 레지스터 IC입니다. 아두이노에서는 소수의 출력 포트로 여러 개의 출력 포트를 제어할 때 주로 사용합니다. 시프트 레지스터에는 여러 가지가 있지만 이번에 사용한 74HC595는 직렬 신호를 병렬 신호로 변환해주는 컨버터 이기도 합니다.
⦿ 74HC595 PIN Assignment
- VCC (Pin no : 16) : 동작전압 DC 2V ~ 6V (아두이노 3.3V 혹은 5V 모두 사용 가능)
- GND (Pin no : 8) : Ground 접지
- A (Pin no : 14) : Serial Data Input 클럭 신호에 맞춰 데이트를 입력받는 핀
- QA ~QH (Pin no : 15, 1 ~ 7) : Parallel Data Output 출력을 담당하는 8개 단자, QA ~ QH까지 8개 순차적 연결
- OUTPUT ENABLE (Pin no : 13) : 출력 핀 전체를 한 번에 on/off 시키는 단자. 출력 신호를 LED에 연결 사용 시 아두이노 PWM 단자를 이용 LED 밝기 조절이 가능합니다. 일반 사용 시 아두이노 GND 단자에 연결하여 사용하시면 됩니다. { 0일 때 ON, 1일 때 OFF}
- RESET (Pin no : 10) : 0의 신호가 들어오면 저장 데이터를 초기화 단자. 일반적으로 사용시 아두이노 VCC(3.3V 혹은 5V)에 연결 사용하시면 됩니다. {0일 때 RESET, 1 일 때 미동작)
- SHIFT CLOCK (Pin no : 11) : 시리얼데이터 입력단에서 입력받은 데이터를 시프트 레지스터에 저장 및 이동을 위한 클럭 신호 단자입니다.
- LATCH CLOCK (Pin no : 12) : 시프트 레지스터에 저장된 데이터를 스토리지 레지스터에 저장 후 페럴러 데이터 아웃으로 출력하도록 해주는 신호 단자입니다.
- S Q H (Pin no : 9) : 확장 신호 단자, 시프트 레지스터를 확장(추가) 사용 시 다음 시프트 레지스터로 데이터를 전달하는 출력 단자입니다. 다음 레지스터의 14핀에 연결 사용할 수 있습니다. 연결할 추가 레지스터가 없다면 미사용.
♤ 74HC595관련 자세한 정보는 저의 블로그에 따로 작성한 것을 참조하세요.... https://coding-sinki.tistory.com/13
IC 74HC595 (Shift Registor)
오늘은 74HC595 Shift Registor IC에 대하여 공부해 볼까 합니다. 하나의 bit를 저장하는 플립-플롭(Flip-Flop) 회로 여러 개를 일렬로 연결하여 여러 bit의 정보를 저장하는 것을 Registor라고 하고, 외부에
coding-sinki.tistory.com
< 실습코드 >
int dataPin = 2; //시리얼 data input으로 사용할 아두이노 출력 핀
int latchPin = 3; //Latch clock으로 사용할 아두이노 출력 핀
int shiftPin = 4; //Shift clock으로 사용할 아두이노 출력 핀
void setup()
{
pinMode(dataPin, OUTPUT); //data핀을 출력단으로 선언
pinMode(latchPin, OUTPUT); //latch핀을 출력단으로 선언
pinMode(shiftPin, OUTPUT); //shift 핀을 출력단으로 선언
}
void loop()
{
digitalWrite(latchPin, LOW); //latch핀을 로우
digitalWrite(shiftPin, LOW); //shift 핀을 로우
digitalWrite(dataPin, HIGH); //data 핀을 하이
digitalWrite(shiftPin, HIGH); //shift 핀을 하이 => data 핀(현재 하이) 값을 시프트 레지스터로 전달 및 데이터 옆으로 이동
digitalWrite(latchPin, HIGH); //latch 핀을 하이 => 시프트 레지스터 저장 값 출력
delay(500); // 지연 0.5초
digitalWrite(latchPin, LOW); //latch핀을 로우
digitalWrite(shiftPin, LOW); //shift 핀을 로우
digitalWrite(dataPin, LOW); //data 핀을 로우
digitalWrite(shiftPin, HIGH); //shift 핀을 하이 => data 핀(현재 로우) 값을 시프트 레지스터로 전달 및 데이터 옆으로 이동
digitalWrite(latchPin, HIGH); //latch 핀을 하이 => 시프트 레지스터 저장값 출력
delay(500); // 지연 0.5초
}