요술고양이의 Digital Life


연초부터 기나긴 포스트 릴레이를 하고 있는 요술고양이 입니다.
방문해주시는 분도 많고 격려해주시는 분도 많아...

취미전자 활성화를 위해..
네이버 블로그 -> 네이버 카페에서 진행했던 마이크로프로세서 기초 강좌를..

티스토리에서 다시 한번 포스팅합니다.
지난 포스팅을 그냥 스크랩해도 되겠지만 워낙 기간이 지난 포스트들의 내용이고
스스로 불만족스러운 부분을 계속 수정하여 작성하려고 합니다.

3번째 revision 강좌로써~
많은 분들이 전자에 관심을 갖고 정보를 나누었으면 좋겠습니다.

1. 강좌 취지

저는 본래 전자전공이 아니었습니다. C언어도 잘 못하는 어중이떠중이 컴퓨터공학도였을 뿐이었지요..
그런데 무슨 바람이 들었는지 모르겠지만 갑자기 군대 다녀오고 하드웨어가 하고 싶었습니다.

그래서 걍 하드웨어 공부하면서 흥미를 얻어 전과를 해버렸습니다. 하하
하지만 독학을 하다보니 그 어려움은 말로 못하더군요..

그래서 최소한 저와 같은 어려움을 겪는 학생에게 도움이 되고자..
그리고 이쪽과 전혀! 무관한 전공이지만 취미공작을 하고 싶으신 분들을 위해서..

최대한 쉽게 접근할 수 있도록 글을 작성하려고 합니다.

칭찬해주신 것 만큼 실력은 없지만! 요런 것이라도 나누는 정으로 블로그를 꾸려나갈까 합니다.

참고로 나 전자 좀 할줄 알고 마이크로프로세서 좀 만질줄 아신다 하시는 분은
요 강좌 카테고리에 그리 신경쓰지 않으셔도 됩니다.

강좌의 대부분은 저처럼 초보시절을 겪고계신 분들을 위한 포스트가 될 것 입니다.

2. 마이크로프로세서란 무엇인가?

여러분께 가장 먼저 알려드려야 하는 대목인 것 같습니다.
마이크로프로세서란 무엇인가?

여기서 프로세서의 아키텍쳐가 어떻고 내부 구조는 어떠하며, 동작 원리, 전압 특성 등을 나열하면..
골치만 아프겠지요~ 그래서 그런 이야기는 모두 싹 패스합니다.
지금 설명하는 저도 자신있게 설명하기 힘들고.. 이 글을 보실 분들에게도 이해만 안되는 글일 뿐입니다. 

그래도 간단하고 쉽게 이해를 해보도록 합니다!

자 그럼! 마이크로프로세서란 무엇일까요? 

마이크로가 주로 쓰이는 뜻 처럼 말 그대로 소형 프로세서입니다. TTL이나 CMOS IC들은 정해진 특성대로만 움직이는 데 비해.. 마이크로 프로세서는 프로세서 내에 프로그램을 주입해서 자신이 원하는 동작 특성을 구현 할 수 있습니다.

참고로 마이크로프로세서 내부에는 ROM, RAM 그리고 각종 컨트롤러가 내장되어 있기 때문에..
펌웨어라고 하는 프로그램을 작성하여 내부 ROM에 기입을 하면, 내부 RAM 사용하여 연산을 하고 명령어를 처리하여, 각 명령에 맞는 동작 특성을 보여주게 됩니다.

 우리가 쓰는 많은 전자제품에는 이러한 마이크로프로세서가 거의 다 들어가 있으며, 다양한 역할을 수행하는 만큼 정말 수많은 마이크로프로세서가 존재를 합니다. 이러한 마이크로프로세서를 제어하는 것은 매우 어렵고 복잡할 수 있으나 그 원리를 이해하면, 간단한 리모콘이라던가 무선자동차 같은 것도 개조하여 제어할 수도 있고, 밝기를 제어할 수 있는 조명, 디지털 시계, 게임 조이스틱, 무선 통신 등등 우리가 상상하는 대부분의 것들을 직접 제어하거나 또는 만들어 볼 수 있습니다.

저는 그 중 수많은 프로세서 중에서..

Microchip사의 PIC 시리즈 프로세서를 중심으로 여러분께 원리를 설명하고, 강좌를 이어가고자 합니다.
참고로 MCU의 동작은 대동소이하므로 어느 프로세서를 하나 습득하신다면 다른 프로세서를 사용하는 것에는 큰 차이가 없음을 밝힙니다. 

3. PIC 마이크로 프로세서는 무엇인가?

 이미 앞서 언급한 것 처럼 마이크로프로세서라는 것은 종류가 꽤 많이 있습니다. 우리가 쓰는 일반 PC도 인텔, AMD, VIA 등 각기 다른 종류의 CPU 제조업체가 있는 것 처럼 마이크로프로세서 또한 여러 회사마다 각기 다른 여러가지 프로세서를 제조하고 있습니다.

그 중 PIC는 Microchip사에서 제조하는 마이크로프로세서로서 PICxxxxxxxx 와 같은 이름으로 시작합니다.
PIC는 그 자체로도 종류가 많으며 간략하게 설명을 드리자면 다음과 같습니다.

