HEF4094, 3-wire 시리얼 형식 데이터 전송으로 출력포트 확장하기

HEF4094는 시리얼 데이터 형식으로 데이터를 전송한다. 여러개 연결해서 사용할 수도 있으니까 적은 수의 출력 포트를 원하는 만큼 확장해서 사용할 수 있다. 이번에 사용한 것은 PIC의 3개 단자를 사용해 8개 출력을 만들었다. 8개 출력은 FND에 연결해 테스트했는데 데이터 내용을 정리하면 HD44780 같은 2라인 캐릭터 디스플레이 장치에 사용할 수도 있다.
HEF4094와 비슷한 역할을 하는 것은 74HC595가 있고 이것과 반대로 병렬입력하여 시리얼 출력하는 74HC165도 있다.
HEF4094에 대한 다른 사람들의 자료를 찾아 보았는데 사용법이 상세하게 나와 있는 것이 없었다. Philips의 데이터시트에는 복잡한 설명이어서 좀 더 쉬운 설명이 필요했던거다. 네이버 카페와 NXP의 데이터시트에서 발견한 것이 다음과 같은 내용이다. 입력하는 것 보다 메모가 빨라서 급하게 썼다. ^^

CLK이 High로 바뀔 때 Data를 읽는다. 데이터는 하위비트에 채우고, 다음 데이터를 읽을 때 상위 비트로 쉬프트 하고 읽는다. STR이 High로 바뀔 때 Buffer에 저장된 값을 출력한다.
Shift 레지스터가 있고, Store 레지스터가 있고 출력 Register 가 있다. 클럭이 High 될 때마다 데이터를 계속 Shift 하면서 읽고 STR이 켜지면 Shift 레지스터에 있는 것이 Store에 들어간다. OE가 켜지면 Store Register의 값이 출력 Register 로 옮겨지고 외부 출력된다. OE 포트를 사용할 수도 있는데 OE가 켜지면 출력이 활성화 된다.
OE를 항상 켜 놓고 쓰면 STR 하는 순간에 바로 출력된다. FND를 연결해 놓았다면 OE를 껐다 켰다 하면서 FND를 블링크 할 수도 있겠다. (확인하지 않았다)
이론은 이런 것인데, 그 시간 간격을 얼마나 해야 적당할지를 결정해야 한다. 데이터시트 내용을 이리저리 읽어보고 정리한 결과다. – 이게 맞다!! 라는게 아니라 이런 것 같다~ 라는거다. – 이거 믿고 따라하는 것에 대해서 책임 못진다. 나는 이렇다는거다.. 비굴~

데이터가 먼저 변한 상태에서 클럭이 High로 바뀔 것. 데이터가 변한 상태에서 클럭이 High로 바뀌기 전에 30ns를 유지할 것. 클럭이 High인 상태가 30ns는 유지할 것. 데이터 전송이 끝나고 STR을 켰을 때 클럭의 4배 정도는(2 클럭이 지나는 시간) 유지할 것.



이게 끝 부분 모습
간격에 대한 스펙에서 Typ. 시간보다 min 값이 더 크면 최소값이 맞기는 한건가.. 싶은게 이해가 안된다. 이게 맞나 싶기는 한데… 하여튼 이런 결과를 바탕으로…

나는 이렇게 정리했다.

클럭 보다 데이터 시간을 길게해서 클럭이 High 인 동안에는 Data 변화가 생기지 않도록 한다.
1. 10개 여유를 보내고,
2. 데이터 변경 (High일때 변경, Low라면 그대로)
3. 20개 여유를 보내고 (30ns가 필요한데 20ns 정도만 세팅했다)
4. 클럭을 High로 변경 (데이터가 전송됨)
5. 30개 여유를 보냄
6. 클럭을 Low로 바꿈 (데이터 전송 마침)
7. 데이터를 Low로 바꿈 (High 상태였다면 Low로, Low였다면 그대로)
이렇게 1번~7번을 8번 반복하면 8비트가 전송되어 Shift Register에 들어있다.
전송 후 STR 을  High로 바꾸고 60개 정도 여유를 보낸다.
그려면 1 Byte 데이터가 출력포트에 나타난다.
데이터 전송은 보내고자 하는 Byte의 상위비트(7번)부터 보낸다.
받는 쪽은 0번 부터 저장하지만 Shift되면서 상위비트는 상위비트로 옮겨지고 최종 들어온 비트가 최하위 비트가 된다.
출력측 디바이스의 3개 포트로 총 8개 출력 포트를 사용할 수 있다.
HEF4094의 O’s, Os 포트를 사용해서 여러개의 HEF4094를 연결해 사용할 수 있으므로
출력측 디바이스의 3개 포트로 무한대의 출력 포트를 사용할 수 있게 된다.
– 뭐, 무한대까지나 사용할까마는…