프로그램 가능한 레드넷 제어기(PRC) Part.4

마인크래프트 1.6.2, 마인팩토리 리로디드 2.7.0B8 기준으로 작성되었습니다.

이번에는 파형 발생 회로에 대해 알아보겠습니다. 파형 발생 회로의 가장 유용한 용도로는 일정 시간마다 신호를 주기 위한 타이머 용도가 있습니다. 일정 시간마다 장비를 껐다가 켰다가 하는 상황이라면 유용하게 쓸 수 있습니다.

우선 PRC에서 제공하는 파형 발생 회로의 종류를 알아보겠습니다.

톱날(Sawtooth) – 톱날 모양의 파형을 발생합니다. 톱날 파형은 신호가 0에서 15까지 1씩 증가하다가 15가 되면 0으로 떨어지는 상향(Rising) 파형과 반대로 15로 올라갔다가 0까지 1씩 내려가는 하향(Falling) 파형이 있습니다.

삼각형(Triangle) – 톱날 모양의 상향과 하향을 붙인 삼각형 형태의 파형입니다. 0에서 15까지 1씩 증가하다가 15가 되면 반대로 1씩 감소하는 형태입니다.

사인(Sine) – 곡선 형태로 0부터 15까지 증가하고 감소하는 형태의 신호를 출력하지만 수치의 범위가 좁은 관계로 폭이 좁은 삼각형 파형처럼 보입니다.

사각형(Square) – 일정 시간마다 0과 15를 바꿔가면서 신호를 출력합니다.

mfr rednet historian

파형을 실제로 보고 싶으신 분은 PRC에 레드넷 파형 기록기(RedNet Historian)를 연결하면 눈으로 확인할 수 있습니다. 레드넷 파형 기록기는 매 틱마다 출력되는 레드스톤 신호의 세기를 보여주는 장비입니다. 스크린샷에 나온 파형은 삼각형 파형입니다.

PRC에서 제공하는 파형은 신호가 출력되는 간격을 조절할 수 없기에 타이머 용도로 쓰기엔 어렵지만 유일하게 사각형 파형만은 시간 간격을 조절할 수 있습니다. 그래서 이름에 따로 타이머라고 붙어 있기도 합니다. 이 사각형 파형 발생 회로를 이용해서 좀 더 다양한 환경에 대응할 수 있도록 해보겠습니다.

우선 사각형 파형의 제한 조건부터 알아보겠습니다. 우선 파형은 최대 255틱(약 13초)마다 0과 15가 바뀝니다. 그리고 일반적인 타이머처럼 매 시간마다 잠깐 신호가 출력되는게 아닌 일정 시간동안 신호가 계속 출력됩니다. 이런 제한 조건을 바꾸기 위한 회로들을 알아보겠습니다.

우선 파형이 일정 시간동안 계속 출력되는 대신 잠깐만 신호가 출력되게끔 하기 위해서 1회성 펄스(One-Shot Pulse)라는 회로를 쓸 수 있습니다. 1회성 펄스는 입력이 0에서 다른 값으로 바뀌는 순간에만 잠시 신호가 출력되고 입력이 계속 유지가 되어도 다시 0으로 돌아가기 전까지는 신호가 출력되지 않습니다.

사각형 파형의 출력을 1회성 펄스에 연결하면 0에서 15로 바뀌는 순간에만 잠시 신호가 출력되게끔 되는 것입니다. 다만, 사각형 파형의 출력 자체가 짧아지는건 아니기에 출력이 없는 시간이 2배 가까이 늘어나게 됩니다. 사각형 파형의 설정 시간이 10틱이라면 0에서 15로 올라가는 1틱만 신호가 출력되고, 나머지 15가 유지되는 9틱은 신호가 없습니다. 파형이 바뀌어서 0으로 바뀌어도 설정 시간 10틱간은 신호가 없기에 20틱마다 한번씩 신호가 나오게됩니다.