PIC10 시리즈 - 극 소형 8비트 프로세서
PIC12 시리즈 - 베이스 8비트 프로세서 (일부 미드레인지)
PIC16 시리즈 - 미드레인지 8비트 프로세서 (일반적으로 많이 사용)
PIC18 시리즈 - 하이엔드 8비트 프로세서 (고급 성능 및 컨트롤러 내장)
PIC24 시리즈 - 16비트 프로세서
dsPIC30, 33 시리즈 - 16비트 dsp코어 내장 빠른 처리속도의 고급 프로세서
PIC32 시리즈 - MIPS 코어를 이용한 32비트 프로세서

기타 PIC14, PIC17도 있음(일부 제한적인 모델)

여기서 일단 모르는 용어는 가볍게 읽고 넘어가시거나..
궁금하시다면 인터넷에서 용어사전을 찾아보시면 될 것 같습니다. 

4. 8비트와 16비트, 32비트 그리고 MCU와 MPU

 보통 이런 프로세서를 처음 접하면 8비트 프로세서, MCU, MPU라는 말을 많이 접하게 됩니다. 먼저 MCU와 MPU는 Micro Controller Unit와 Micro Processor Unit의 약자로서 컨트롤 위주의 성향이 짙은가 연산 위주의 성향이 짙은가로 구분을 짓습니다. 여기서 언급하는 마이크로프로세서는 MCU라고 대부분이 인식을 하고 있기에 별다른 이유가 없다면 앞으로 마이크로 프로세서는 MCU라고 통칭하겠습니다.

그럼 8비트와 16비트, 32비트의 차이는?
 간단하게 한번의 명령어로 처리할 수 있는 처리단위 입니다.

좀 더 쉽게 풀어쓰자면..
8비트는 2진수로 11111111로서 10진수로는 0 ~ 255를 표현할 수 있습니다.
8비트 프로세서는 즉, 255를 넘는 수를 덧셈하거나 기타 연산을 할 때 한번의 명령어 사이클에 처리 가능하지 못하다는 말이됩니다. 그러나 16비트 프로세서는 65535까지 가능하므로 65535만 넘지 않는다면 그 이하의 수는 한번의 명령어 사이클에 처리가 가능하다는 의미가 됩니다.

5. 마이크로프로세서의 동작

먼저 간단하게 디지털 개념을 집고 넘어갑시다.
컴퓨터는 1과 0 밖에 몰라라는 말을 기억하시나요?

왜 컴퓨터는 2진수를 기본으로 사용할까요?
기본 디지털 개념은 간단합니다.

1 이면 전압이 인가되어 전류가 흐르고 0 이면 흐르지 않는다가 되고
논리로 참 아니면 거짓이 됩니다.

그럼 전압이란 것을 기준으로 논리 참(1)과 거짓(0)을 구분 짓겠습니다.

MCU의 동작 전압은 다양하지만.. 3.3V와 5V가 많이 사용됩니다.
그럼 여기서는 MCU 동작 전압을 5V라고 볼 때
전압이 인가되면 논리가 1이고 아니면 0이라고 했기 때문에..

여기에서 논리 로직은 5V 전압인가를 1로 보고 0V를 0이 됩니다. 

[그림 1] PIC16F84A 핀 다이어그램


자 위에는 16F84A라는 PIC의 한 종류이고 핀 배열을 나타낸 그림입니다.
핀 다리에 이것저것 많이 씌여 있는데 MCLR, VSS, VDD, OSC1/CLKIN, OSC2/CLKOUT 등은 차후에 설명하기로 하고 일단 RAx와 RBx를 봐주세요... 

위 PIC16F84A의 경우에는 실제적으로 우리는 RA0~4, RB0~7를 제어하거나 이용할 것입니다.

보통은 RA부분을 포트A(PORTA), RB부분을 포트B(PORTB)라고 합니다.
(보실 때 구분을 하기 쉽게 포트A는 분홍을 포트B엔 하늘색으로 표시하겠습니다.)

위 포트를 입출력(Input/Output)포트라고 부르거나 GPIO(General Purpose Input Output)포트라고 부릅니다.
입출력 포트라고 부르는 이유는 우리는 임의의 프로그램을 작성하여..
위의 I/O 핀을 입력이 가능한 핀(스위치나 센서를 연결할 때)으로 만들거나  출력이 가능한 핀(LED 불을 켜거나, 모터 등을 제어)으로 만들 수 가 있기 때문입니다.

일반적으로 입출력 핀은 어느 핀이던 상관없이 입출력을 사용자 임의대로 설정할 수 있습니다.

그럼 여기서 하나의 예를 들어보도록 하겠습니다.
(여기서 부터는 정신 바짝! 차리시고 천천히 음미하면서 읽으시길 바랍니다.)



[그림 2] 예시 구성도


 그럼 RA0 ~ 3에 우리는 스위치를 각각 연결했다고 봅시다.
