Hardware | 74HC595 shift register 를 사용해 보자

|

1. Shift Register


LED bar graph 를 컨트롤 하려면 shift register 가 필요 합니다.


Arduino 의 digital pin 에 직접 연결하면 LED bar graph 를 컨트롤 할 수 있습니다만,

D2 ~ D13 에서, 총 12개의 LED 만 동시에 컨트롤을 할 수가 있습니다.


LED bar graph 에 대해서는 다음 글을 참고해 주세요.


* Hardware | LED bar graph 를 이용해 보자

http://chocoball.tistory.com/entry/Hardware-LED-bar-graph


이제 Shift Register 를 구입해 보고자 합니다.




2. 구입


AliExpress 에서 검색해 봅니다.

10개에 1천원도 하지 않는 가격!!! 거기에 무료 배송이라니.

오히려 제가 업자 걱정을 하게 되는 가격입니다.


https://ko.aliexpress.com/item/10pcs-free-shipping-SN74HC595N-SN74HC595-74HC595N-74HC595-DIP-16-Counter-Shift-Registers-Tri-State-8-Bit/32429190104.html





3. 도착


포장은 DIP 다리가 잘 보호되도록 플라스틱 릴에 넣어서 왔습니다.



제가 개인적으로 좋아하는 Texas Instruments 사에서 제조된 chip 입니다.



대학교 실험과목에서 많이 썼었는데...

그땐 공부가 너무 싫어 놀기에만 정신이 팔려 자세히 알지도 못했습니다.


이제는 공부의 개념이 아니라 취미의 개념으로 접근하니 즐겁기만 합니다.




4. Specification


스펙은 제조사에서 공유하고 있습니다.


sn74hc595.pdf


아마 이 문서만 빠삭하게 알고 있으면 활용도 100% 일 듯 합니다.

온갓 온도 / 전압 특성과 패키징에 대해서 자세히 나와 있습니다.


Chip 개발에 있어, 간단한 것이라도 이렇게 많은 내용을 포함해야 한다니 대단한 작업인것 같습니다.



회로 구성에 있어서 보통 5V 로 구동한다고 하지만,

Texas Instruments 에서 생산한 SN74HC959 는 3.3V 에서도 잘 동작하도록 제조된것 같습니다.

사양서에도 2V ~ 6V 사이에 구동된다고 합니다.



Clock 에 따라서 각각의 pin state 를 컨트롤 하고 있다는 것을 알 수 있습니다.




Function table 을 가지고 chip 의 기능을 모두 설명해 놨습니다.
위의 두개의 표만으로 이 chip 의 구동에 대해서 설명이 됩니다.




5. Layout


Shift Register 를 이용하여 arduino 와 연결하면 다음과 같은 구성이 됩니다.


  LED       | Shift Register | Arduino
  Bargraph  |   SN74HC595N   |  Nano
---------------------------------------
  anode 1   | Q1 (pin 1)     |
  anode 2   | Q2 (pin 2)     |
  anode 3   | Q3 (pin 3)     |
  anode 4   | Q4 (pin 4)     |
  anode 5   | Q5 (pin 5)     |
  anode 6   | Q6 (pin 6)     |
  anode 7   | Q7 (pin 7)     |
            | GND (pin 8)    |  GND
            | Vcc (pin 16)   |  3.3V
  anode 0   | Q0 (pin 15)    |
            | DS (pin 14)    |  D11     --> dataPin
            | OE (pin 13)    |  GND
            | ST_CP (pin 12) |  D8      --> latchPin
            | SH_CP (pin 11) |  D12     --> clockPin
            | MR (pin 10)    |  3.3V
----------------------------------------


회로도는 다음과 같습니다.



회로도에서도 알 수 있듯이, arduino 와의 연결선은 단 3개로 단축됩니다.



모든 연결은 shift register 가 담당하니, 선의 복잡도는 그대로일 수 밖에 없습니다.

다만, 복잡한 연결은 shitf register 가 담당하고 arduino 는 추가 기기들을 연결하는 controller 역할을 더 수행할 수 있게 됩니다.





6. Source


구동 source code 입니다.


int latchPin = 12;
int clockPin = 11;
int dataPin = 13;
byte leds = 0;
int currentLED = 0;

void setup() {
	pinMode(latchPin, OUTPUT);
	pinMode(dataPin, OUTPUT);
	pinMode(clockPin, OUTPUT);
	
	leds = 0;
}

void loop() {
	leds = 0;
	
	if (currentLED == 7) {
		currentLED = 0;
	} else 	{
		currentLED++;
	}
	
	bitSet(leds, currentLED);
	
	digitalWrite(latchPin, LOW);
	shiftOut(dataPin, clockPin, LSBFIRST, leds);
	digitalWrite(latchPin, HIGH);
	
	delay(250);
}




7. 확인


실제 연결 사진입니다.



스파게티~~~.





8. 번외


Shift register 는 clock 과 전압 high/low 를 통하여 컨트롤 하게 됩니다.


예전에 AliExpress 에서 부품을 조립하여 사용하는 Oscilloscope 인 DSO 150 를 만들어 놨으니,

파형을 확인해 보고 싶어졌습니다.


* Hardware | DSO150 Oscilloscope

http://chocoball.tistory.com/entry/HardwareDSO150Oscilloscope


Arduino 의 D12 에서 clock 을 발생하므로 확인해 봅니다.



흠흠, 정말 사각형 클럭이 보이네요.


D11 인 data 통신을 확인해 봅니다.



필요한 값을 shift register 에게 보내고 있다는 것을 알 수 있습니다.


LED 측의 값을 확인해 봅니다.



LED 점등은 shift register 를 통하여 High/Low 로 확인이 됩니다.




FIN


Shift register 는 정말 clock 으로 동작하는 것을 확인할 수 있었습니다.

이제 LED bar graph 두개 이상을 한번 연결해 보고싶네요.

And