저장 및 종료

명령어

설명

:w

저장

:w file.txt

file.txt 파일로 저장

:w >> file.txt

file.txt 파일에 덧붙여서 저장

:q

vi 종료

:q!

Vi 강제 종료

ZZ

저장 후 종료

:wq!

강제 저장 후 종료

:e file.txt

file.txt 파일을 불러옴

:e

현재 파일을 불러옴

 

입력모드 전환

a

커서 위치 다음 칸부터 입력

A

커서 행의 맨 마지막부터 입력

i

커서의 위치에 입력

I

커서 행의 맨 앞에서부터 입력

o

커서의 다음 행에 입력

O

커서의 이전 행에 입력

s

커서 위치의 한 글자를 지우고 입력

cc

커서 위치의 한 행을 지우고 입력

 

삭제

x, dl

커서 위치의 글자 삭제

X, dh

커서 바로 앞의 글자 삭제

dw

한 단어를 삭제

d0

커서 위치부터 행의 처음까지 삭제

D, d$

커서 위치부터 행의 끝까지 삭제

dd

커서가 있는 행을 삭제

dj

커서가 있는 행과 그 다음 행을 삭제

dk

커서가 있는 행과 그 앞 행을 삭제

 

이동

h

왼쪽으로 이동

l

오른쪽으로 이동

j

아래 행으로 이동

k

위 행으로 이동

w or W

다음 단어의 첫 글자로 이동

b or B

이전 단어의 첫 글자로 이동

e or E

단어의 마지막 글자로 이동

<CR>

다음 행의 첫 글자로 이동

^

그 행의 첫 글자로 이동

$

그 행의 마지막 글자로 이동

+

다음 행의 첫 글자로 이동

-

위 행의 첫 글자로 이동

(

이전 문장의 첫 글자로 이동

)

다음 문장의 첫 글자로 이동

{

이전 문단으로 이동

}

다음 문단으로 이동

H

커서를 화면의 맨 위로 이동

z<CR>

현재 행을 화면의 맨 위로 이동

M

커서를 화면의 중앙으로 이동

z.

현재 행을 화면의 중앙으로 이동

L

커서를 화면 최하단으로 이동

z-

현재 행을 화면의 최하단으로 이동

[n]H

커서를 위에서 n행으로 이동

[n]L

커서를 아래에서 n행으로 이동

Ctrl + u

반 화면 위로 스크롤

ctrl + d

반 화면 아래로 스크롤

Ctrl + b

한 화면 위로 스크롤

ctrl + f

한 화면 아래로 스크롤

gg, 1G

문서의 맨 첫 행으로 이동

G

문서의 맨 마지막 행으로 이동

[n]G

n행으로 이동

:[n]

n행으로 이동

 

복사 & 붙이기

yy

커서가 위치한 한 행 복사

p

붙여넣기

[N]yy

커서가 위치한 이후로 N행 복사

[N]p

N번만큼 붙여넣기 반복

 

블록 지정 관련

v

블록 지정

Ctrl + v

비쥬얼 블록 지정

~

대소문자 전환

d

삭제

y

복사

c

치환

>

행 앞에 탭 삽입

<

행 앞에 탭 제거

:

선택된 영역에 대하여 ex 명령

J

행을 합침

U

대문자로 만듦

u

소문자로 만듦

 

문자열 탐색 및 치환

/[문자열]

문자열을 탐색

:s/old/new

현재 행의 처음 old를 new로 교체

:s/old/new/g

현재 행의 모든 old를 new로 교체

:10,20s/old/new/g

10행부터 20행까지 모든 old를 new로 교체

:-3,+4s/old/new/g

현재 커서 위치에서 3행 위부터 4행 아래까지 old를 new로 교체

:%s/old/new/g

문서 전체에서 old를 new로 교체

:%s/old/new/gc

문서 전체에서 old를 new로 확인하며 교체

:g/pattern/s/old/new/g

pattern이 있는 모든 행의 old를 new로 교체

:g/pattern/s/new/g

:%s/old/new/g와 동일

 

파일 버퍼 관련 명령 요약

:buffers

버퍼의 내용을 나열

:files 또는 :ls

버퍼의 내용을 나열

:b[N]

N번 버퍼로 이동

:bd[N]

N번 버퍼를 삭제(N이 없으면 현재의 버퍼를 완전 삭제)

:bw[N]

N번 버퍼를 완전 삭제(N이 없으면 현재의 버퍼를 완전 삭제)

:bp[N]

이전 버퍼로 이동. N을 붙이면 N번만큼 이전 버퍼로 이동

:bn[N]

이후 버퍼로 이동. N을 붙이면 N번만큼 이후 버퍼로 이동

:sb[N]

창을 수평 분할하여 N번 버퍼를 로드

:bf

첫 번째 버퍼로 이동

:bl

마지막 버퍼로 이동

:al

현재 열려 있는 모든 버퍼를 수평 분할 창에 로드

 

마킹 및 마킹한 위치로 이동

명령어

내용

명령어

내용

ma

a로 마킹, mb는 b로 마킹

   

`a

a로 마킹된 위치로 돌아감

'a

a로 마킹된 행의 처음으로 돌아감

"

직전에 커서가 위치하던 행의 처음

``

직전의 커서 위치로 이동

' "

이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동

` "

이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동

 

ctags 관령 명령