사각형 파형과 1회성 펄스를 조합해도 신호 간격은 최대 25.5초가 됩니다. 하지만 이보다 더 긴 시간 간격이 필요할 때도 있습니다. 이럴때는 지난 글에서 이야기한 계수(Counter) 회로를 쓰면 됩니다. 사각형 파형의 출력을 계수 회로의 증가나 감소에 연결하고 PRE 값에 적당한 지연 시간을 주면 됩니다. 참고로 계수 회로에는 1회성 펄스의 기능을 포함하고 있기에 1회성 펄스 회로를 추가로 연결할 필요는 없습니다.

사각형 파형과 계수 회로를 연결할 경우 사각형 파형의 지연 시간(설정 시간의 2배)와 PRE 값을 곱한 만큼 시간을 지연하게 됩니다. 간편하게 사용하려면 사각형 파형의 설정을 10(20틱 = 1초)으로 하시면 PRE 값이 그대로 초단위 설정이 됩니다. 사각형 펄스와 계수 회로를 연결하면 최대 약 6500초 정도까지 신호 발생 간격을 조절할 수 있고, 그 이상이 필요하다면 계수기를 추가로 연결하면 됩니다.

1회성 펄스나 계수 회로를 쓰면 신호가 1틱만 발생하게 됩니다. 하지만 경우에 따라서는 그보다는 긴 시간이 필요할수도 있습니다. 이럴때는 펄스 연장(Pulse Lengther) 회로를 쓰면 됩니다. I로 들어온 입력이 0이 아닐 경우 L에 설정된 틱 시간동안 15의 수치로 신호가 출력됩니다. 그리고 10틱을 설정했는데 25틱동안 신호가 들어왔다면 10의 배수로 계산해서 총 30틱동안 신호가 출력됩니다. 설정보다 입력이 길다고 해서 바로 신호를 끊어버리지는 않는 점은 기억해두시기 바랍니다.

마지막으로 조금 독특한 회로인 연속 펄스 생성(Multipulse) 회로를 알아보겠습니다. 연속 펄스 생성 회로는 신호가 들어올 경우 일정 횟수동안 신호의 출력을 켜고 끄는 동작을 하게 됩니다.

입력의 I의 값은 출력이 켜질때 출력의 Q 값으로 보내게 됩니다. 위에 이야기한 회로들의 출력은 0 또는 15만 뜨지만 연속 펄스 생성은 출력값의 세기를 조절하는게 가능합니다.

CLK값은 회로가 동작하기 위한 신호를 받는 곳입니다. CLK값이 0에서 다른 숫자로 바뀌면 연속 펄스 생성 회로는 동작하게 됩니다. 참고로 CLK 값은 1회성 펄스와 같이 0에서 다른 숫자로 바뀌는 순간에만 동작하고, 입력을 유지하고 있어도 연속 펄스 생성 회로는 정해진 횟수만큼만 동작합니다. 단, 동작하는 도중에 CLK 값이 다시 0에서 다른 숫자로 바뀐다면 처음부터 다시 회로가 동작합니다.

CNT 값은 펄스가 몇번 생성되는지를 설정하고, THi는 신호가 켜져있는 시간, TLo는 신호가 꺼져있는 시간을 의미합니다. CLK에 신호가 들어오면 CNT 횟수만큼 THi 틱동안 신호가 출력되고, TLo 틱동안 출력이 꺼지는 동작을 하는 회로입니다.

출력값의 DN은 모든 동작이 완료될 경우 신호가 출력됩니다. CNT에 정해진 횟수만큼 동작을 했다면 DN으로 신호가 출력됩니다.

연속 펄스 생성은 몬스터 트랩의 피스톤 공격처럼 버튼을 누르면 일정 횟수동안만 타이머 신호가 필요한 경우 유용하게 쓸 수 있겠습니다.

Advertisements

프로그램 가능한 레드넷 제어기(PRC) Part.3

마인크래프트 1.5.2, 마인팩토리 리로디드 2.7.0B2 기준으로 작성되었습니다.

