본문 바로가기
전자/디지털클락

[디지털클락] 디지털시계 이론 및 자료

by Murciellago 2020. 7. 6.
반응형
SMALL

1. 디지털 시계의 구성


주변에서 흔히 볼 수 있는 디지털 시계는 카운터를 이용해 설계할 수 있는 대표적인 순차 회로의 하나이다. 이와 같은 디지털 시계를 설계하기 위해서 기본적으로 필요한 것이 무엇인지 살펴보자. 그림 14-1에 나타낸 디지털 시계의 전체 블록도를 보면 시간 표시를 위한 7세그먼트 표시기를 비롯하여 BCD-to-7세그먼트 디코더(TTL 7447), 12시간 표시기 디코더, modulo-N 카운터 등이 필요하다. modulo-N 카운터의 종류는 6진 카운터, 10진 카운터, 12진 카운터가 필요한데 9장 동기식 카운터에서 배운 대로 설계를 하면 된다.

 

 

2. 동기식 modulo-N 카운터 설계


이제부터 카운터를 설계해 보자. 디지털 시계에서 쓰게 될 카운터로는 enable 제어신호를 갖는 카운터를 설계해야 한다. 카운터가 enable 기능을 가져야 하는 이유를 살펴보자. 먼저 그림 14-1의 디지털 시계 전체 블록도에서 보았던 것처럼 모든 카운터가 하나의 공통 클럭펄스에 동기되어 있기 때문에 만일 enable 제어 기능이 없다면 클럭펄스가 하나씩 인가될 때마다 모든 카운터가 동시에 각각 1씩 증가하게 될 것이다. 그러나 시계는 초의 일의자리에 해당하는 10진카운터가 0부터 9까지 세는 동안에는 다른 카운터들은 동작을 하면 안되고, 이 카운터가 9까지 센 후 다시 0으로 돌아갈 때에 초의 십의자리에 해당하는 6진 카운터가 1증가해야 한다. 마찬가지로 분의 일의자리에 해당하는 10진 카운터는 초의 십의자리에 해당하는 6진 카운터가 5에서 0으로 변하는 시점에 맞추어 1씩 증가해야 한다. 전체적으로 시계의 각 자리별 카운터가 1이 증가하는 시점을 정리하면 다음과 같다.

 

초의 일의자리 10진 카운터 증가시점 : 1 Hz 클럭이 인가될 때마다
초의 십의자리 6진 카운터 증가시점 : 초의 일의자리 10진 카운터가 9에서 0으로 변할 때
분의 일의자리 10진 카운터 증가시점 : 초의 십의자리 6진 카운터가 5에서 0으로 변할 때
(즉, 59초에서 00초로 변할 때)
분의 십의자리 6진 카운터 증가시점 : 분의 일의자리 10진 카운터가 9에서 0으로 변할 때
(즉, x9분59초에서 y9분 00초로 변할 때)
시를 나타내는 12진 카운터 증가시점 : 분의 십의자리 6진 카운터가 5에서 0으로 변할 때
(즉, 59분59초에서 00분00초로 변할 때)

 