:ta [tag] or Ctrl + ]

[tag]가 정의된 위치를 나열하고 선택한 위치로 점프, 현재 위치는 stack에 push된다.

:ts [tag] or :tj [tag]

:po or ctrl + t

stack top에 저장된 위치를 pop하고 그 위치로 점프

:sts [tag]

[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시

:stj [tag]

:tn

tj나 ts로 점프했을 때 다음 tag로 점프

:tp

tj나 ts로 점프했을 때 이전 tag로 점프

:tr

tj나 ts로 점프했을 때 처음 tag로 점프

:tl

tj나 ts로 점프했을 때 마지막 tag로 점프

:pts [tag]

[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시하지만 커서는 현재 위치에 유지

:ptj [tag]

미리보기 윈도우에 tag가 정의된 형식을 보임

:ptn

ptj나 pts로 점프했을 때 다음 tag로 점프

:ptp

ptj나 pts로 점프했을 때 이전 tag로 점프

:ptr

ptj나 pts로 점프했을 때 처음 tag로 점프

:ptl

ptj나 pts로 점프했을 때 마지막 tag로 점프

 

 레지스터 활용

vim a부터 z까지 26개의 네임 레지스터를 지원하는데 이를 반복되는 문자열을 저장해서 사용하면 편리하다.
"a[
저장할문장]    -> a 레지스터에 저장                 ex) "a3yy
"ap                 -> a
레지스터에 저장된 내용을 붙여넣기

 

 매크로 사용

네임 레지스터에 키 입력을 저장해서 사용하는 방법

q[네임 레지스터명] 입력한 뒤 저장할 키들을 순차적으로 누른 후 q를 누르면 저장된다.
@[
등록된 네임 레지스터명]을 누르면 저장된 키들을 사용할 수 있다.


 .vimrc 설정 변경 후 재시작 안하고 적용하는 법
:so .vimrc

전자회로실험

DK128


dk128 키트의 구성도. 기본적으로 2개의 보드로 이루어져 있는데, 한쪽엔 핵심칩인 Atmega128 칩이 장착되어 있고 한쪽엔 여러가지 IO들이 장착되어 있다.

Atmega128은 8비트 마이크로 컨트롤러로 Harvard architecture로 설계되어 있는 칩이다.
여기서 마이크로컨트롤러란 CPU코어 하나가 아니라 CPU와 메모리 및 주변 하드웨어 제어회로 모두를 뜻한다. 보통 MCU(Micro-controller Unix)이라 하며 1개의 칩으로 컴퓨터의 구현이 가능하다. Harvard architecture은 일반적인 컴퓨터 구조인 폰노이만 구조와 달리 프로그램 메모리와 데이터 메모리가 따로 분리되어 있는 구조이다. 즉, 어드레스 버스와 데이터 버스가 독립적으로 분리되어 있는데 이는 주소 접근과 데이터 접근을 동시에 할 수 있어서 CPU의 처리속도가 빠르다.

오늘은 DK128에 간단한 프로그램을 올려보는 과정을 실습하였다. 이 과정을 간단히 요약해보면 먼저 키트에 올릴 c소스코드를 작성하고 Atmega128용 컴파일러를 이용하여 컴파일한다. 컴파일 되서 나온 결과물을 Parallel port를 이용하여 Program flash에 write하면 이 과정이 끝나는 것이다.

1. 컴파일러 설치 : WinAVR이라는 Atmega128용 컴파일러를 설치 하였다. 이 자료는 http://winavr.sourceforge.net 에서 구할 수 있다.

2. Makefile 생성 : WinAVR을 설치하면 mfile이라는 프로그램이 같이 설치 된다. mfile을 이용하여 Atmega128에 맞는 Makefile를 생성한다.
- MCU type을 atmega128로 선택
- Enable Editing of Makefile 선택
- F_CPU 항목을 80000000 에서 16000000로 변경
- File > Save As로 Makefile을 저장)

3. 프로그램 작성 : Programmers Notepad 프로그램을 이용해서 프로그램을 작성한다.
- File > New로 Project를 생성
- 생성된 Project에 소스파일(ex.main.c)를 추가
- 생성된 소스파일이 존재하는 디렉토리에 2번과정에서 생성한 Makefile을 복사
- Tool > Make All 을 이용해 컴파일하면 .hex확장자 파일이 생성된다

4. PonyProg2000 설치 : 컴파일 된 .hex 파일을 키트에 올리기 위해서 설치한다 . 이 자료는 http://www.lancos.com에서 구할 수 있다.

5. 키트에 작성한 프로그램을 쓰기 : PonyProg2000을 이용하여 작성한 프로그램을 키트에 쓴다.
- Device > AVR micro에서 ATmega128선택
- Setup > Calibration > OK
- Setup > Interface Setup에서 Parallel // Avr ISP I/O // LPT1 을 선택
- Probe버튼을 눌려서 연결을 테스트 해본다.
- File > Open Program(Flash)File을 선택해서 생성한 .hex파일을 불러온다.
- Command > write program 을 선택하면 프로그램 Flash로 작성한 프로그램을 기록한다


오늘 직접 올려본 프로그램


실제 사용된 핀. C핀에 스위치 입력을 연결하고, F핀에 LED 출력을 연결했다.


실험결과 각 스위치들를 누르면 거기에 대응하는 LED에 불이 들어왔다.

 

 