지난글에서 프로그램 가능한 레드넷 제어기(Programmable RedNet Controller, PRC)의 기초적인 논리 연산과 수치 비교에 대해 알아보았습니다. 이번에는 논리 연산의 확장인 디지털 논리 회로에 대해 알아보겠습니다. 물론 디지털 논리에 대해 공부하는 글은 아닌 관계로 PRC를 사용하는데 필요없는 회로 구성등 세밀한 부분은 생략합니다.

처음에 알아볼 회로는 가산(덧셈, Adder) 회로입니다. 디지털 회로의 가산기는 반가산기와 전가산기로 나뉩니다. 반가산기는 2개의 입력을 더해서 2개의 출력을 내보내고, 전가산기는 3개의 입력을 더해서 2개의 출력으로 내보냅니다. 그럼 이걸 어떤식으로 사용하는지를 알아보겠습니다.

디지털은 0과 1의 2진수로 표현됩니다. 즉, 1 보다 더 큰 수는 없습니다. 0 + 0 은 0, 0 + 1이나 1 + 0은 1 인데, 그럼 1 + 1은 어떻게 되는걸까요? 2진수로 10 이 됩니다. 즉, 덧셈의 결과는 최대 2개의 자릿수가 필요하기에 2개의 출력이 있습니다. 각각의 출력에는 입력된 값을 더한 결과를 내보내는 S 출력과 받아올림(Carry)을 표현하기 위한 Cout(Carry Out) 출력이라는 이름이 붙어 있습니다.

반가산기는 덧셈을 하기 위한 2개의 입력과 계산 결과를 내보내기 위한 2개의 출력이 있다는걸 알 수 있습니다. 그럼 전가산기는 어디에 쓰는걸까요? 전가산기는 2개의 입력과 함께 아랫자리수에서 올라온 받아올림을 연산하기 위해서 3개의 입력을 받는 회로입니다. 첫번째 자리에서는 2개의 값만 더하면 되지만 두번째 자리부터는 이전 자릿수에서 올라온 값까지 더해야만 실제 계산 결과가 나올테니까요. 즉, 여러 자릿수의 계산을 하기 위해서 필요한 것이 전가산기입니다.

참고로 디지털 회로에서 감산(뺄셈) 회로는 별도로 구현하기 보다 가산기를 응용하여 구현합니다. 그 편이 간단하기 때문이지요. 이 부분에 대해 자세히 알고 싶으신 분은 ‘2의 보수’ 로 찾아보시기 바랍니다.

다음은 계수(Counter) 회로입니다. 계수 회로에는 증가(INC) 또는 감소(DEC) 신호를 받는 2개의 입력과 계수의 경계를 잡기 위한 기준값(PRE) 입력이 있습니다. 그리고 계수의 경계에 도달했을때 신호를 보내는 Q 출력과 현재의 계수 값을 출력하는 V 출력이 있습니다.

계수 회로는 INC, DEC에 신호가 올때마다 V 값을 하나씩 더하거나 뺍니다. 이때 INC 또는 DEC 신호가 계속 켜져 있다면 최초로 켜질때만 한번 계수가 이루어지고, 신호가 다시 꺼졌다가 켜질때까지 더 이상 동작하지 않습니다. 이렇게 V값이 계속 늘거나 줄어들다가 PRE값이 되거나, 0보다 작아질 경우 Q로 신호를 보냅니다. 그와 함께 V 값이 PRE 값이 되었을 경우에는 0으로 0보다 작아졌을 경우에는 PRE 보다 1 작은 숫자로 V 값을 바꿉니다.

V 값은 0부터 PRE 보다 하나 작은 숫자까지만을 가질 수 있습니다. V 값이 0보다 작아지거나, PRE와 같거나 커지면 Q 신호가 켜지면서 V 값은 반대편 경계로 옮겨지기 때문입니다. 즉, PRE로 16을 설정하였다면 V는 0 – 15의 범위를 갖습니다. V 값을 이용하실 때에는 이 점을 고려하셔야 합니다.

