[MCU]초보자편

MCU로 무얼 할 수 있나요? MSP430으론 무엇을 할 수 있죠?

사랑벌레 2018. 9. 4. 19:16

이 블로그는 MSP430, MSP432에 대해 설명하는 블로그입니다.

MSP430, MSP432라는 MCU를 가지고 무언가 재밌고, 내게 필요한 것을 만들기 위해서 알아야 하는 것들에 대해 설명할 것입니다.

그리고 중간 중간에 DIY나 응용편을 통해서 실용적인 무언가를 만들고 프로그래밍 하는 과정에 대해서도 다룰 예정입니다.


그런데 말입니다.

초보자 분들의 경우에는 어디서부터 시작해야 하는지를 모르실 것입니다. 당연합니다.

그래서 준비해 봤습니다.


초보자 분들이 고민하는 내용들을 여러가지 질문에 대한 답변으로 다루어 보았습니다.



Q : 저는 MCU도 모르고, C 언어도 몰라요. 그래도 할 수 있나요?

A : 아마 당신은 (전자나 컴퓨터) 비 전공자 이시겠군요. 결론 부터 말씀드리자면 Yes and No 입니다. 

가령, 인터넷 게임도 그것을 잘 하려면 시간이 필요합니다. MCU도 배우고 C언어 외 다른 언어도 배우면 좋습니다. 어느정도 알아 가기 위해서는 시간이 필요합니다. 

하나 중요한 점은 MCU를 가지고 무언가를 완성하였을 때, 그리고 하나씩 하나씩 진행해 나가면서 얻는 성취감은 큰 보상이 될 것 입니다.


Q : C나 자바를 배운 적이 있어요. 그런데 재미가 없었어요. MCU에 프로그래밍 하는 것은 재미가 있을까요?

A : 저도 그랬습니다. 저는 전자과 졸업자이면서 정보처리를 전공하였습니다. 그런데 알고리즘 자체를 구현하거나, GUI를 만들거나 하는 것들은 제게는 적성이 맞지 않더라고요. 하지만 저는 MCU에 LED가 켜지고, 모터가 돌아가고, LCD에 원하는 기능을 구현하고, 센서 입력을 받아서 상황에 맞게 처리하는 프로그래밍을 하는 취미에 매력을 느끼고, 무언가를 만들때 마다 성취감에 뿌듯한 느낌을 받습니다. 

여러분도 여러분이 원하는 기능을 MCU로 구현해 보시면 어떨까요?


Q : 전자과 전공(졸업)자 입니다. 그런데 C언어는 기억도 안나고요. MCU와는 거리가 멉니다.

A : 전자과도 전공이 세분화 되어 있고, 실제 연구 동아리 생활, Lab 활동 같은 것들을 경험해 보지 않았다면 솔직히 현 시점에서는 비전공자와 다를 바가 없겠습니다. ^^;; 

그런데 만약에 관심이 있으시다면 비 전공자 분들에 비해서는 더 빠른 이해와 지식습득이 가능하시겠네요.


Q : 프로그래밍 언어를 모르는 사람도 MCU로 프로그램을 짤 수 있나요?

A : 사실 어느 정도 언어를 알고 있어야 합니다. 그리고 C 언어는 영어로 작성하기 때문에 영어도 어느 정도는 아셔야 겠죠?

가령 아래와 같은 예를 들어 보겠습니다. 왼쪽과 오른쪽을 잘 비교해 보세요. 

어떻게 다른지 한 번 생각해 보는 시간을 가져 보시죠.

 int main(void)

{

    WDTCTL = WDTPW | WDTHOLD;

    // clock initialization of 

    // Main clock, sub-Main clock and aux clock

    BCSCTL1 = CALBC1_16MHZ;       // Set range

    DCOCTL = CALDCO_16MHZ;        // Set DCO step + modulation

    BCSCTL2 |= DIVS_1;

    BCSCTL1 &= ~(XTS | DIVA_0);   // low freq mode, no div ACLK

    BCSCTL3 |= LFXT1S_2;          // VLOCLK

    __delay_cycles(1000);

    while(1)

    {

        P1OUT |= 0x02;            // P1.1 = 1

        P1OUT &= ~0x02;           // P1.1 = 0

    }

}

 int main(void)

{

    // watchdog timer disable for unexpected reset at debugging

    WDT_disable();

    // clock initialization of 

    // Main clock, sub-Main clock and aux clock

    CLOCK_init(CLOCK_16MHZ, CLOCK_8MHZ, CLOCK_ACLK_VLO);

    while(1)

    {

        PORT_SET(LED_PORT, LED0);

        PORT_CLR(LED_PORT, LED0);

    }

}


자! 어떠신가요? 둘 다 이해하기는 어려우신가요? ㅎㅎ 참고로, 두 프로그램은 같은 기능을 하는 프로그램입니다.