vmware-tool 설치 & vi 사용법

오늘 오후 시간에는 저번 시간에 vmware에 우분투 리눅스를 설치한 곳에 vmware-tool을 설치하였다. 이 tool을 설치한 이유는 vmware상의 가상 virtual machine과 실제 Host 컴퓨터간의 데이터를 쉽게 이동시키기 위해서다. 이 머신 사이에 공유하는 폴더를 만듬으로써 쉽게 데이터를 이동시킬 수 있었다.

 

vi는 Visual editer의 약자로 리눅스 운영체제에서 보편적으로 가장 많이 사용하는 텍스트 편집기이다. vi는 일반 윈도우에서 사용하던 nodepad 같은 프로그램과 그 사용법이 완전히 다르기 때문에 vi를 처음부터 바로 사용하기는 어렵다.

vi는 세 가지 모드가 존재한다.
- 입력모드 : 문서를 편집하기 위한 모드
- 명령모드 : 커서 이동, 삭제, 복사, 붙이기 등의 작업이 가능
- ex 모드 : 라인 에디터인 ex 에디터 기능을 사용하는 모드

ex 모드 ->(esc키) 명령모드 ->(i, a, o, s) 입력모드
입력모드 ->(esc키) 명령모드 ->(:, /, ?) ex모드

vi에는 사용 가능한 무수히 많은 명령어들이 있는데, 최대한 키보드 자판에서 손을 놓지 않도록 설계되어 있기 때문에 익숙해지면 굉장히 강력한 편집기가 될 수 있다.

위의 표를 보면 vi의 명령어에 대해 자세히 나와 있다. 이 명령어들은 단독으로만 사용하는 것이 아니라 여러 조합으로 같이 사용할 수도 있다. 에를 들어 d(삭제)w(word)를 누르면 한 단어가 지워지고, d(삭제)G(파일 끝 줄로 이동)를 누르면 현재 위치에서 파일 끝까지의 내용을 지운다.

전자회로실험

Flip-Flop

Flip-Flop은 순차논리회로로 이전 정보를 기억하는 메모리 소자이다. 주로 컴퓨터의 레지스터에 사용된다. Flip-Flop의 종류에는 RS Flip-Flop, D Flip-Flop, T Flip-Flop, JK Flip-Flop이 있다

- RS Flip-Flop : R이 1이면 리셋, S가 1이면 셋

- D Flip-Flop : 입력을 그대로 출력

- T Flip-Flop : 입력이 들어올 때마다 출력의 상태가 바뀜

- JK Flip-Flop : RS Flip-Flop에 기능을 추가 JK 모두 1일 때 반전

 

오늘 실험에 사용한 칩은 74HC74N으로 Dual D-type Flip-Flop이다. 다음은 74HC74N의 데이터시트이다.


각 핀의 배열과 역할에 관한 데이터시트이다.


각 입력에 대한 출력 진리표이다. Table1을 보면 SD와 RD신호가 각각 LOW 일 때 출력이 셋, 리셋됨을 알 수 있다. 즉 low신호에 각각 셋, 리셋된다. 또한 위의 표에는 없지만 SD와RD에 동시에 High 신호를 입력해 보면 Q에서High신호가 출력되었다.


위 그림은 입력 신호 D가 인가 될 때, 어떤 타이밍에 Q신호가 출력이 되는지 잘 보여주고 있다. Flip-Flop은 기본적으로 클럭에 동기화 되어 동작하기 때문에 입력신호가 들어왔다고 해서 바로 출력이 나오는 것이 아니라 클럭에 맞춰서 출력이 나온다. 위의 칩은 positive-edge trigger이기때문에 클럭의 rising edge에서 출력값이 변하고 있다.

 

이번 실험은 D Flip-Flop의 동작을 직접 눈으로 확인하는 것이였다. 하지만 실험에서는 정확한 D Flip-Flop의 동작을 볼 수 없었다. Flip-Flop은 이진 데이터를 기억하는 소자이다. 실험에서 D에 Low값을 주고, 클럭핀에 신호를 한 번 주면 rising edge에서 출력 LED의 불이 꺼졌다가 falling edge를 만나면 바로 다시 불이 켜져버리는 것이였다. 이는 계속 Low값을 저장되어야 하는데 그렇지 못하다는 것을 뜻한다. 정확한 이유는 알 수 없었으나, 강사님 말씀으로는 정확한 클럭을 인가한게 아니라 임의로 우리가 스위치로 클럭을 만들어서 그럴것이라는 것이였다.

 

c언어

부가연산자 & 복합부가연산자

x = x + 5; 와 x += 5는 같은 의미를 가진다. 전자는 부가연산자(=)를 이용한 것이고, 후자는 복합부가연산자(+=)를 이용한 것이다.

예제소스

#include <stdio.h>

 

int main()

{

        int num = 17;

        printf("num += 5: %d\n", num += 5);

        printf("num -= 5: %d\n", num -= 5);

        printf("num *= 5: %d\n", num *= 5);

        printf("num /= 5: %d\n", num /= 5);

        printf("num %= 5: %d\n", num %= 5);

 

        return 0;

}


 

캐스트 연산자

산술연산이나 대입연산 등을 할 때 두 피연산자는 자료형이 같아야만 한다. 서로 다른 자료형을 산술연산이나 대입연산 등을 해야 되는 경우 캐스트 연산자를 이용하여 명시적으로 두 자료형을 맞춰줄 수 있다.

