Arduino/Arduinio기초 실습

3장. 74HC595, LED 실습

sinki 2022. 4. 1. 07:39

실습은 개인 학습을 위해 "주) 엘케이 임베디드" 사이트에서 구매한 아두이노 코딩 배우기 고급 키트를 이용한 학습입니다. 동봉된 책을 기반으로 학습하면서 개인적인 궁금증과 추가 필요한 부분을 정리한 블로그임을 미리 알려드립니다

 

< 준비물 >

 

아두이노 우노 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

  1. VCC (Pin no : 16) : 동작전압 DC 2V ~ 6V (아두이노 3.3V 혹은 5V 모두 사용 가능)
  2. GND (Pin no : 8) : Ground 접지 
  3. A (Pin no : 14) : Serial Data Input 클럭 신호에 맞춰 데이트를 입력받는 핀
  4. QA ~QH (Pin no : 15, 1 ~ 7) : Parallel Data Output  출력을 담당하는 8개 단자, QA ~ QH까지 8개 순차적 연결
  5. OUTPUT ENABLE (Pin no : 13) : 출력 핀 전체를 한 번에  on/off 시키는 단자. 출력 신호를 LED에 연결 사용 시 아두이노 PWM 단자를 이용  LED 밝기 조절이 가능합니다. 일반 사용 시 아두이노 GND 단자에 연결하여 사용하시면 됩니다. { 0일 때 ON, 1일 때 OFF}
  6. RESET (Pin no : 10) :  0의 신호가 들어오면 저장 데이터를 초기화 단자. 일반적으로 사용시 아두이노  VCC(3.3V 혹은 5V)에 연결 사용하시면 됩니다. {0일 때 RESET, 1 일 때 미동작)
  7. SHIFT CLOCK (Pin no : 11) : 시리얼데이터 입력단에서 입력받은 데이터를 시프트 레지스터에 저장 및 이동을 위한 클럭 신호 단자입니다. 
  8. LATCH CLOCK (Pin no : 12) : 시프트 레지스터에 저장된 데이터를 스토리지 레지스터에 저장 후 페럴러 데이터 아웃으로 출력하도록 해주는 신호 단자입니다.
  9. 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초 
  }