이와 같이 시계를 구성하는 각 카운터가 1이 증가하는 시점이 다르기 때문에 각 카운터마다 enable 기능을 갖는 카운터를 설계해야 한다. 즉, 각 카운터는 자신의 우측에 있는 카운터로부터 입력되는 enable 제어신호 Ei가 1일 때만 동작(1증가)하도록 설계해야 하며, 또한 자신의 좌측에 있는 카운터로 공급할 enable 신호 Eo를 만들어 출력해주어야 한다. 앞장에서 배웠던 내용들을 충분히 숙지하고 있는 독자라면 입력 Ei가 1일 때만 1씩 증가하는 동기식 카운터는 쉽게 설계할 수 있으리라 생각된다. 따라서 여기서는 자신의 좌측에 있는 카운터에 공급해 주어야할 Eo 출력신호를 만드는 방법을 먼저 고려해보자.대부분 카운터를 설계할 때 자신의 왼쪽에 있는 카운터에 공급해 줄 enable 출력 Eo는 단순히 현재 카운터가 최상위 값을 가리키고 있을 때 1을 출력하면 된다고 생각을 한다. 하지만 이는 잘못된 생각임을 그림 14-2에 나타낸 예를 통해 설명하도록 한다. 그림에서 알 수 있듯이 초를 나타내는 부분이 50초를 넘어서면서부터 초 부분의 6진 카운터는 최상위 값 5를 나타내게 된다. 이때 Eo가 1로 출력이 되면 분 부분의 10진 카운터의 Ei가 1로 되어 분의 10진 카운터도 클럭펄스에 동기되어 초 부분의 10진 카운터와 같이 증가됨을 볼 수 있으며, 이는 우리가 원하는 동작이 아님이 분명하다. 따라서 단순히 출력 Eo를 만들기 위해 자신의 카운터 값이 최대값인 경우만을 디코딩해서는 안되며, 카운터의 단계가 올라 갈수록 현재 자신의 값을 비롯하여 자신의 밑에 있는 모든 카운터가 각자의 최상위 값을 가지고 있을 경우에 출력 Eo를 1로 만들어 주어야 한다. 이와 같이 하기 위해서는 그림 14-3에 나타낸 것과 같이 모든 카운터는 자신이 최대값이 되었을 때 1이 되는 신호 Eo*와 자신에게 입력으로 들어오는 Ei 신호를 AND 연산한 결과를 출력 Eo로 내보내면 된다. 이와 같은 원리에 따라 설계된 enable 출력신호 Eo 생성회로를 그림 14-4에 나타내었다.

 

 

이제 입력 Ei가 1일 때만 동작하는 카운터 자체를 설계해 보도록 하자. enable이 없는 6진카운터와 BCD 카운터는 이미 9.2절에서 만들어 보았다(그림 9-4, 그림 9-6 참조). 여기서는새로운 회로를 만들기보다는 이미 만든 회로에 간단하게 enable 기능을 추가하는 방법을 알아보기로 한다. 설계하고자 하는 카운터는 입력 Ei가 0일 경우에는 동작을 하지 않고 현재값을 유지하고 있으면 된다. JK 플립플롭의 입력 J와 K에 각각 0이 들어오면 현재 값을 유지하는 특성을 이용하여 입력 Ei와 각 플립플롭의 입력 J, K로 들어가는 값을 각각 AND 연산하여 J, K에 입력하면 이 카운터는 enable 기능을 갖는 카운터로 바뀌게 될 것이다. 그림 14-5에 비교를 위해 enable 기능이 없는 6진 카운터와 enable 기능을 갖는 6진 카운터를 같이 나타내었다. enable 기능이 있는 카운터에서 Ei가 0일 경우에 모든 플립플롭의 J,K 입력은 0이 되어 현재 값이 유지되어 카운터가 멈추게되고, 1일 경우에는 Ei를 연결하기 전과 같은 값이 플립플롭의 입력 J, K로 들어가기 때문에 Ei가 없었을 때와 같이 동작한다.

 

 

그림 14-5의 enable 출력 Eo는 그림 14-4에서 살펴본 바와 같이 카운터가 최대값일 때 Ei와 AND 연산을 하여 출력하면 된다. 즉 6진 카운터에서 최대값(101)은 C와 A가 1일 때이므로 C, A, Ei를 AND 연산하면 Eo가 된다.
enable 기능을 갖는 10진 카운터와 12진 카운터에 대한 설계는 독자 스스로 해보길 바란다.

 

 