(자료형)수식

예제소스

#include <stdio.h>

 

int main()

{

        int intA = 14;

        int intB = 3;

        float floatC = 0;

 

        floatC = intA / intB;

        printf("%f\n", floatC);

 

        floatC = (float)intA / intB;

        printf("%f\n", floatC);

 

        return 0;

}


 

변수선언과 초기화

변수를 선언하면 cpu는 변수의 자료형에 맞는 메모리 공간을 확보한다. 이 메모리 공간에는 예전에 사용하던 아무 의미 없는 값들로 채워져 있는데 이를 쓰레기 값이라고 한다. 변수를 초기화 하지 않고 사용하게 되면 이 쓰레기 값들을 볼 수 있다.

예제소스

#include <stdio.h>

 

int main()

{

        int num1, num2;

 

        num2 = num1 + 10;      // num2를초기화하지않고바로사용

        printf("num1 : %d\nnum2 : %d\n", num1, num2);

 

        return 0;

}


 

if문

if문은 아래의 형식으로 사용한다. ~~~ 부분이 참이면(0이아니면) { }안의 명령문들을 실행하고, 거짓이면 { }안의 명령문들은 무시한다.

if(~~~)
{
}

예제소스

#include <stdio.h>

 

int main()

{

        int num1, num2, bigger;

 

        printf("Please enter two integer: ");

        scanf("%d %d", &num1, &num2);

 

        bigger = num1;

 

        if(num1 < num2)

        {

               bigger = num2; // 결국두수중큰수가bigger저장된다

        }

        printf("The larger number is : %3d\n", bigger);

 

        return 0;

}



 

  전자회로실습

 FND500 7-Segment LED Displays
 FND500 Datasheet

FND500은 7-Segment LED Displays로 Cathode Common 구조이다. 즉 common핀(3번or 8번핀)에 GND를 연결하고, 불을 켜고 싶은 곳의 전압을 주면 제대로 동작한다.


기본적으로 내부는 발광다이오드로 구성되어 있다. 다이오드는 한쪽 방향으로만 전류를 흐르게 해주는 특성이 있기때문에 구조에 따라 common핀에 어떤 극성을 연결시켜줘야 되는지 결정된다.


 74HC405 8-channel analog multiplexer/demultiplexer

74HC405 핀 배열 및 역할

입력에 따른 출력값
74HC405 멀티플렉서를 이용하여 입력신호에 따라 위의 FND500에 하나씩 신호가 들어오게 해보았다. 기본적으로 위의 표되로 제대로 된 출력을 보여주었으나, 다른 LED에도 약하게 불이 들어오는 현상이 있었다. 처음에는 출력의 Z의 의미를 몰라서 잠깐 혼란스러웠는데, 입력에 따라 출력 Y로 Z에 인가된 전압이 출력되는 것이었다. 이것이 멀티플렉스 동작이다.

반대로 디멀티플렉서 동작은 출력되는 Y쪽에 전압을 인가하면 역으로 Z로 Y에 인가된 전압이 나오는 것이다. 이를 이용하여 디멀티플렉서로 이용한다.


   C언어

 문자열은 하나 이상의 연속된 문자를 말하며, 큰따움표로써 표시한다. c컴파일러는 문자열 맨 마지막에 항상 '\0'(NULL문자)문자를 자동으로 넣어준다.
ex) "This is a string."

 c언어에는 많은 연산자가 있으며, 각각 우선순위가 정해져 있다.
ex) 산술연산자 : +, -, *, /, %
      비교연산자 : <, <=, >, >=, ==, != (비교연산자는 논리값인 참(1), 거짓(0)을 돌려주는 논리식을 만든다)
      논리연산자 : &&, ||, !
      증감연산자 : ++, -- (전치형, 후치형이 있으며 동작에는 미세한 차이가 있다)

 문자와 해당 아스키 코드를 출력하는 프로그램


A와 A의 아스키코드값 65가 출력으로 나왔다.

 8,10,16진수를 이용한 문자 출력 & escape sequence를 이용한 문자 출력



 문자열을 화면에 출력하는 프로그램


 비교 연산자를 사용하는 프로그램의 예

논리가 참이면 1 거짓이면 0으로 출력되고 있다.

 미성년자를 구분하는 프로그램

13세이상 19세미만이면 참이므로 1이 나온다. 그외는 거짓으로 0이 출력됨

 증감 연산자의 전치형과 후치형을 비교하는 프로그램

위의 결과를 보면 전치형과 후치형의 차이를 알 수 있다. 일단 전치형을 보면 증감연산부터 일어나고 그 다음 대입연산이 일어남을 알 수 있다. 반대로 후치형은 대입연산부터 일어나고 증감연산이 일어난다.

1. 원리

 

N형반도체 두조각 사이에 P형반도체 조각을 넣고,

그 P형반도체로 두 N형반도체 사이로 흐르는 전류를 조절 해보고 싶은

생각을 가진 과학자가 그렇게 해봤다고 생각한다.


         [ N형 ]                     [ P형 ]                        [ N형 ]

 

 

 

아래와 같이 접합면에 절연층이 생기고,

두개의 다이오드를 연결한 모습이 될것이다.

 


 

 

 