계수 회로는 장치의 동작 횟수를 제한하고 싶거나, 타이머의 시간을 길게 늘려야 할 필요가 있을 경우 유용하게 쓸 수 있는 회로입니다.

다음은 다중화(Mux), 역다중화(DeMux) 입니다. 다중화는 4개의 입력(I)값과 2개의 선택(S)값을 받아서 하나의 출력(O)으로 내보냅니다. S 값은 2자릿수의 2진수로 생각하시면 되며, (00, 01, 10, 11) 의 총 4종류의 값을 갖게 됩니다. 이 선택에 따라 4개의 입력 중 하나가 출력으로 나가게 됩니다. 역다중화는 반대로 1개의 입력(I)값과 2개의 선택(S)값을 받아서 4개의 출력(O)으로 내보냅니다. S 값의 선택에 따라 1개의 I 값이 4개의 O 출력 중 한군데로 나가게 됩니다. 그리고 선택된 출력을 제외한 나머지 3개로는 0 값이 나가게 되니 역다중화를 쓸 경우 이 부분을 고려해야 합니다.

다중화나 역다중화는 선로 비용이 비싸고 회로 비용이 저렴한 상황이라면 유용하지만 마인팩토리 리로디드에서는 그 반대인 관계로 마땅한 용도를 찾기가 애매한 회로이긴 합니다.

역다중화의 경우 S 값을 아날로그 값(0 – 15의 숫자)으로 받는 16출력을 가진 회로도 있습니다. 2개의 S 값의 참, 거짓으로 4개의 선택지를 만드는 대신 S 값 하나의 크기에 따라 출력 방향이 달라지는 형태입니다.

조금 독특한 회로로 7-세그먼트 인코더(Seven-Segment Encoder) 회로가 있습니다. 전자 계산기등을 보신적이 있다면 8 자 형태의 네모로 이루어진 액정에 불이 들어오는 형태로 숫자가 표시되는걸 보셨을겁니다. 이 8자 형태의 네모를 한 획씩 나누면 총 7개의 획으로 나뉘어지며 이것을 7-세그먼트라고 부릅니다. 7-세그먼트 인코더는 입력된 숫자 값을 7-세그먼트의 각각의 획을 켜고 끄는 형태로 출력할 수 있게끔 도와줍니다.

7 세그먼트 인코더는 아날로그 값으로 받는 I값에 따라 7개의 A – G 출력으로 참, 거짓 신호를 내보냅니다. 출력은 A 부터 순서대로 7-세그먼트의 가장 윗쪽 획부터 시계 방향으로 6개가 연결되어 있습니다. 마지막 G 신호는 7-세그먼트의 가운데 획입니다.

mfr prc 7-segment front

말로 설명하는 것 보다 보여주는 것이 빠르겠지요. 그림에서 왼쪽의 아이템 무게에 따른 레드스톤 신호를 보내는 발판이 설치되어 있고, 현재 2개의 7-세그먼트 인코더가 설정되어 있습니다. 왼쪽은 숫자 2를 표시하고 있고, 오른쪽은 3을 표시하고 있습니다. 왼쪽은 레드스톤 램프(Redstone Lamp)를 이용한 것이고, 오른쪽은 끈끈이 피스톤(Sticky Piston)을 이용한 것입니다.

mfr prc 7-segment rear

숫자 표시 장치의 뒷면입니다. 각각의 획마다 레드넷 케이블(RedNet Cable)의 색이 다르게 지정되어 있는걸 볼 수 있습니다. 레드스톤 램프에 연결된 색상은 가장 위에 자홍색을 시작으로 하늘색, 노란색, 연두색, 분홍색, 회색, 밝은 회색이 연결되어 있습니다. 그림은 뒷면인 관계로 좌우가 뒤집혀서 시계 반대 방향으로 설정되어 있습니다.

mfr prc 7-segment setup

