74164 (Renesas SN74HC164N) / 8-BIT PARALLEL-OUT SERIAL SHIFT REGISTERS

 10여년 전 AVR 한다고 책 사놓고 함께 사두었던 IC 들이 몇가지 있어서 부품들을 하나씩 테스트 해보기로 합니다. 그중 첫 번째, Shift Register 입니다.

용도

 아두이노로 제어할 모듈들도 많은데 거기에 LCD 까지 붙여놓고 나면 GPIO 핀이 모자른 경우가 있습니다. 그래서 이런 부분을 충족 시킬 수 있는게 Shift Register 라고 들었기에, 정말로 이게 가능한지 함 해보도록 하겠습니다.

이름

 SN

  이건 뭐 회사에서 앞에 붙이는 이름이겠지요. SN 은 RENESAS 회사에서 주로 붙이는 것 같습니다.

 74

  74XX 시리즈 패밀리라는 얘기이지요. 예전 부터 TTL (Transistor - Transistor Logic)으로 불리우던 로직 IC 들에 붙는 이름입니다. 74 시리즈는 밑의 URL 가보시면 엄첨 많습니다. 전에 아는 분 책상에 TTL IC Spec 책자가 엄청 두꺼운게 놓여있었던걸 본게 기억나네요. 74 시리즈는 비교적 저전력으로 작동됩니다.

http://en.wikipedia.org/wiki/List_of_7400_series_integrated_circuits

 HC

 Highspeed CMOS 의 약자입니다. MOSFET 이 발명되고 나서 N / P 타입 MOSFET을 함께 구성하여 만든 회로가 CMOS 인걸로 알고있습니다. 이전의 Transistor 방식에 비해 훨씬 전력소모가 작지만 더 큰 전압을 제어할 수 있는걸로 알고있습니다. 요새는 그래서 대부분 HC 방식으로 나옵니다. LS 방식 (Lowpower Shotky)도 있지만 TTL 방식 대비 속도는 빨라도 전력 소모가 커서 요새는 HC 이네요.

속도도 TTL 만큼 나오고 (Highspeed) 전력 소모가 더욱 적으니 좋은놈이죠. 그리고 HCT 방식이 있는데요, 이건 HC 에  TTL 호환성을 가지는 녀석입니다. 그래서 TTL IC 들을 그대로 교체할 수 있고 함께 회로에 섞여있어도 잘 동작한답니다.

164

 이건 뭐 다 아시다 시피 모델 번호죠. 164 는 8-bit parallel-out serial shift register with asynchronous clear 라고 되어있네요. 즉, 8Bit Shift Register 입니다.

8Bit

 Shift Register 는 Flip-Flop 회로로 만들어집니다. 이 회로 1개는 1비트를 Holding 할 수 있습니다. 즉, HIGH 또는 LOW 상태를 저장할 수 있고, 이런걸 "메모리"라고 부르죠. 이게 8개 즉, 8Bit = 1Byte 있다는 이야기입니다. 1Byte 의 데이터를 저장할 수 있다는 이야기 이죠. 물론 전원이 계속 들어와 있는 상태여야 합니다.

Serial In / Parallel Out

 아두이노가 데이터를 Serial 하게 보내고 이걸 8Bit 로 Parallel 하게 나누어서 출력할 수 있다는 이야기 입니다. 이 74164 의 경우는 2 개의 Input 을 받아서 8개의 Output 을 만들어 냅니다. 그래서 아두이노에서는 선 2개만 있으면 됩니다.

Non-Latched 

 이 164는 Latch 가 있다는 말이 없다. 그러면 없는것이다. 이게 단점이 될 수 있는데, 가령, 00000001 을 표현하려고 하면, 처음에 Data 를 HIGH 를 주면, 1번 QA 가 우선 켜지고, 다음 Clock 이 주어지면 1 을 하나 Shift 하므로, 01 이 되고, 이런식으로 7번 Clock 을 주면 스크롤 되는것 같이 모든 Output 에 HIGH 가 한번씩 매우 짧게 간 후에야 00000001 이 됩니다.

 Latch 가 있는 IC 는 Data 를 준다고 바로 출력되는게 아니고 별도의 메모리가 있어서 일단 저장 되었다가 Switch 를 Flip 시키면 출력이 됩니다. 그러나 1개의 추가적인 선과 프로그램이 더 필요하게 됩니다.

 LED 를 통해 이녀석을 실험 해 볼텐데, 이렇게 스크롤 되는게 매우 빠르게 보일것입니다. 

PIN ARRANGE


핀은 저렇게 되어있습니다. 총 14개 핀 이고, 4개의 INPUT 핀(A,B,CLR,CLK)과 8개의 OUTPUT PIN (QA~QH),  VCC와 GND 가 있습니다.


 PIN 1,2 는 Serial Input 을 받기 위한 PIN 입니다. 두 핀은 AND Gate 로 되어 있어서, 1 이 입력되게 하려면 둘 다 HIGH 이어야 합니다. 둘 다 0 이면 0이 되는겁니다. 그런데 우리는 아두이노로 제어를 할 것이고 프로그램으로 충분히 HIGH / LOW 를 만들어낼 수 있기 때문에 AND Gate 는 필요 없습니다. 그래서 VCC 로 A 핀을 묶어 주도록 하겠습니다.


74164 의 3,4,5,6 번 PIN 은 첫 4 bit 가 되고, 10,11,12,13 은 그 다음 4비트가 됩니다.

CLR(-) 의 경우, LOW 를 주면 Register 를 모두 Clear 합니다. 나중에 쓰려면 쓰고, 우선은 High 로 주어서 유지합니다.


LED 켜기

 일단 164를 아래와 같이 연결해봅니다.


 74HC164N 의 Output Current 는 SPEC 에 Continuous Output Current 는 +-25mA 로 나와있습니다. LED 8개를 밝게 켜주기에는 무리가 있죠. TR 이 8개가 있어야 하겠네요. 하지만 일단 켜봅니다. LED 2V 전압 강하 예상하고, 20mA 는 8놈에게 나누어 줍니다. 개당 3mA 도 못먹겠네요. 저항이라도 좀 따로 달면 좋겠지만 일단 해봅니다.

연결할게 별로 없으니 심플하고 좋습니다. 의외로 밝기도 괜챦습니다. 잠시 동작하는 동영상을 보시지요.

위 동영상은 순차적으로 HIGH 를 SHIFT 한 예제 입니다. 소스코드는 다음과 같습니다.


다음은 왼쪽과 오른쪽을 깜빡여 봤고, Arduino 의 ShiftOut 함수를 활용해봤습니다.

소스코드는 다음과 같습니다.

결론

 잠깐 동안이었지만 글을 쓰면서 진행 하니 그래도 시간이 꽤 걸리는군요. 

 Shift Register 는 이렇게 채널을 확장하는데에는 필수적인 존재인듯 합니다. 하지만 이 74164 의 경우는 Latch 가 없어서, 처음에는 shiftOut 함수에 0xF0 을 주건 0x0F 를 주건 계속 불이 켜져있는 것처럼 보여서(Delay도 안주고 했더니 더했네요..^^) 참 난감했습니다. 빠른속도로 Shift 하는 잔상이 생겨서(스크롤 현상) 동작하지 않는것으로 느낀정도였습니다.

 앞으로 특수한 목적이나 Pin 이 너무 모자른 경우가 아니면 Latch 가 있는 Register (74594~599) 를 사용하는게 낫겠다는 생각입니다.






 



반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,