B에 (+) 전압을 걸고 A에 (-)를 걸면 B에서 A로 전류가 흐른다.

B에 (+) 전압을 걸고 C에 (-)를 걸면 B에서 C로 전류가 흐른다.

전류는 화살표 방향으로는 흐를 수 있기 때문이다.


 

 

 

 

B에 (-) 전압을 걸고 A에 (+)를 걸면 B에서 A로 전류가 흐르지 못한다.

B에 (-) 전압을 걸고 C에 (+)를 걸면 B에서 C로 전류가 흐르지 못한다.

당연하다. 전류는 화살표 방향으로만 흐를 수 있기 때문이다.

 

그림처럼 전자와 전공이 전극 쪽에 몰리고 절연체 층은 늘어난다.

때문에 어느쪽으로도 전류는 흐르지 않는다.


 

 

 

 

A에서 C로 전류가 흐르려 하면 A->B에서 흐름이 막힌다.

위의 경우와 동일하다.


 

 

 

C에서 A로 전류가 흐르려 하면 C->B에서 흐름이 막힌다. 

역시 위의 경우와 동일하다.


 

 

 

회로 기호와 유사하게 하기 위하여 접합체를 시계방향으로 90도 돌려 세워보자.

또한 절연층 표기는 무시 하기로 하고, 아래와 같이 전압을 걸면 전자와 전공의

위치가 그림과 같이 배치된다. 이때 P형반도체는 N형에 비해 아주 얇게한다.

                         


 

 

 

이상태에서 P형 반도체와 아래에 있는 N형반도체에 낮은 전압(약0.8V 정도)을

걸어보면 아래쪽 N형 반도체에 있는 전자들이 P형 반도체로 오다가 그 대부분이

상대적으로 더 높은 전압이 걸려 있는 위쪽 N형반도체 쪽으로 이동하고 만다.


 

 

 

이렇게 P형 반도체에서 아래쪽 N형 반도체로 흐르는 작은 전류에 비례하면서도

높은 전압으로 인한 훨씬 많은 전류가 위쪽 N형 반도체에서 아래쪽 N형 반도체로

흐르게 된다. P형 반도체의 전류가 막혀있던 문을 열어준것이다.

 

이런 구조를 NPN 트랜지스터라고 하며 배치를 바꾸면 PNP 트랜지스터가 된다.

이해하는 방법은 위와 같으며 흐름만 반대로 보면 된다.

 

이는 0.8V의 전압으로 흘려주는 작은 전류값이 10V에 의해 흐르는 큰 전류값을

제어 할 수 있게 된다. 이것을 트랜지스터 라고 한다. 이는 반도체의 저항값이

변화 한다는 의미에서 주어진것이다. (Trans:변화 + Resistor:저항 = Transistor)

 

위쪽 N형 반도체를 콜렉터(Collector),

가운데 P형 반도체를 베이스(Base),

아래쪽 N형 반도체를 에미터(Emitter) 라고한다.

 

다르게 표현하면, 진공관처럼 전류제어 작용을 한다.

진공관은 그리드에 걸어주는 전압으로 전류를 제어하고,

트랜지스트는 베이스 전류값으로 콜렉터 전류를 제어 할 수 있다.

 

 

 

2. 기호 (Symbol)

 

처음 그린 기호는 이랬을 것이다.

 


 

Emitter는 전자를 보내는 곳이란 뜻을 가지고 있고,

Base는 기초나 출발점의 의미를 가지므로 전자를 제어한다고 생각하며,

Collector는 수집의 의가 있으므로 전자들이 모이는 곳이라고 본다.(주관)

 

Vbe는 베이그와 에미터에 걸어주는 전압으로 전자의 흐름을 제어하는 전압이고,

Vce는 콜렉터와 에미터사이에 걸어주는 전압으로 실제로 일(W)을 하는 전압이다.

 

그리고 나중에 아래와 같이 바뀌었을것 것이고,


지금은 케이스 넣고 아래와 같이 쓰고 있다. PNP 트랜지스터는 에미터의

화살표 방향만 바꾸어 그리면 된다. 모든 동작은 NPN과 반대이다.

 

이 화살표 방향은 다이오드의 방향이다. 그리고 콜렉터 측의 화살표는

표시하지 않는다. 즉 화살표가 있는 곳이 에미터이다.

 


아래의 3진공관과 같이 신호를 증폭하기도 하고, 증폭된 신호일부를

다시 베이스에 넣어 (궤환:Feed Back) 발진하기도 한다.

 


출 처 : http://blog.naver.com/tksvo/150044362840

  반도체
도체와 절연체 중간의 전기적 성질을 갖는 고체

  P형 반도체
인듐(In) 또는 갈륨(Ga) 등 양전하 캐리어수를 많게하는 불순물을 도핑한 반도체로 소수의 전자, 다수의 정공(양전하)이 존재한다.

  N형 반도체
비소(As) 또는 안티몬(Sb) 등 음전하 캐리어수를 많게하는 불순물을 도핑한 반도체로 다수의 전자, 소수의 정공(양전하)이 존재한다.

  PN접합 다이오드
P형 반도체와 N형 반도체를 서로 접합시킨 것..

//////////////////////////////////// 위키백과 인용 ////////////////////////////////////