출력 부분의 A – G 부분이 위의 레드스톤 램프에 연결된 색상과 같은 값인걸 볼 수 있습니다. 이런식으로 7-세그먼트 인코더를 이용하면 숫자를 쉽게 읽을 수 있게 나타낼 수 있습니다.

이번 글에서는 디지털 입출력을 가지는 디지털 회로에 대해 알아보았습니다.

프로그램 가능한 레드넷 제어기(PRC) Part.2

마인크래프트 1.5.2, 마인팩토리 리로디드 2.7.0B2를 기준으로 작성되었습니다.

지난 글에서 프로그램 가능한 레드넷 제어기(Programmable RedNet Controller, PRC)의 사용법에 대해 알아보았습니다. 이번부터는 각각의 로직에 대한 설명에 들어갑니다. 이번편은 가장 기초가 되는 논리 연산 및 수치 비교에 대한 내용입니다.

논리 연산은 참과 거짓을 입력으로 받습니다. 하지만 PRC의 입력은 숫자로 되어 있어서 참과 거짓으로 나눌 수 없기에 숫자가 0일 경우에는 거짓, 0이 아닐 경우에는 참으로 계산합니다. 그리고 출력의 경우 거짓인 경우 0, 참인 경우 15로 출력합니다. 출력값 15는 레드넷 케이블(RedNet Cable)을 이용해서 레드스톤 신호로 내보낼 경우 최대 출력으로 나옵니다. 이 부분은 PRC의 논리 연산 및 디지털 로직 전체에 적용되는 내용이니 꼭 알아두셔야 합니다.

And: 논리곱 연산으로 주어진 입력이 전부 참일 경우 참, 하나라도 거짓이 있을 경우 거짓을 내보냅니다.
Or: 논리합 연산으로 주어진 입력 중 하나라도 참일 경우 참, 모두가 거짓일 경우 거짓을 내보냅니다.
Xor: 배타적 논리합 연산으로 두개의 입력이 다를 경우 참, 같을 경우 거짓을 내보냅니다. 입력이 2개 이상인 경우 2개를 먼저 연산한 결과와 남은 입력을 연산하여 최종 결과값을 얻습니다. 전등을 켜고 끌 때 한쪽에서 켜도 반대쪽에서 끌 수 있는 스위치가 이런 연산 형태로 이루어집니다.
Nand: 부정논리곱 연산으로 논리곱 연산 결과와 반대값을 가집니다. (Not And)
Nor: 부정논리합 연산으로 논리합 연산 결과와 반대값을 가집니다. (Not Or)
반전(Inverter) – Not: 부정 연산으로 주어진 입력의 반대값을 가집니다.

수치 비교는 두개의 입력이 같은지 다른지, 큰지 작은지 등을 비교하는 로직입니다. 입력은 논리 연산과는 달리 입력된 숫자값을 그대로 사용하지만 출력은 논리 연산과 마찬가지로 0과 15로 거짓과 참을 나타냅니다.

비교 – 같음(Equals): A와 B의 값이 같은지를 판단합니다. (A = B)
비교 – 같지 않음(Not Equals): A와 B의 값이 다른지를 판단합니다. (A ≠ B)
비교 – 큼(Greater Than): A의 값이 B의 값보다 큰지를 판단합니다. (A > B)
비교 – 크거나 같음(Greater Than or Equal): A의 값이 B의 값보다 크거나 같은지를 판단합니다. (A ≥ B)
비교 – 작음(Less Than): A의 값이 B의 값보다 작은지를 판단합니다. (A < B)
비교 – 작거나 같음(Less Than Or Equal): A의 값이 B의 값보다 작거나 같은지를 판단합니다. (A ≤ B)

이번 편에서는 디지털 회로 설계의 기본이 되는 논리 연산자와 장치 제어의 기본이 되는 비교 판단에 대해서 알아보았습니다. 하나하나의 내용은 정말 간단하지만 이 로직들을 이용하면 컴퓨터까지 만들 수 있을 정도로 핵심이 되는 내용이기도 합니다. 물론 컴퓨터를 만들려면 어마어마한 숫자가 필요하지만요.