3. 시간을 표시하기 위한 디코더 설계
시계를 만들기 위해서는 앞에서 설계한 카운터들의 값을 눈으로 볼 수 있도록 7세그먼트를 사용하여 숫자를 표시해야 한다. 분이나 초를 나타내는 6진 또는 10진 카운터들은 5장에서 학습했던 BCD-to-7세그먼트 디코더(TTL 7447)를 이용하여 값을 쉽게 표시할 수 있다.그러나 시를 나타내는 12진 카운터의 경우에는 조금 복잡하다. 앞에서 시를 나타내기 위해 설계했던 12진 카운터는 하나의 카운터로 0부터 11까지 세도록 설계하였다. 그런데 일상생활에서 쓰이는 시계를 보면 0시라고 표현하는 시계는 없으며 대신 12시로 표시한다. 따라서12진 카운터의 값이 0일 경우 12시로 표시되도록 해야 할 필요가 있다. 또한 12진 카운터의 값이 10 또는 11일 경우 하나의 TTL 7447 디코더와 7세그먼트 표시기로 값을 표시하면 하나의 자리로 표시되기 때문에 알아보기 힘들다. 따라서 10 이상의 수는 두 자리로 표현하기 위해서 디코더를 설계해야 한다. 설계하는 디코더의 기능은 2진수를 입력받아 BCD로 변환하여 출력하는 디코더이며, 그림 14-6 또는 그림 14-7과 같이 설계할 수 있을 것이다. 그림 14-6에 나타낸 디코더는 12진 카운터의 값을 입력으로 받아 직접 7세그먼트 표시기를 구동할 수 있는 출력을 만들어내도록 설계하는 경우이다. 이 경우 그림 14-6(b)와 같은 진리표에 따라 디코더 회로를 설계할 수 있으며, 직접적인 회로 설계는 독자에게 맡긴다.

그림 4-17에 나타낸 12시간 표시기 디코더 회로는 보다 쉽게 회로를 설계할 수 있도록TTL 7447을 이용하는 경우이다. 즉 TTL 7447은 0에서 9사이의 값을 입력받을 경우 7세그먼트 표시기에 우리가 실제 사용하는 숫자 모양으로 표시할 수 있도록 해주는데 착안하여 그림 14-7(b)의 진리표에 나타낸 것과 같이 입력되는 2진수를 BCD로 변환하는 역할만을 수행하도록 디코더를 설계하였다. 진리표에서 출력 E는 입력받은 숫자의 십의자리를 나타내는 것으로 십진수로 10, 11 또는 0이 입력될 때 1이 출력된다. 진리표에서 나머지 출력 F,G, H, I는 일의자리를 나타내기 위한 4비트를 의미한다. 표에서 입력이 0000일 경우 출력은 10010(BCD로 12)이 출력되고, 1010 또는 1011이 입력될 경우에는 각각 10000(BCD로 10), 10001(BCD로 11)이 출력됨을 볼 수 있다. 진리표로부터 논리식을 구하는 과정은 독자 스스로 해보길 바란다.

4. 오전/오후 표시 회로 설계
현재까지 설계한 시계 회로는 12시간 단위로 동작을 하도록 설계하였다. 이제 현재 시간이 오전인지 오후인지를 나타낼 수 있도록 하는 회로를 설계해보자. 오전/오후의 표시는 시간이 11시59분 59초에서 12시로 변할 때에 맞추어 오전/오후 표시가 바뀌도록 하면 될 것이다. 따라서 그림 14-8에 나타낸 회로와 같이 시를 나타내는 12진 카운터의 enable 출력 Eo를 T 플립플롭의 입력에 연결해주면 된다. 참고로 앞에서 설계했던시분초들을 나타내는 각 카운터들의 Eo 출력은 자신의 카운터 값이 최대값일 때 무조건 1이되는 것이 아니라 자신의 카운터 값이 최대값이면서 동시에 아랫자리로부터의 Ei가 1이 입력될 때 Eo 출력이 1이 되도록 설계하였고, 또한 아랫자리 플립플롭의 Eo를 윗자리 플립플롭의 Ei로 차례로 연결하여 사용하기 때문에 결국 시를 나타내는 12진 카운터는 자신의 카운터 값이 최대값(11시)인 구간의 마지막 한 클럭 주기 동안(11시 59분 59초)만 1이 출력된다. 따라서 그림 14-8의 T 플립플롭은 정확히 12시간마다 한번씩 상태값을 바꾸게 된다. 그림 14-8에 나타낸 오전/오후 표시 회로에서는 LED 2개를 사용하여 오전/오후를 표시하도록 하였으며, T 플립플롭의 값에 따라 오전 또는 오후에 해당하는 LED가 켜지게 된다.