p-n접합이 처음 생성되면, N영역의 자유영역 전자들이 정공이 많은 P영역으로 확산된다. 자유 전자들이 정공과 결합한 후에는 정공은 사라지며 전자들은 더 이상 자유롭지 못하게 된다. 따라서 두 속성의 전하 캐리어들(정공과 전자)이 모두 사라지고, p-n 접합 주변 지역은 마치 부도체인 것처럼 동작한다. 이를 재결합이라고 한다. 하지만 소모층의 크기에는 한계가 있고 얼마 후에는 재결합이 끝난다. 이때 외부 전압을 다이오드 소모층에 생긴 built-in potential과 같은 극방향으로 걸어주면, 소모층은 계속해서 부도체처럼 동작하고 전류의 흐름을 막는다. 이와 반대로 built-in potential과 반대 극 방향으로 외부 전압을 걸어주면, 재결합을 다시 시작한다. 결국 p-n접합을 지나 상당한 양의 전류가 흐른다.

/////////////////////////////////////////////////////////////////////////////////////

/////////////////// 출처 : http://blog.naver.com/tksvo/150042527877 ///////////////////

P형과 N형 반도체를 서로 접합시키면 빈자리인 정공으로 전자가 들어가

최외곽 전자가 8개로 되어 전자가 이동할 수 없는 부도체 영역이 생긴다.


그렇다고 전부가 부도체로 되는 것은 아니다. 한번 부도체 층이 생기면

전자나 정공이 그 절연층을 통과 하지 못하므로 결합이 중단된다.

부도체 층을 이해하기 좋게 두껍게 그렸지만, 실제로는 미크론( μ :1/1000mm)

단위의 얇은 막 상태이므로 약간의 전압만으로도 무너진다. 실리콘으 로 만든

반도체는 약 0.6V (볼트), 게르마늄으로 만든 반도체는 0.2V(볼트)만 으로도

전자와 정공이 막(절연층)을 통과할 수 있다.


좀더 정확히 말하면, 전자와 정공이 결합한다는 것은, P형반도체 쪽은 균형상태에서

(+)인 정공이 사라졌기 때문에 점점 (-)전위를 가지게 되고, N형 반도체쪽은 (-)를

잃었기 때문에 점점(+)전위를 띠게 된다.


때문에 (+)인 정공이 (+)전위를 띠게된 N형 반도체쪽으로 가기 힘들고, (-)인 전자가

(-)전위를 띤 P형 반도체 쪽으로 가기 힘들어진다. 이 장벽을 전위장벽이라고 한다.

앞의 표현은 우선 쉽게 표현하기 위해서 절연층이라고 했다. 이 전위장벽을 넘어서

전류가 흐를려면은 0.2V ~ 0.6V의 전압이 필요하다.

 

이들 양쪽에 전극(전선을 잇기 위한 금속(도체)단자)을 달고 전압을 걸어보면

다음과 같은 현상이 생긴다.



먼저 아래와 같이 이어보면, 음양이 서로 당기는 이치에 의해 전자는 (+)극으로

정공은 (-) 극으로 끌려간다. 그 결과로 가운데의 부도체 영역만 늘어난다.

 

참고로 전자와 정공의 (-)전하와 (+)전하는 측정하기 어려울만큼 낮으므로 서로

당기지 못하고, 상대적으로 무척 높은 전지의 (+)와 (-) 쪽으로 끌려간다. 전 압이

높아질수록 절연층이 더 두터워지기 때문에 전류는 더욱 흐르지 않는다.

 

하지만 어떤 전압 이상이 되면 전체 절연층을 파손시키고 전극과 전극으로 전류가

흐르게 된다. 이 전압을 Break Down Voltage 라고 하며, 다이오드의 최대 역전압

정격이 된다.

 


 

이제 반대로 이어보면, 당기는 극성이 반대편에 있다. 물론 가까운곳에 정공은 전자가,

전자는 정공이 있지만 비교되지 않을 만큼 높은 (+)와 (-)가 있는쪽으로 끌려가게 된다.

 

저항기를 이어둔 이유는, 큰전류가 흐르는 것(합선:SHORT)을 막기위함이다. 건전지

전압이 1.5V 이고 저항값이 10 Ohm 이라면, 초기에 절연층을 넘어가기 위하여 0.6V 를

소비하고 나머지 0.9V의 힘으로 10 Ohm의 저항기를 지나게 된다.

 

전류(I) = 전압(V) / 저항(R) [A} 이므로  전류(I) = 0.9 / 10 = 0.09[A] 가 흐르게된다.

이때 저항기에서 열로 소비되는 전 력(W) 은 0.9[V] * 0.09[A] = 0.081[W]이다.

1초당 발열량은 0.24 x W [Kcal]이므로, 0.019 [Kcal] 즉, 19 [Cal] 이다.

 

같은 논리로, PN 접합 DIODE 에서 소비되는 전력은 0.6[V] * 0.09[A] = 0.054[W]이고

1초당 발열량은 0.24 x W [Kcal]이므로, 0.013 [Kcal] 즉, 13 [Cal] 이다.  결국 건전지가

소비하는 총전력은 둘을 더한 0.135 [W] 이고, 발생시킨 열량은 32 [Cal] 이다.

 


 

2극 진공관처럼 한쪽 방향으로만 전류가 흐르는 정 류기(DIODE)이다.

진공관과의 차이점은, 진공관은 높은 전압만 정류할 수 있고, PN접합 반도체

