A PHP Error was encountered

Severity: Notice

Message: Undefined index: HTTP_ACCEPT_LANGUAGE

Filename: core/KF_Controller.php

Line Number: 155

시프트 레지스터로 다수 LED 깜빡이기

초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

시프트 레지스터로 다수 LED 깜빡이기

2015-01-23 10:13:15

개요

1) 시프트 레지스터란 무엇인가?


플립플롭(flip-flop) 또는 래치(latch)라고도하는, 0과 1만을 갖는 1비트 값을 저장할 수 있는 기본 회로가 있습니다. 레지스터란 이런 플립플롭을 여려 개 일렬로 연결하여, 여러 비트로 구성한 2진수를 저장할 수 있게 한 것을 말합니다.



 

이 예제에서 사용된 8bit 시프트 레지스터는 8개의 플립플롭이 연결되어 있으며, 단방향 또는 양방향으로 매 클럭펄스마다, 한 플립플롭 씩 저장된 값을 좌우로 이동시킬 수 있는 레지스터입니다. 여기서 클럭 펄스란 일정한 간격을 갖는 전기적 펄스로 회로내의 동작을 동기화하는데 사용됩니다.  (전기적 펄스에 대한 내용은 2.3 아날로그와 디지털, 2.4 펄스 폭 변조를 참고합니다.)

 

시프트레지스터의 용도로서 대표적인 것은 데이터의 직렬-병렬변환(SIPO : Serial In Parallel Out)으로 직렬입력으로 다중 출력을 만들어 낼 수 있습니다. 이 예제에서는 오렌지보드의 핀 3개를 사용하여 8개의 LED 를 제어 해 봅니다.
 

 

 

 

2) 시프트 레지스터 사용방법

 

 

 


시프트 레지스터는 핀마다 고유의 기능이 있으므로 연결시 방향에 주의 합니다. 홈이 파진 부분의 좌측이 1번핀이 되며,  총 16개의 핀으로 구성되어 있습니다.
 


부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 시프트 레지스터 1 SN74HC595N
3 LED 8 LED 색상 무관
4 브레드 보드 1  
5 점퍼케이블  18  

 

부품명 오렌지 보드 시프트 레지스터 LED 브레드 보드 점퍼케이블
파트

 

하드웨어 making

브레드 보드


1. 오렌지보드의  5V핀을 브레드보드의 +버스에 연결합니다.

2. 오렌지보드의 GND핀을 브레드보드의 -버스에 연결합니다.

3. 시프트 레지스터를 그림과 깉이 홈이 위로가게하여, 양쪽 IC영역에 걸치도록 꽂습니다.

4. LED 8개를 캐소드(짧은 단자)가 반대쪽의 -버스에 연결되도록 꽂습니다.

5. 각 LED의 애노드(긴 단자)에 330Ω 저항을 연결합니다.

6. 시프트 레지스터의 15, 1, 2, 3, 4, 5, 6, 7번핀을 8개의 LED 애노드에 각각 연결합니다.

7. 시프트 레지스터의 8번핀과 13번을 -버스에 연결합니다.

8. 시프트 레지스터의 10번핀과 16번핀을 +버스에 연결합니다.

9. 시프트 레지스터의 12번핀을 오렌지보드 2번핀에 연결합니다.

10. 시프트 레지스터의 11번핀을 오렌지보드 3번핀에 연결합니다.

11. 시프트 레지스터의 14번핀을 오렌지보드 4번핀에 연결합니다.

12. 8개의 LED 캐소드가 연결된 -버스를 오렌지보드 GND와 연결된 -버스와 연결합니다. 



 

전자 회로도


소프트웨어 coding

/*
 제목		: 시프트 레지스터로 다수 LED 깜빡이기
 내용		: 시프트 레지스터로 8개의 LED를 한번에 깜빡이게 해봅니다.
 */

// 시프트 레지스터의 STcp(latch)를 2번번으로 설정합니다.
// 클럭 입력이 활성화되면, 입력을 받아 저장하고, 클럭 입력이 비활성화되면 출력 측으로 전달합니다.
// 출력은 클록이 다시 활성화될 때까지 그 값을 유지할 것이다.
int latch = 2;
// 시프트 레지스터의 SHcp(clock)를 3번핀으로 설정합니다.
// 클럭펄스를 발생시켜 데이터 값이 레지스터에 저장되도록 합니다.
int clock = 3;
// 시프트 레지스터의 Ds(data)를 4번핀으로 설정합니다.
// 이 데이터 핀을 통해 시프트 레지스터에 원하는 동작을 수행하게 합니다.
int data = 4;

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
	// latch가 연결된 핀을 OUTPUT으로 설정합니다.
	pinMode(latch, OUTPUT);
	// clock가 연결된 핀을 OUTPUT으로 설정합니다.
	pinMode(clock, OUTPUT);
	// data가 연결된 핀을 OUTPUT으로 설정합니다.
	pinMode(data, OUTPUT);
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
	//8개의 LED를 순차적으로 켜고 끕니다.
	for (int i = 0 ; i < 8 ; i++) {
		// latch의 비활성화하여 데이터를 입력받도록 설정합니다.
		digitalWrite(latch, LOW);
		// 데이터로 입력된 값을 클럭 펄스로 동기화하여 시프트 레지스터에 저장합니다.
		shiftOut(data, clock, MSBFIRST, 1 << i);
		// latch를 활성화하여 저장된 입력된 데이터를 출력핀으로 전달합니다.
		digitalWrite(latch, HIGH);
		// 1초간 대기합니다.
		delay(1000);
	}
}

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

오렌지 보드, 시프트 레지스터, LED

물공 2016-02-17 13:57:39

shiftOut(data, clock, MSBFIRST, 1 << i);
여기서 이 뜼이 data와 clock 핀은 이용한 오른쪽 부터 시작을 한건데 왼쪽으로 1비트씩 이동시킨다는 뜻 인가요??????