JC LAB


이번 포스팅에서 설명할 부분은 카운터와 분주회로입니다.


카운터


카운터는 시계에서 숫자를 올려주거나 내리는 역할을 합니다. 


본 프로젝트에서는 디지털 시계와 타이머, 스톱워치, 분주회로에서 사용됩니다.


예를 들어 10진 카운터는 0에서 9까지 카운트 되면 0으로 돌아가고 60진 카운터는 59까지 카운트 되고 0으로 돌아갑니다.


디지털 시계에서는 24진 카운터와 60진 카운터를 이용하여 설계합니다.


분으로 사용되는 60진 카운터에서 60이 되는 순간 0으로 바뀌며 클럭이 발생하고 이 클럭 신호는 24진 카운터를 1 증가시킵니다.


카운터 회로는 이전 포스팅에 올린 동기식 회로를 사용하여 설계합니다.


디지털 시계의 카운터 회로로 주로 사용되는 7490 IC의 로직 다이어그램 입니다. JK Flip Flop으로 설계된 것을 볼 수 있습니다.




프로젝트에서는 74HC390, 74LS90, 74HC192 카운터 IC를 사용합니다.


74LS90과 74HC192는 각각 업카운터, 업/다운 카운터 IC이고, 74HC390은 분주용으로 사용하며 분주회로 부분에서 설명하도록 하겠습니다.


90과 192는 모두 BCD로 출력이 되며 0-9까지의 카운터를 제공합니다.


먼저 90의 핀번호를 보면 아래와 같습니다.



Q A,B,C,D는 BCD출력 부분이며 CKA는 클럭을 입력하는 부분입니다.


CKB는 QA와 연결하여 0-9 카운터로 설정합니다.


R로 표시된 부분은 둘 모두 1이 입력될 시 초기화가 됩니다. R0은 0으로 초기화 되고 R9는 9로 초기화됩니다.


시계에서는 R0만 사용되므로 R9은 0으로 프리셋 시켜줍니다.


이 초기화 부분이 타이머의 진수를 결정하는 부분이 됩니다. 둘 모두 1이 아닐경우에는 자동으로 10진 카운터로 동작 합니다.


하지만 60진 카운터를 만들기 위해 6진 카운터로 사용하기 위해서는 6이 될 때마다 R0에 1신호를 넣어주어야 합니다.


예를 들어 숫자가 0부터 점점 카운트 되어 6이 되면 BCD는 0110으로 출력됩니다. 이때 BCD의 2번째, 3번째 자리를 R0인 2번, 3번 핀에 연결하면


출력이 6이 될때 R0가 11이 들어가므로 곧바로 0으로 초기화가 됩니다.


따라서 순서는 0, 1, 2, 3, 4, 5, 6(곧바로 0이되므로 눈으로 확인되지 않음), 0, 1 ..... 입니다.




60진 카운터에서 60을 다 채우고 나면 분 카운터일 경우에 시 카운터에 클럭을 보내주어야 합니다.


이 때는 마찬가지로 6진 카운터가 6이 되는 순간 클럭을 보내주면 됩니다.


BCD는 .... , 0011(3), 0100(4), 0101(5), 0110(6), 0000(0) 순서로 진행됩니다. 6이 될경우에 쓸수 있는 신호선은 BCD 세번째 자리입니다.


신호는 4일경우, 5일 경우에도 1을 출력합니다.


본 프로젝트에서 사용하는 모든 카운터 IC는 Falling Edge Triggered 입니다. 즉 클럭신호가 내려가는 부분에서 값이 바뀜니다.


따라서 BCD가 4일경우에는 0에서 1로 바뀌지만 Rising Edge이므로 다음 카운터에 영향을 주지 않고 BCD가 6에서 0으로 바뀔 때 1에서 0으로 내려가는 Falling Edge가 되므로 다음 카운터에 클럭이 들어가고 수가 증가하게 됩니다.



위처럼 진수를 정하고, 클럭을 맞게 연결하면 60진, 12진, 24진 99진등의 카운터를 설계할 수 있습니다.


아래는 해당 방법으로 60진 카운터, 24진 카운터의 PSpice 시뮬레이션입니다.


분주회로가 섞여있기 때문에 첫번째, 세번째, 네번째 신호를 보면 클락이 Falling Edge일 때마다 수가 증가하고 세번째 신호는 60진으로, 네번째는 24진으로 동작하는것을 볼 수 있습니다.






74HC192는 업/다운 카운터입니다. 타이머의 숫자를 감소시키기 위해서 다운 카운터가 들어간 192를 사용했습니다.


192의 핀번호는 아래와 같습니다.



192는 90보다 회로구성이 간단합니다.


192는 로드 할 BCD 값을 미리 설정 할 수 있습니다. ABCD에 0110(6)값을 입력할 시 LOAD에 0을 입력할시 출력 값이 0110으로 변합니다.


이 기능은 다운 카운트시에 사용됩니다. 192는 LOAD를 하지 않을 시 10진으로 동작하기 때문에 다운 카운트 시에는 ...3, 2, 1, 0, 9, 8 순으로 내려갑니다.


이때 6진 다운 카운트를 하고싶다면 9가 될때 LOAD를 통해 5로 값을 바꿔주어야 합니다.


UP과 DOWN 핀은 각각 클럭을 줄 시 업카운트, 다운카운트로 동작합니다.


본 프로젝트에서는 카운트 다운 기능으로 사용하므로 클럭은 DOWN에 입력하고 UP은 카운트할 숫자를 변경할 때에 사용했습니다.


BO와 CO는 0에서 9로 갈때 혹은 9에서 0으로 갈때 리플 신호를 발생시켜줍니다. 7490보다 편하게 다음 카운터에 신호를 보낼 수 있습니다.


192를 이용하면 90처럼 시계를 구성할 수 있지만 90에 비해서 가격이 높기 때문에 90을 다운 카운트가 아닐 경우에는 90을 사용합니다.





분주회로


분주회로는 신호를 쪼개는 회로입니다.


예를들어 클럭이 10번 튈때마다 한번의 클럭을 출력하고 싶을 때 사용합니다.


본 프로젝트에서는 이전 포스트에서 설명한 오실레이터를 1초로 만들기 위해 사용합니다.


오실레이터를 10MHz의 수정 발진자를 사용했기 때문에 1초에 무려 천만번의 클럭을 발생시킵니다.


여기에 분주회로를 달아서 천만분의 1을 하여 1초에 한번만 클록이 발생하도록 하여야 합니다.


74390을 사용하면 10번에 1번의 클록을 발생시키는 분주회로를 만들 수 있습니다.


이 회로를 오실레이터의 출력에 7개 직렬연결 하면 10MHz를 1MHz로 나눌 수 있습니다.



동작 원리는 카운터 회로와 마찬가지로 동작합니다. 390은 사실 10진 카운터입니다.


앞서 말한 대로 9에서 10(0)으로 넘어갈 때 나오는 신호를 이용하여 10 분주를 합니다.


따라서 90을 이용해서도 분주회로를 설계할 수 있습니다.


390을 이용하는 이유는 90에서 진수를 정할 수 있는 기능을 제거하고 10진만 사용하게 만듬으로서


한개의 카운터에 10진 카운터 두개를 넣어 집적도 면에서 효율적입니다.


아래의 핀번호를 보아 확인 할 수 있습니다.



CKB는 90과 마찬가지로 QA와 연결해주면 됩니다.