Windows 기준으로 작성된 포스트입니다.




USB to TTL Serial Cable을 이용하여 모니터나 LAN케이블 없이

PC와 라즈베리파이 콘솔을 연결할 수 있다.

(이 글에서 사용한 제품은 http://www.devicemart.co.kr/1164522 에서 구입함.)


흰색 선(RXD)을 라즈베리파이의 TXD핀에 연결하고

초록 선(TXD)을 라즈베리파이의 RXD핀에 연결한다.


그리고 빨간 선(Vcc)와 검정 선(GND)를 연결하는데, 이 때 외부전원이 있으면 안 된다. 


(주의 : 맨 끝에 핀 하나 비워져 있습니다.)



그리고 해당제품에 맞는 드라이버를 구글 등에서 검색하여 설치한다.

많은 제품에서 Prolific PL2303을 사용하고 있다.. 





드라이버 설치 후 USB 포트에 연결을 하면 

Windows 장치 관리자에서 COM포트번호를 확인할 수 있다.





PuTTY를 사용하여 해당 포트를 입력하는데,

이 때 Connection Type은 'Serial'로 하고,

Speed(Baudrate)는 115200으로 맞춘다.






Open을 눌러보면 아무것도 안 뜨는 경우가 있는데,

LAN으로 SSH연결할 때와는 달리 새로 터미널을 여는 것이 아니므로

이 상태에서 id를 치고 enter를 누르면 된다.






※연결이 되지 않을 때

Raspbian버전에 따라 시리얼 설정이 안 되어 있어서 초기에 연결이 되지 않을 수도 있다.


1. Raspbian 운영체제가 설치되어 있는 Micro SD 카드를 PC에 연결한다.


2. config.txt 파일을 열고 맨 아랫줄에 있는

 enable_uart=0

 enable_uart=1

로 수정하고 저장한다.


3. cmdline.txt 파일을 열고 

 console=tty1

 console=serial0,115200 console=tty1

으로 수정하고 저장한다.


4. Micro SD카드를 다시 라즈베리파이에 넣고 부팅한다.


나중에 UART를 이용하여 다른 것을 만들고자 할 때는 부팅된 상태에서 별도의 명령으로 이것을 해제할 수 있다.





터미널 색상이 모니터로 볼 때와는 다르게 흑백으로 나오는데

이것에 관해서는 다음 포스트에서 다룬다.

http://tibyte.kr/259







이전글 : 멀티플렉서 (MUX)


디멀티플렉서(Demultiplexer : 역다중화기, 디먹스)



디먹스는 먹스와 반대되는 기능을 한다.

한 개의 선으로 들어오는 입력을 n비트의 선택 입력에 따라 2ⁿ개의 선 중 하나로 출력한다.


1-to-4 디먹스로 예를 들어보면,

선택입력이 00일 때 0번 출력선으로 출력,

선택입력이 01일 때 1번 출력선으로 출력,

선택입력이 10일 때 2번 출력선으로 출력,

선택입력이 11일 때 3번 출력선으로 출력하는 것이다.




□ 1to4 디먹스의 논리식(불대수식)

4to1먹스와는 반대로 출력이 4개이므로 논리식도 4개로 써 볼 수 있다.

데이터입력 d와 선택입력 s0, s1 그리고 출력 x0, x1, x2, x3이 있으면

각각의 출력에 대한 논리식은

x0 = s1's0'd

x1 = s1's0d

x2 = s1s0'd

x3 = s1s0d


이렇게 나오는데, d를 제외한 부분을 보면 선택입력에 대한 디코더와 같은 논리가 있다는 것을 알 수 있다.

s1's0'은 선택입력이00일 때만 참이 되고,

s1's0은 선택입력이 01일 때만 참이 되고..

이런식으로 선택입력에 따라 x0~x3중 하나만 참이 되어서 데이터입력인 d값이 그곳으로 출력되는것이다.





□ 1to4 디먹스의 블록도






□ 먹스와 디먹스의 연결



먹스의 출력을 디먹스의 입력으로 넣고 동일한 sel(선택입력)을 주면

먹스와 디먹스가 서로 반대되는 역할을 하기 때문에 먹스쪽의 입력이 디먹스쪽의 출력으로 그대로 나오게 된다.

그러나 정확히 말하면 먹스쪽 데이터입력이 하이임피던스상태여도 디먹스쪽 출력은 0이 나오기 때문에 완전히 그대로 나오는 것은 아니다...




□ Verilog로 디먹스 구성하기


베릴로그로 디먹스를 구현해보자.

디먹스의 논리식을 참고하여 블록도대로 그대로 작성해보면

일단 아래와 같이 구성할 수 있다.(더 아래쪽에서 간단한 코드가 나옵니다)


module demux4(data, sel0, sel1, out0, out1, out2, out3);
    input data;
    input sel0 ,sel1;
    output out0, out1, out2, out3;
    wire w0, w1, w2, w3;
   
    and(w0, ~sel0, ~sel1);
    and(w1,  sel0, ~sel1);
    and(w2, ~sel0,  sel1);   
    and(w3,  sel0,  sel1);
   
    and(out0, w0, data);
    and(out1, w1, data);  
    and(out2, w2, data);
    and(out3, w3, data);

endmodule  



선택입력과 출력을 리스트로 묶고 동작적 모델링을 사용하여 코드를 더 간단히 해 보면,

module demux4(data, sel, out);
    input data;
    input[1:0] sel;
    output[3:0] out;
   
    wire data;
    wire[1:0] sel;
    reg[3:0] out;
   
    always @(data or sel) begin
        out[sel] = data;
    end
endmodule


여기서 4개의 출력선 중 출력이 없는 선은 하이임피던스 상태가 나오는데,

위의 코드에서 reg[3:0] out = 0; 이렇게 초기값으로 0을 인가하면 출력이 없는 선도 0값을 나오게 할 수 있다.




관련글 : 멀티플렉서(MUX)

관련글목록 : 블로그 '전자' 카테고리









플립플롭을 쓰다가 JKFF(JK플립플롭)에서 JK가 무슨뜻인지 의문이 들었다.

RS래치에서 RS는 Reset-Set

DFF에서 D는 Data 또는 Delay

TFF에서 T는 Toggle 이라고 들었는데 JK에 대한 이야기는 들어본적이 없었다.


미국의 물리학자 잭 킬비(Jack St. Clair Kilby ,1923~2005)의 이름을 딴 것이라는 이야기가 있다.(Jack Kilby는 1958년 집적회로를 발명했고 2000년에 노벨물리학상을 수상).

그러나 위 내용은 확실한 근거가 없고, 영문판 위키백과에는 보다는 Eldred Nelson이라는 사람이 특허문서에서 이 회로의 입력단자 이름을 붙일 때,

알파벳순으로 A,B, C,D, E,F, G,H, J,K 로 J-input과 K-input을 사용했기 때문이라고 기록되어 있다.


출처 : https://in.answers.yahoo.com/question/index?qid=20101101061506AAPNY2q





전지의 기전력 측정 (8.56V)



데이터시트를 보면서 참고하기 위해 CdS cell의 저항값 측정



황화카드뮴 소자가 어두울수록 저항이 커지고 밝을수록 저항이 작아지는데

저항이 15㏀정도가 나오는 정도의 밝기를 점등/소등의 기준으로 하기로 했다.


NPN트랜지스터 2sc1815는 달링턴회로를 구성하여

베이스-이미터 전압이 1.2V가 될 때 활성화되도록 했다.


따라서 콜렉터에서 이미터로 전류가 쏟아져내려가서 LED가 점등될 때

CdS cell에도 1.2V의 전압이 걸리게 된다.

(회로가 두 방향으로 나눠질 때 전류는 나뉘어져 흘러가지만 전압은 동일하게 걸리므로..)

 

그러면 저항 R1에는 8.56-1.2 = 7.36V의 전압이 걸려야 한다.

회로에서 저항 R1과 CdS cell(일종의 가변저항)이 있는 부분을 보면

전압은 저항에 비례해서 걸리므로 1.2 : 15 =  7.36 : x 라는 비례식이 만들어진다(15는 위에서 기준을 잡은 CdS의 저항값)


x값을 계산해 보면 92㏀이 나온다.

여기서는 100㏀짜리 저항으로 회로를 구성했다.

그리고 트랜지스터의 콜렉터 쪽에 LED의 동작전류/전압에 맞는 적절한 저항 R2를 연결한다. 


아래와 같은 회로도가 완성되었다.





브레드보드에 부품들을 연결.





동작하는 모습을 촬영한 동영상.











* 멀티플렉서 (Multiplexer, MUX, 먹스, 다중화기)



멀티플렉서는 데이터입력과 선택입력(제어입력)을 가지고 있다.

제어입력(select)는 들어오는 n개의 입력 중 하나를 선택하는 역할을 한다.

 

출처

위 그림에서 sel에 0이 입력되면 out에는 I0 값이 출력되고,

sel에 1이 입력된다면 out으로 I1 값이 출력된다.

입력이 2개 출력이 1개이기 때문에 이와 같은 멀티플렉서를 2-to-1 멀티플렉서라고 한다.


- to - 1 멀티플렉서에서 입력 데이터 수가 개이면 select의 비트수는 n개가 된다.

입력 데이터 수가 8개(개)라고 한다면 select 3비트로 모든 가짓수(8가지) 선택할 수 있는 것이다.

8-to-1 멀티플렉서에서 각각의 경우를 써 보면 

select가

000일때 0번 데이터,

001일때 1번 데이터,

010일때 2번 데이터,

011일때 3번 데이터,

100일때 4번 데이터,

101일때 5번 데이터,

110일때 6번 데이터,

111일때 7번 데이터.

를 선택하여 출력하게 된다.





* 멀티플렉서의 논리식 (불대수식)


2-to-1 멀티플렉서의 논리식을 살펴보자.

데이터 입력으로 D0,D1,  제어입력으로 s,  출력으로 Out이 있다고 할 때 논리식은


Out = s'D0 + sD1 


이다.  자세히 살펴보면 곱의 합(SOP : Sum of Product)방식으로 이루어진 식이라는 것을 알 수 있는데 각각의 항을 보면

s가 0일 때는 sD1 항은 D1의 값과 관계없이 0이 되어 무시된다. (나머지 s'D0 항을 보면 s'는 1이므로 결과값은 D0이 됨)

s가 1일 때는 반대로 s'D0 항이 D0 값에 관계없이 0이 되어버린다.  (남은 sD1 항을 보면 s는 1이므로 결과값은 D1과 같게 됨)




이번에는 4-to-1 멀티플렉서의 논리식을 보자.

데이터 입력으로 D0 D1 D2 D3이 있고 제어입력으로 s0 s1이 있을 때 식은 아래와 같다.


Out = s0's1'D0 + s0s1D1 + s0s1D2 + s0s1D3 


제어입력이 00일때, 01일때, 10일때, 11일때의 각각의 경우에 대하여

위에서 2-to-1 멀티플렉서의 원리와 같이, 한 항을 제외한 나머지 모든 항들이 0이 되어서 무시된다.

이러한 원리로 여러 개의 입력 중 하나를 선택하여 출력하는 것이다.





* 쿼터스로 작성한 4-to-1 멀티플렉서의 블록도




제어입력인 두개의 sel이 이루는 4가지 경우가  각각의 4가지 입력과 POS를 이루고 있다.




관련글 : 디멀티플렉서(DEMUX)

관련글목록 : 블로그 '전자' 카테고리











그레이 코드(Gray Code)는 2진 비가중치 코드의 하나로, 

연속된 수들의 코드가 한 비트씩만 차이가 나는 특징이 있다.

때문에 아날로그 신호와 같이 연속적인 신호가 입력될 때 그레이 코드를 사용하면 신뢰성이 높아진다.



* 4비트를 모두 사용한 이진코드와 그레이코드 비교

(이 글에서 언급한 '이진코드'는 이진법으로 나타낸 이진수를 의미합니다)

 이진코드

그레이코드 

0000 

0000 

0001

0001

0010

0011

0011

0010

0100 

0110

0101

0111

0110

0101

0111

0100

1000

1100

1001

1101

1010

1111

1011

1110

1100

1010

1101

1011

1110

1001

1111

1000




그레이코드를 보면 0과 1이 일정한 주기로 반복되는 규칙을 확인할 수 있다.

2^3자리에서는 이진코드와 동일하고,

2^2자리에서는 최상위비트가 0일때 이진코드와 동일, 최상위비트가 1일때 이진코드와 반대.

2^1자리와 2^0자리에서도 마찬가지로  상위비트에 따라 이진코드와 동일한지 반대인지가 결정된다.


위와 같이, 이진코드를 그레이코드로 변환할 때는 최상위비트는 그대로 두고 

자신의 비트와 그의 상위비트를 XOR연산하면 된다.


블록도로 나타내면 다음과 같다.


프로그램으로 작성한다면, 같은 원리로

(x>>1)^x

의 형식으로 작성할 수 있을 것이다. (^는 비트 XOR연산자)






반대로 그레이코드를 이진코드로 바꾸는 것을 생각해 보면,

이진코드의 각 자리를 DCBA라고 할 때 그레이코드는

D DC C⊕B B⊕A 이다. (⊕ : XOR)

D⊕C를 다시 C로 되돌리기 위해서 D와 XOR연산을 하여 D⊕(D⊕C)꼴로 만든다.

XOR연산에서는 결합법칙이 성립하므로 (D⊕D)⊕C로 계산하면, 0⊕C가 되어 C라는 결과가 나온다.

다음 자리인 C⊕B를 B로 되돌리려면 위와 같은 방법으로 C와 XOR하면 된다.


이처럼 그레이코드를 이진코드로 변환하려면 이진->그레이 때와는 다르게 

상위비트의 XOR연산 결과를 가지고 또 하위비트와 XOR시킨다.

알기 쉽게 블록도로 나타내면 아래 그림처럼 나온다.




 










4비트 RCA (Ripple Carry Adder : 전가산기)




- 1비트 전가산기





Overflow를 검출하는 4비트 전가산기





- 시뮬레이션






1bit full-adder 심볼을 사용한 4비트 가감산기입니다.

switch에 1이 들어가면 감산, 0이 들어가면 가산.

Cin에 switch가 연결된 이유는 음수를 2의보수로 표현할때 비트반전시킨뒤 1을 더하기때문.




4비트 RCA 전가산기 브레드보드에 구현



블록도는 아래링크를 참고하세요

http://tibyte.kr/112












전선은 GG..













+ Recent posts