그런데 찬찬히 읽어봅시다. 

읽을 때 왼쪽, 오른쪽 둘 중에서 어떤 것이 더 읽기 어려우신가요?


그렇습니다. 오른쪽이 더 읽기 쉬운, 즉 가독성이 더 좋은 코드입니다. 

사실 모든 사람들이 가독성이 좋은 소스코드를 짠다면 우리는 책을 읽어 나가듯이 더 쉽게 코드를 이해할 수도 있을 겁니다.


그렇지만 개발자들의 특성과 관리의 미흡, 배움의 부족, 남들에게 알리지 않을려는 목적 등으로 많은 C 코드들이 왼쪽과 같이 만들어집니다.

물론 왼쪽이 나쁘다는 얘기는 아닙니다. 

더 나쁘게 본다면 아래와 같이 할 수도 있겠습니다. 

여기에 주석까지 없게되면 이를 이해하기 위해 여러 문서를 찾아봐야 할 수도 있습니다.


 BCSCTL1 &= ~(XTS | DIVA_0);       ==>    BCSCTL1 &= ~(0x40);


하지만 저는 코드는 가급적 쉽게 읽혀져야 한다고 생각합니다.

그렇기 때문에 제 블로그에서는 가급적 쉽게 읽혀질 수 있는 코드를 올리도록 하겠습니다.


Q : 저는 MCU를 가지고 만들고 싶은게 있어요. 그런데 그것을 만들려면 무엇이 필요한가요?

A : 솔직히 MCU로 무언가를 하려면은 약간의 돈이 듭니다. ㅠㅠ 부품과 재료비가 듭니다. 그럼 이 재료비만 있으면 되느냐, 또 그렇지도 않습니다. 개발도구도 있어야 하고요..

그렇다면 얼마나 드느냐? 이에 대한 해답을 간단히 드릴게요.


먼저 EVM이 필요합니다. EVM(EValuation Module)의 약자로 평가모듈 정도 됩니다. 또는 MCU 칩을 사서 직접 납땜을 할 수도 있습니다.

그리고 컴파일러가 필요합니다. 또 필요하다면 전원도 필요하고요. 평가보드는 있지만 제가 구현하려는 기능을 제공하는 칩이나 다른 부품들도 필요합니다.

MSP430의 경우는 store.ti.com  에서 확인 해 보실 수 있으시겠지만, 싼 보드(LaunchPad)의 경우 $10달러가 안됩니다. 그런데 그거 하나만 있으면 MCU 개발은 거의 다 할 수 있습니다. LaunchPad에는 JTAG 에뮬레이터가 연결되어 있어서 막강한 기능을 가지고 있거든요.

그리고 컴파일러와 에디터, 디버깅은 CCS(Code Composer Studio)에서 할 수 있습니다. 코드 컴포져가 얼마이냐고요? 무료로 다운로드 받아서 전체 기능을 다 사용할 수 있습니다.

그러니까 실질적으로 MSP430을 다루기 위해서 초 기본적으로 필요한 것은 MSP430 LaunchPad 밖에는 사야할 것이 없는 것입니다.

MSP430 LaunchPad의 구매는 store.ti.com 에서 직접 구매가 가능합니다.

Q : MSP430은 어떤 장점이 있길래 추천하는 것인가요?

A : 세상에는 수많은 종류의 MCU가 있고 또 사라지기도 합니다. 굳이 MSP430이 아니어도 좋습니다. 하지만 제가 생각했을 때에는 MSP430이 처음 MCU를 접하는 사람에게도, MCU를 많이 접해 본 사람이어서 짧은 기간 내에 프로젝트를 완료하고자 하는 사람에게도 적당한 MCU라고 생각됩니다.

