본문 바로가기
PLC 자동제어 학습/아두이노 보드 수업

Mux와 deMux, 그리고 그레이 코드 수업

by 인터넷떠돌이 2017. 11. 12.
반응형

안녕하세요?


이번 포스팅에서는 조금은 복잡하다면 복잡한 내용인데, 일단 Mux라고해서 multiplex라는 선택기에 대한 내용부터 먼저 설명을 해야 겠다는 생각이 듭니다.



우선 4X1 Mux의 경우인데, 선택선에 들어오는 신호에 따라서, 입력되는 A,B,C,D에서 한개를 선택한 다음 출력을 한다고 합니다. 이 Mux가 어디에 쓰이는가 하면, 바로 USB허브나 인터넷 공유기 허브에서 사용이 된다고 합니다. 선택선이 신호를 굉장히 빠르게 변환하기 때문에, 우리는 잘 모르지만, 실제로는 이런 원리로 입력은 상당히 많은데, 출력은 하나만 한다고 합니다.



다음은 deMux라는 것에 대해서 설명을 하고자 합니다. 입력이 된 것은 오로지 하나인데, 선택선에 따라서 출력이 여러개 된다고 합니다. 이 때문에 Mux와 deMux를 뗄레야 뗄 수가 없다고 합니다.




다음으로는 74LS153이라는 IC칩의 논리회로라고 해야 할까요? 일종의 개념도 입니다. 위 그림을 보시면 1번과 15번 핀 중에 하나를 GND로 연결하면, 1번 Mux냐 2번 Mux냐 하면서 선택을 할 수 있게 됩니다. 그리고 선택선에 들어오는 신호에 따라서 출력인 Z에 어느 입력이 출력되느냐를 결정할 수 읶게 됩니다. 이런 74LS153이 74LS93과 같이 사용이 되면, 이게 바로 주파수 선택기가 된다고 합니다.



위 그림은 proteus상에서 이전에 했는 74LS93을 가지고서 16진수 카운터를 발생시키면서, 이 4개의 출력이 74LS153의 입력에 들어가도록 디자인을 하고자 했는데, 위 그림에서는 다소 오류가 있습니다.



그래서 오류없이 제대로 그리는 데 성공한 모습입니다. 이렇게 그리는 데 성공을 하였고, 스위치로 선택선에 보내는 신호를 다르게 했고, 그에 따라서 출력되는 파동이라고 해야 할까요? 주파수가 달라지는 것을 확인할 수 있었습니다.



일단 74LS153 IC칩의 사용 설명서에서 가져온 그림입니다. 일단 이렇게 보시면 얘도 당연하게도 제대로 된 5V 정원을 공급되어야 해야 겠고, 선택선에 따로 신호를 입력하는 것으로 출력과 입력을 관리할 수 있습니다.



다음 스크린샷은 74LS86이라는 exclusive OR를 사용해서 '그레이 코드'라는 것으로 바꾸는 작업을 하고자 합니다. 이 그레이 코드(gray code)라는 것은 오차가 적기 때문에 입출력 장치로 많이 사용이 된다고 합니다. 그 만큼 중요한 코드로서 absolute encoder에 사용이 된다고 합니다. 이처럼 중요하기는 하지만, 계산에는 적합하지가 않아서 이럴 때는 2진수로 변환을 해야 한다고 합니다.




위 도표는 그레이 코드를 나타낸 것입니다. 위 도표를 보시면 하나의 숫자가 올라가기 위해서는 1비트의 변환만 있으면 되기에, 오차가 적다는 특징이 있습니다. 이런 특징 때문에, 입출력 장치에 많이 사용이 되는 특징이 있는 것입니다.



다만 74LS93과 74LS153이 따로 없기 때문에, 아두이노 통합 개발 환경에서 일일히 그레이 코드가 되도록 입력을 한 다음에 4개의 아두이노 우노의 핀에서 출력이 나오도록 했습니다.



다음은 한번더 exclusive-OR을 이용해서 그레이 코드를 2진수의 16진 카운터로 바꾸는 것을 proteus상에서 시뮬레이션을 해 보기는 했습니다. 이렇게 하는 데 성공했으니, 이제 본격적으로 아두이노 우노에서 이를 구현해 보는 일이 남아 있습니다.



실제로 74LS86을 사용해서 그레이 코드가 나오도록 프로그램한 입력신호가 2진수의 16진 카운터로 변환이 되는 것을 확인할 수 있었습니다.



다음은 아두이노 개발환경에서 제대로 작동하는 지를 확인하기 위해서 먼저 Serial.begin(통신속도); 라는 명령어를 setup에서 설정을 해서 모니터링이라고 해야 할까요? 통합 개발환경 우측 상단에 보시면 돋보기 마크가 있는데, 이게 모니터링을 하는 화면을 여는 메뉴입니다. 여기서 무언가가 뜨게 하기 위해서 Serial.begin(통신속도); 이라는 명령어를 입력 해야 한다고 합니다.



먼저 print("글귀"); 라고 입력을 하면, 줄을 바꾸지 않고 계속 옆으로 이어지는 것을 볼 수 있습니다. 이러한 것이 보기 불편하다면, 이럴 때는 println("글귀"); 라는 함수를 이용해야 합니다.



이렇게 실험을 해 보자, 제대로 줄이 바뀌어서 모니터링 화면에서 나오는 것을 확인할 수 있었습니다. 이것으로 일단 지난주에 수업했던 실습 내용은 다 정리를 하였고, 이제부터 진짜로 중요하다고 해야 할까요? 앞으로 회로를 결선하면서 핵심이 되는 내용에 대해서 들어가고자 합니다.




먼저 컴퓨터는 2진수로 수를 표현합니다. 그래서 상위라고 하면, 자릿수가 큰 숫자인데, 2의 자리수가 커지는 것을 보여주게 됩니다. 그리고 당연 자리수가 큰 자리에 있는 1과 0을 상위라고 하며, 아래로 갈 수록 하위라고 합니다. 이게 왜 중요한가 하면, 다음과 같이 중요하게 일이 진행되기 때문입니다.



일반적인 상황이라면 상위라고 해서 A가 최상위로 생각을 하겠지만, 실제로는 A라는 입력핀에서는 1의 자리라고 해야 할까요? 이런 제일 작은 숫자의 자리에 해당하는 비트가 입력이 되게 됩니다. 그리고 D라는 입력핀에서는 가장 큰 2의 3승에 해당하는 가장 큰 숫자에 해당하는 값이 들어가게 되는 것입니다.



당연히 출력에서도 제일 낮은 출력과 제일 높은 자리수의 출력과 제일 높은 자리수의 출력이 위 그림과 같이 나오는 것을 볼 수 있습니다. 일단 여기서는 뭐든지 간에 제일 처음으로 나오는 것이 입력이든 출력이든 가장 낮은 자리수가 나오는 것 같습니다. 이것으로 전에 조금은 알것 같기는 했지만, 확실하게 이미지가 잡히지는 않았는 것이 이제서야 잡힌다는 것을 알 수 있었습니다.

반응형