다이오드는 1V 미만의 낮은 전압부터 진공관 만큼 높은 전압도 정류할 수 있는것이다.

 

기호는 아래와 같다. 화살표 방향으로만 흐른다는 의미이다. 히터, 모타 등을 제외한

많은 전기제품은 직류를 사용한다. 당시 이 다이오드 덕분에 3극, 4극, 5극 진공과 같은

역할을 하는 전류제어용 반도체 소자만 만들면 낮은 전압으로 동작하는 제품을  만들 수

있다고 생각하고 힘내어 연구하기 시작 했을 것이다.

 


////////////////////////////////////////////////////////////////////////////////////

   전자회로실습

  사용한 TTL IC 칩
74HC08 2-INPUT-AND-GATE

74HC00 2-INPUT-NAND-GATE

  오늘 구성한 회로
오늘 구성해본 회로다. NAND 게이트를 이용하여 NOT를 구현한 회로다.
위 회로의 진리표

실제 회로 구성한 사진


   c언어 실습

  키보드로부터 숫자를 입력받아 화면에 출력하는 프로그램

  여기서는 scanf()함수의 사용법을 알아보았다. scanf()함수는 표준출력함수로 위 소스에서는 키보드로부터 정수를 입력받아서 name변수에 대입한다.

  자료형의 크기를 화면에 출력하는 프로그램

sizof() 연산자를 이용하여 자료형들의 크기를 알아보았다. sizeof()연산자는 자료형, 변수, 수식에 모두 사용가능하다.

 
 정수형 상수를 화면에 출력하는 프로그램



 실수를 화면에 출력하는 프로그램

실수를 printf()함수의 옵션에 따라 여러가지 형태로 출력한다.


 아스키코드를 확인하는 프로그램

컴퓨터는 내부적으로 이진수만 처리한다. 인간이 사용하는 문자를 컴퓨터에서 사용하기 위해서 각 문자마다 이진수로 정해놓고 이를 활용하는데, 이를 확인하는 코드(아스키 코드)를 작성해 보았다.





find

    : 지정된 경로로 주어진 조건에 따라 파일을 찾고, 그 경로를 보여줌

      root에서 접근 권한을 제한한 파일이나 디렉토리에 관해서는 " 허가 거부됨" 이라는

      메세지가 뜨고 찾지를 못함 (경로를 지정하지 않으면 현재 디렉토리부터임)

   1. 사용법

       find [경로] options expression!

    2. 옵션들

        -name : 이름을 기준으로 ...

        -perm : 퍼미션을 기준으로...

        -gruop: 해당그룹 소유의  파일이나 디렉토리를 찾을때

        -user : 해당 소유자의 파일이나 디렉토리를 찾을때

        -atime n  : n일 이전에 엑세스한 파일을 찾을때

        -ctime n : n일 이전에 변경된 파일을 찾을때

        -mtime n : n일 이전에 수정된 파일을 찾을때

        -exec : 찾아진 파일등과 연계하여 명령을 내리게 하는 옵션

                    사용하기위해 마지막에  " \; "를 입력해야함.

         -type : 찾고자 하는 파일이나, 디렉토리의 유형을 지정해 줄때

                1)  -type d : 디렉토리를 찾는다

                2)  -type f : 일반파일을 찾는다

                3)  -type l :  링크된 것을 찾는다.

                4)  -type b : 블록 파일을 찾는다.

                5)  -type c : 문자 파일( usb, serial port)을 찾는다.

                6)  -type p : 파이프인 특수 파일을 찾는다      

                7)  -type s : 소켓파일을 찾는다. 

         -ok : -exec와 유사

         -print : 출력을 화면으로...(생략가능)

                   뒤에 2>/dev/null 를 쓰면 접근 권한이 없는 파일이나 디렉토리에 접근시 나오는

                    리스트는 화면에 출력하지 않는다.

          -ls : 상세히 출력

         -size n : n블록 길이의 파일을 찾는다. +n은 n블록보다 큰파일, -n은 n블록도다 작은파일

                       nc는 n문자 길이의 파일..

         -inum n : inode번호가 n인 파일을 찾을때


   논리식(부울대수)

1. 부울 대수의 개념

 ① 하나의 명제가 참 또는 거짓인가를 판단하 는데 이용되는 수학적인 방법 (수학자 불(G.Boole)에 의해 개발)

 ② 이진변수논리 동작을 취급하는 대수

 ③ 부울 대수를 이용하여 기본적인 연산은 NOT연산, AND연산, OR연산 등이 있음

 

2. 부울 대수의 목적

 ① 변수 사이의 진리표 관계를 대수 형식으로 표시

 ② 논리도의 입출력 관계를 대수 형식으로 표시

 ③ 같은 기능을 가진 더 간단한 회로를 발견할 수 있음

 