5. 시간 설정 회로
당연히 시계는 시간을 맞출 수 있는 기능이 있어야 한다. 따라서 이제 시간을 설정할 수있도록 하는 회로를 추가해 보도록 하자. 먼저 앞에서 설계한 시계 회로의 시분초를 표시하는 각 카운터는 enable 입력 Ei에 1이 들어오고 있을 때 클럭에 맞추어 자신의 값을 1씩 증가시킨다는 사실에 착안해 보자. 값을 변화시키고자 하는 카운터의 Ei 입력을 적당한 시간동안 1로 만들어 주면 시간을 맞출 수 있게 될 것이다. 예를 들어 현재 4시를 나타내고 있는 12진 카운터의 값을 7시로 바꾸고 싶을 경우에는 3 클럭 주기 동안 Ei를 1로 해주면 된다. 그러나 여기에는 좀 더 고려해야 할점이 있다. 즉, 어떻게 하면 정확히 3 클럭 주기 동안만 Ei에 1을 넣어 줄 수 있을까 하는 문제와 이렇게 Ei에 1을 넣어주는 동안 다른 카운터들이 계속 동작을 하도록 해야 할지 아니면 멈추도록 해야 할지를 생각해 보아야 한다. 문제를 간단히 하기 위해 여기서는 먼저 시간을 설정하는 동안에는 시계가 동작하지 않도록 하고, 정확히 원하는 주기동안 Ei를 1로
만들어 주는 문제는 스위치를 한번 눌렀다 땔 때마다 한 클럭 주기 동안 1을 출력해 주는 단발펄스 발생회로(13장 그림 13-2 참조)를 사용해서 회로를 설계하기로 한다.
그림 14-9에 시와 분을 설정할 수 있는 회로를 나타내었다. 만일 원한다면 초도 설정할수 있도록 동일한 회로를 초의 Ei 입력측에 추가하면 되며, 이에 대해서는 여러분이 직접해 보길 바란다. 그림 14-9 회로는 모드(mode)입력 M이 1일 경우에는 앞에서 설계했던 회로에서와 같이 초자리 10진 카운터의 Ei에 1이 공급되어 정상적인 카운트 동작을 수행하며 M이 0이 되면 카운트 동작을 중지한다. 즉, 동작모드가 M=1일 경우에는 정상적인 시계로 동작하고, M=0일 경우에는 시간설정 모드가 되어 시간을 맞출 수 있게 된다. 시간을 맞추기 위해서는 M=0인 상태에서 각 카운터의 Ei에 연결된 스위치를 원하는 횟수만큼 눌렀다 떼주면 된다. 그런데 여기서 한가지 더 고려해야 할 점이 있다. 즉, 시분초를 나타내기 위한 카운터는 현재 1 Hz 클럭에서 동작하도록 설계되어 있으므로 이 회로에서 시간을 맞추기 위해서는 스위치를 누른 후 적어도 1초 동안 있다가 스위치를 떼어야 정확한 동작을 기대할수 있다. 따라서 시간을 맞추는데 일반적으로 수십초 정도의 비교적 오랜 시간이 걸릴 수있다. 이를 해결하기 위해서는 보다 빠른 클럭을 사용하면 될 것이다. 즉, 정상적인 시계 동작 모드(M=1)에서는 1 Hz로 동작하는 클럭이 CLK에 입력되도록 하고, 시간 설정 모드(M=0)에서는 대략 10 Hz 이상의 보다 빠른 클럭이 CLK에 입력되도록 하면 될 것이다. 이에 대한 회로 설계는 여러분이 직접 해 보길 바란다. 또한 그림 14-9의 단발 펄스 발생 회로는 13장 그림 13-2에서 설명했던 단발 펄스 회로와 동일하되 E 입력이 1일 경우에만 출력이 나가도록 한 회로이다.

 

반응형
LIST

댓글