그리고 만약 스위치가 눌리면 [그림 2]와 같이 전압원과 연결되어 5V의 전압이이 MCU로 흘러들어들어가게 될 것입니다. 
(위 그림은 예시를 위한 그림일뿐입니다.)

그리고 RB0~3에는 순서대로 빨강, 노랑, 녹색, 파랑색 불이 들어오는 LED 연결하여 회로구성을 했다고 가정해봅시다.
(참고로 RA4, RB4~7엔 아무것도 연결하지 않은 상태입니다.)

그리고 프로그램을 작성니다.

프로그램에서 먼저 RA0 ~ 3 부분은 스위치를 달았기 때문에 입력으로 설정하고..
RB0~3 부분은 출력으로 설정합니다.
 
그 다음에는 RA0핀을 조사하여 전압이 감지되면 RB0 핀에 전류(전압출력)가 흐르게 하고 다른 핀들도 RA1핀은 RB1핀에.. RA2핀은 RB2핀에.. RA3핀은 RB3핀에.. 위와 같이 매치가 되도록 프로그래밍을 합니다. 

그리고 프로그램을 모두 작성하면 컴파일 합니다.
문제없이 프로그래밍 되었다면 hex란 파일이 생성 될 것이고.. 우리는 이 hex 파일을 MCU 내부에 주입합니다.

참고!

프로그램 주입은 보통 프로그래머란 장비가 있습니다.. (직접 자작도 가능합니다.)
요즘 대부분의 MCU는 내부 롬이 플래시로 되어 있어.. 수만번 쓰기가 가능합니다.

 그렇게 프로그램 주입까지 완료가 되었으면, 동작을 위해서 전원을 켭니다. 그러면 RA0~3중 RA0핀에 연결된 버튼을 눌러봅니다. 그럼 RA0 핀은 전압이 인가되고 전류가 안흐르다가 흘렀으므로 논리적으로는 0에서 1로 값이 변했습니다.

마이크로 프로세서는 논리적으로 1이 되었음을 인지 합니다. 우리는 프로그램을 작성 시 스위치가 눌렀을 경우에 불이 켜지게 했으니.. RB0에 연결된 빨간 LED에 불이 들어 올 것 입니다.

간단하게 본다면 즉 RA0핀이 전압이 인가되어 변화(스위치가 눌렸음)가 생겼으니..
RB1의 핀에 전압 출력을 하여 전류가 흐르게 하여라 라고 명령한 것과 같게되는 겁니다.^^

MCU의 가장 간단한 사용법을 쉽게 생각해보면 RA0~4, RB0~7와 같은 입출력(I/O) 핀에 임의대로 어떻게 전압. 전류를 흐르게 하느냐 마느냐를 프로그래밍으로 제어하는거라고 생각하시면 되겠습니다.

이해가 되셨나요?
조금더 고급? 제어를 해본다면 RA0을 누르면 1초뒤에 불이 켜지고 꺼지게 한다던가..
RA1를 누르면 순차적으로 불이 켜지게 한다던가..
사용자 프로그래밍에 따라 얼마든지 제어를 할 수 있으며...
이런 기본적인 포트 제어를 통하여..
우리는 모든 전자 주변기기를 제어할 수 있게 되는 겁니다.

이번 포스트는 최대한 이해를 위한 포스트였는데..
제대로 설명을 했는지 모르겠습니다.
질문은 대부분 네이버 카페에서 해결하고 있으니, 모르는 부분은 카페에 질문을 해주시면 좋겠네요~

http://cafe.naver.com/micropic

그럼 이번 포스트는 여기까지 하겠습니다.
다음은 마프를 배우기 위해서 필요한 것들에 대해 살펴보도록 하겠습니다.

Comment +8

  • soulbeam 2009.01.02 06:10 신고

    좋은 블로그군요. 공학을 전공했던 한 사람으로서, 이런 좋은 글들이 전자/컴퓨터 공학쪽에 많이 학생들이 관심을 갖게 되는 계기가 되었으면 좋겠군요. 앞으로도 꾸준한 블로깅 부탁드립니다....

  • 저는 전산학과를 졸업했지만 모니터를 벗어 나는 프로그램에 대한 욕심으로 8051 / AVR을 독학하고 있답니다.
    회로 이론에 대해서 하나도 아는게 없다 보니 이래저래 힘드네요 ^^

  • 필링이 2009.10.12 09:37 신고

    저도 컴퓨터공학과에 재학중이지만 임베디드쪽에 대한 관심만 많았던차에 조금이나마 알아갈수있을꺼같아좋네요^^
    정말감사드려요^^

  • 와 감사합니다 재밌네요~ 마이크로 초짜인 저에게도 쏙쏙들어옵니다^-^

  • 김신현 2010.01.04 12:23 신고

    감사합니다~ ㅜ_ㅡ 컴공 전공 하다 이번에 기울기 센서를 사용하려고 하니 정보가 하나도 없어 막막했는데..

    감사합니다~!

  • 이승철 2011.01.21 10:52 신고

    올해 전자과 3학년올라가는데 정말 이해가잘되네요 감사합니다!

  • BlogIcon jsh 2016.11.16 15:48 신고

    고양이님 질문 드리고 싶은게 있어서요 ..