3. 부울 대수의 기본 법칙

 


 ⑴ 교환법칙

  ① A + B = B + A

  ② A · B = B · A

 

 ⑶ 배분법칙

   ① A · (B + C) = A · B + A · C

   ② A + (B · C) = (A + B) · (A + C)

 

 ⑸ 누승법칙

   ① A + A = A

   ② A · A = A

 

 ⑺ 항등법칙

   ① A + 0 = A     ② A + 1 = 1

   ③ A · 1 = A      ④ A · 0 = 0

 

 ⑼ 드모르간(De-Morgan)법칙

   ① (A + B)' = A' · B'

   ② (A · B)' = A' + B'


 ⑵ 결합법칙

   ① (A + B) + C = A + (B + C)

   ② (A · B) · C = A · (B · C)

 

 ⑷ 부정의 법칙

   ① (A')' = A

 

 

 ⑹ 흡수법칙

   ① A + A · B = (A + A) · (1 + B) = A · 1 = A

   ② A · (A + B) = (A · A) + (A · B) = A + (A · B)

                       = (A + A) · (1 + B) = A · 1 = A

 

 ⑻ 보간법칙

   ① A' + A = 1

   ② A' · A = 0


위의 논리식을 이용하여 복잡한 회로를 간단하게 만들수 있다. 하지만 너무  복잡한 수식은 계산하기 어려운데 이는 카르노맵을 이용하면 쉽게 간략화 할 수 있다.


   트랜지스터

 오늘 실습에서는 C3202를 이용하여 트랜지스터의 원리 및 사용법들을 알아보았다.

오늘 사용한 C3202의 데이터시트 이다.(NPN 트랜지스터)

NPN 트랜지스터의 구조와 기호

 트랜지스터에는 에미터 베이스 콜렉터가 존재한다. 기본적으로 콜렉터를 출력으로 사용하고 에미터 베이스는 npn pnp에 따라 역할이 달라지는데, 오늘 사용한 npn 트랜지스터는 에미터가 스위치 역할을 하고 베이스로 입력되는 전압을 인가하면 된다.

 즉, 정리를 해보면 이렇다.
 NPN 트랜지스터
- 에미터 : 전압을 인가하면 콜렉터로 출력이 나온다.(스위치역할)
- 베이스 : 입력
- 콜렉터 : 출력 (에미터에 인가된 전압 + 베이스에 인가된 전압 : 결론적으로 증폭된 전압이 출력)


   컴퓨터에서의 수의 표현(음수)

 일반적으로 컴퓨터 시스템에서의 수의체계는 '1','0'으로 이루어져 있는 2진수 체계이다. 그럼 2진수 체계에서 음수는 어떻게 표현될까? 현실세계에서는 숫자 앞에 '-'기호를 이용하여 음수를 표현하는데 컴퓨터를 저런 기호를 알지 못한다.

- magnitude 방식
아주 간단한 방식으로 제일 왼쪽비트 한 비트를 부호비트로 생각해서 0이면 양수, 1이면 음수를 나타낸다. 하지만 덧셈이 제대로 이루어 지지 않는다는 약점이 있어 컴퓨터 시스템에서 사용하지 않는다.

- 2의 보수
양수 값의 1의 보수를 구한 뒤 1을 더한 값으로 음수를 표현하는 방식으로 컴퓨터에서 실제로 사용하는 방식이다. 사칙연산이 잘 적용 된다.


수의 체계(2의보수)를 알아 보기 위한 c소스코드
결과출력 255가 -1로 254가 -2로 표현되는 것을 알 수 있다.




  코일(인덕터)

 교류를 충전/방전하는 소자. 교류성분을 제한한다. 단위 면적당 감은 횟수가 많아 질수록 용량은 커진다.

초크 코일

 
코일 기호도

  RELAY(PA1A-5V)

 코일을 이용한 스위치... 전자석 원리를 이용하여 코일에 전류를 흘려줬을 때, 딸칵 소리와 함께 접지하여 전류를 흐리게 해준다.
RELAY의 데이터 시트 중 핀의 역할을 나타내는 그림이다. Coil 부분에 전류를 흘러 주게 되면 딸칵 소리와 함께 접지가 된다. 그리되면 COM 입력이 N.O 출력으로 나오게 된다. 이를 직접 브레드보드판에서 LED를 이용하여 확인해 보았다.


  논리 게이트



  c언어 컴파일 과정

위 그림은 일반적인 c언어의 컴파일 과정을 대략적으로 보여준다. 보통 위의 like.i like.s 파일들은 컴파일 과정에서 보이지 않는데 이는 컴파일러가 필요 없다고 생각해서 알아서 지운 것이다. 이 파일들을 보고 싶으면 컴파일러에 따로 옵션을 줘서 지우지 않게 하면 된다.

* 리눅스에서 사용하는 gcc에서 저 파일들을 보려면 주어야 할 옵션
     gcc -save-temps -o like like.c
* MS사의 cl 컴파일러에서 저 파일들을 보려면 주어야 할 옵션
     cl /P like.c     : like.i 파일 생성
     cl /Fa like.c    : like.asm 파일 생성


  c언어 변수

 기본적으로 컴퓨터는 프로그램을 메모리상에 두고 이를 cpu로 가져와서 실행하게 된다. c언어에서 변수선언의 의미는 이 메모리 공간을 확보하는 것이다. 변수의 자료형(타입)에 따라서 얼마의 공간을 확보하는지 결정되며, 변수를 선언하면 내부적으로 심볼 테이블에 변수의 자료형, 변수명, 해당주소를 저장한다.

 실습한 코드
////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>

int main()
{
  char test;  // char형 변수 선언(1byte메모리할당)
  test = 'a';  // 변수 test에 문자'a' 대입

  printf("The Character is %c.\n", test);  // 변수 test 출력
  return 0;
}

////////////////////////////////////////////////////////////////////////////////////
 결과 출력

+ Recent posts