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)

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




  1. ㅇㅋ 2014.04.17 09:58

    잘봤습니다~






플립플롭을 쓰다가 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를 연결한다. 


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





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





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










  1. BlogIcon 비양 2013.09.04 23:30

    우아

  2. BlogIcon 비양 2013.09.04 23:30

    우아

    • 버그다 2013.09.05 08:29

      덧글 중복등록 버ㄱ르인가

  3. 덧글테스트 2013.09.05 08:28

    덧글 테스트

  4. 홍길동 2014.02.02 22:55

    LED쪽 저항을 연결하셨는데 저항을 연결하지않으면 몇볼트가나오나요?

    • BlogIcon 티바이트 2014.02.03 16:19

      Vcc쪽 전압 8~8.5볼트 정도가 나올 것 같은데요.

  5. 잉? 2014.05.07 15:09

    저는 왜 이렇게 햇는데 밝을때 나오고 어두울때 더 어두워질까요...?

    • BlogIcon 티바이트 2014.05.08 00:01

      음.. NPN트랜지스터가 맞는지, CdS소자의 저항변화를 확인해보세요..?

  6. 잉? 2014.05.08 12:18

    pnp를 꽂았었네요.. ㅋㅋㅋ

  7. 홍건기 2016.10.17 20:23

    이걸 직접 LED에 연결해도 저렇게 작용할까요?

  8. 홍건기 2016.10.17 20:23

    이걸 직접 LED에 연결해도 저렇게 작용할까요?

    • BlogIcon 티바이트 2016.10.17 20:39 신고

      CdS소자의 저항변화 범위에 따라 될 수도 있겠지만 안정적으로 원하는 밝기에서 스위칭하려면 트랜지스터가 있어야 합니다.

  9. 정이 2017.05.18 00:29

    회로도에는 저항이 2개인데 사용하신거엔 왜 3개인가요..?

    • BlogIcon 티바이트 2017.05.18 09:00 신고

      1킬로옴짜리 저항이 없어서 할 수 없이 330옴짜리 두개를 직렬로 연결하여 660옴으로 사용했습니다. 330옴짜리도 두 개 밖에 없었네요..


* 멀티플렉서 (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시킨다.

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




 










  1. 학생 2012.10.17 02:24

    감사합니다! 드디어 이해가 되써여

  2. 정보처리기사 2013.12.09 16:01

    감사합니다 이해가 안됐었는데 이제 이해가 되네요~ 잘 보고 갑니다~

  3. 이은영 2018.08.13 11:29

    얼마나 걸릴까요?

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




- 1비트 전가산기





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





- 시뮬레이션





  1. 익명 2012.05.17 16:04

    비밀댓글입니다

    • BlogIcon 티바이트 2012.05.18 10:19 신고

      error가 아닌 warning은 무시해도 정상동작이 되는관계로.. 자세히 살펴본 적이 없어서 잘 모르겠습니다

  2. 기훈 2014.05.18 16:42

    GND하고 중간에 XOR은 없어도 돌아가지 않나요?? 시뮬레이션 결과볼때 ,count value 에서 count every값을 X1,Y1을 각각 100,200 X2 Y2도 100,200 이런식으로 주고 Cin 은 400으로 줘야하나요?

    • BlogIcon 티바이트 2014.05.18 22:13 신고

      Cin쪽의 GND는 0 입력용으로 달았습니다. 아마 없어도 시뮬레이션상으로는 될지도 모르겠습니다.. 그리고 XOR는 최상위비트를 부호비트로 쓸 때 오버플로가 났는지를 검출하기 위해서 달았었습니다.

      시뮬레이션 볼때는 제가 count every가 뭔지 지금 잘 모르겠어서... 그런데 해볼 당시에는 20개 정도의 데이터를 준비해서 넣어봤던 것 같습니다.

    • 기훈 2014.05.18 22:33

      아.. 그렇군요.. 근데 C in이 0일때 와 1일때를 나눠서 시뮬레이션을 확인하려면 어떻게해야되죠....시뮬레이션 할때 각각의 범위를 어떻게 지정해야 하는지 모르겠어요... 정말 죄송한데 한번만 시뮬레이션 한거 보여주시면 안될까요??

    • BlogIcon 티바이트 2014.05.19 00:21 신고

      이 글에 시뮬레이션 추가했습니다
      이거 만들 때 모든 값을 다 넣었었네요...

      C in이라면 가장 낮은자리에 들어가는 C in을 말씀하시는건가요 아니면 각각의 전가산기에 들어가는 것을 말씀하시나요?
      전자라면 GND대신 Input을 연결하면 될 것 같고 후자라면 Cout과 Cin연결선에서 Output선을 하나 빼면 될는지요

    • 기훈 2014.05.19 17:40

      아... 감사합니다.. 제가 말씀드린건 전자의 경우인데, Input으로 넣었을때 어떻게 해야 모든 값에 Cin이 0일때의 경우가 들어가고, 어떻게 해야 모든값에 Cin이 1일때의 경우를 들어가게 할 수 있는지, 시뮬레이션 할때 파형의 범위지정을 어떻게 해야할지 모르겠습니다. 파형을 보면 모든 값들이 0일때가 있고 1일때가 있고 1이 한번만 들어 갈때가 있고 그렇지 않습니까?


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

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

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




  1. નુલુંગ​ 2012.06.12 21:15

    નુલુંગ​

  2. BlogIcon NewExP(Newage) 2012.09.06 18:28

    음? 올ㅋ
    제사이트도 들러주세요!<는 닉넴클릭

  3. BlogIcon 티바이트 2012.10.08 19:38 신고

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



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

http://tibyte.kr/112












전선은 GG..













+ Recent posts