그 이유는 아래와 같습니다.

  • 저전력 MCU 입니다. MCU가 자체적으로 소모하는 전류가 낮다는 이야기이죠. 그리고 Sleep mode로 더 낮은 소모전류 설정도 가능하고요. 즉, 우리가 실험실 환경에서 무언가를 만드는 게 아니라 건전지나 배터리를 이용하게 되는데 가급적이면 오래동안 배터리를 사용할 수 있는 MCU이면 좋겠죠.
  • MCU 내부에 JTAG emulation 기능이 내장되어 디버깅이 편리합니다. 이 기능에 대해서 다른 글에서 자세히 언급하겠지만 디버깅의 용이성은 개발 기간을 단축시켜주는 가장 중요한 도구입니다.
  • MCU 내부에 클럭 발생기가 있어서 외부에 따로 설치해 줄 필요가 없습니다. 내부 메인 클럭도 1MHz~25MHz(또는 디바이스에 따라 16MHz 또는 24MHz까지 설정가능) 사이에서 설정가능합니다.
  • LaunchPad가 쌉니다. TI에서 제공하는 EVM은 과거 JTAG Emulator를 따로 사고, 칩을 소켓에 꽂을 수 있도록 만들어서 비싼 편이었습니다만, 최근에는 MCU 보드 + JTAG Emulator를 같이 탑재해서 $10~40불 사이의 가격으로 팔고 있습니다. 굉장히 싼 편입니다.
  • MCU 시장에 Arduino라는 플랫폼이 있습니다. 주로 Atmel 계열의 MCU를 조금 더 쉽게 접근해 보자는 취지로 만든 플랫폼입니다. TI에서는 Energia라고 부르는 Arduino와 유사한 플랫폼이 있습니다. 만일 여러분이 Arduino에 매우 친숙해 있다면 Energia로 MSP430을 시작해 보는 것도 좋겠습니다.
  • C 컴파일러는 중요합니다. 만일 C 컴파일러에 중요한 문제가 있어서 내 프로그램이 동작하지 않는다면 초보 사용자는 이를 확인할 수 있는 방법이 없을 것입니다. TI는 C 컴파일러와 에디터, 디버깅을 모두 한 플랫폼(CCS)에서 할 수 있습니다. CCS 는 MSP430 뿐만 아니라 TI의 거의 모든 Embedded Processor들을 컴파일 할 수 있습니다.
  • TI는 TI-RTOS라고 불리는 RTOS를 제공하고 있습니다. 물론 MSP430 부터 multi-core DSP까지 모두 지원이 됩니다. 이 RTOS를 활용해 더 유연한 프로그래밍이 가능합니다.
  • 3V MCU 입니다. 건전지 2개로도 동작시킬 수 있습니다.
  • 다양한 주변 장치를 가지고 있는 MCU 입니다. 종류도 다양합니다. MSP43x 간에 코드 호환이 용이합니다.


Q : 우리 주변에서 MCU가 들어가 있는 제품들은 어떤 것들이 있나요?

A : 우리 주변에서만 보더라도, 우리가 사용하는 컴퓨터, 휴대폰, 셋톱박스, TV 등에 보조적인 역할로 MCU가 들어갈 수 있습니다. (물론 메인 프로세서의 경우에도 MCU와 기능은 별반 다르지 않습니다.) 그리고 TV 리모컨, 아이들 장난감 중에 불빛나오고 멜로디, 말소리 나오는 것들에는 거의 MCU가 하나씩은 들어가 있죠. 

요즘 두꺼비 집들은 디스플레이(Segment LCD)가 탑재되어서 전압전류를 측정합니다. 여기에도 있고요. 집안에 전등을 켜고끄고 하는 (터치) 스위치, 보일러 컨트롤러에도 MCU가 하나씩 들어가야 합니다. 


자동차의 경우에는 MCU가 수십~수백개가 들어가고 있고 CAN이나 LIN이라는 방식으로 서로 통신하고 있죠. 스마트키, 윈도 스위치, 계기판(Cluster), 냉난방기(HVAC), 기어시프트, 스마트키와 통신하는 ECU, 시계, 여러가지 전방에 있는 인포테인먼트 스위치, 후방 사각지대 감시 레이더(BSD), 냉각수를 순환시키는 Water Pump, 오일 펌프, 기타 속도를 제어해야 하는 각종 모터들, 그리고 타이어 공기압 감시하는 TPMS, 그리고 우리가 알지 못하는 각종 센서들... 기본적으로 Audio Video Navigation에서 사용되는 프로세서를 제외하더라도 자동차에서는 이처럼 많은 MCU가 사용되고 있습니다.


그 외에 우리 눈에는 안 띄지만 산업용으로 사용되는 수많은 어플리케이션들 중에서 배터리가 들어가거나 AC 전원을 꽂아서 사용하는 제품에는 왠만해서는 MCU가 들어가 있다고 보시면 됩니다.


Q : 일상생활에서 활용해 볼 수 있는 MCU 프로젝트가 어떤 것들이 있을까요?

A : 사실 생활에 매우 밀접한 많은 것들이 있습니다. 새로운 것을 창조할 수도 있겠고요. 예술 분야에 활용도 가능하고요. 

LED를 잘 배치시키고 적절히 잘 배치시킨다면 좋은 작품, 소품이 될 수 있습니다. 가령 크리스마스 트리, RGB LED Table, 3D LED 조명, 경관조명 등이 그 예입니다.

또는 사업 구상을 하시는 분들에게 MCU 프로젝트는 자신만의 아이템을 만들 때에도 도움을 줄 수 있겠죠?

그리고 EVM 보드만으로 조금 볼품 없어 보이거나 완성품 처럼 보이지 않는다면 3D 프린터를 이용해서 예쁜 케이스를 만들거나 그 자체로 작품을 만들고 HW를 곁들일 수 있겠습니다.







<곳곳에 이미지 입력 필요>


<끝>