MicroChip bit MicroController 머리말 1988년세계최초로상업용 OTP타입의 8비트마이크로컨트롤러인 PICC5X 를출시한이래로마이크로칩은차별화된제품의성능, 신뢰성및솔루션을바탕으로현재시장점유율및매출규모에있어서세계 1위의 8비트마이크로컨트롤러공급업체의입지를달성하고있습니다. 이러한 8비트마이크로컨트롤러시장에서단기간에이뤄낸눈부신성과를바탕으로최근마이크로컨트롤러시장의고사양요구를반영하여, 2004 년 비트마이크로컨트롤러를출시하였습니다. 특히 비트마이크로컨트롤러인 PIC24 제품군과함께연산능력이뛰어난 DSP 엔진이탑재된디지털시그널컨트롤러인 dspic DSC 제품군을출시함으로써임베디드엔지니어들로부터많은각광을받고있습니다. 하지만출시된지불과 3년의짧은기간으로인해아직까지출판된국내서적이없어서많은사용자들이불편해하고있는현실을감안하여이책을집필하게되었습니다. 현재마이크로컨트롤러기초 / 응용실습을고려하고있는엔지니어또는학생뿐만아니라마이크로칩 8/비트제품군을적용한경험이있거나현재개발또는향후개발을고려하고있는분들에게이책이조금이나마도움이되었으면합니다. 기존의대다수마이크로컨트롤러관련서적들에서볼수있었던데이터쉬트에대한설명은원본을참조하는것이도움이될것으로판단되어가능한한지양하고자하였으며, 비록졸필이지만여러분들에게빠르고실질적인도움을드리고자마이크로컨트롤러의각주변장치 (Peripheral) 들에대한응용실습을위주로집필하려노력하였습니다. 또한, 이서적에포함된 M 데모보드 (PCB) 및같이부착된 dspic33fj256gp710 의마이크로칩고성능 비트마이크로컨트롤러를통해여러분들이직접보드를제작해실습할수있도록마이크로칩본사로부터전액지원받아마케팅차원에서무상으로제공할수있게되었으며, 교재출판비용도최소화하고자노력하였습니다. 그리고, 부착된 dspic MCU 내에시리얼부트로더펌웨어를미리프로그래밍을하였습니다. 이를통해별도의프로그래머나디버거등의개발장비가없어도시리얼부트로더용윈도우응용프로그램을통해 dspic MCU 플 2
PREFACE : 머리말 래쉬롬을자체프로그래밍할수있는기능까지넣어이번책출간에최선을다해준비하였습니다. 다만우려스러운점은이번에출간되는특별한정판에대해서만 M 데모보드가무상제공된다는점과또한, 첨부된 M 데모보드조립후의 A/S 지원이불가한점에대해양해말씀올립니다. 이번출간을통해국내에마이크로칩 비트제품군인 PIC24 및 dspic DSC 제품군이널리확산될수있기를바라오며, 이후더다양하고보다훌륭한서적들이널리출간되고확산될수있는작은초석이되기를바랍니다. 이서적이출간될수있도록많은지원과격려를아낌없이보내주신한국마이크로칩한병돈사장님과모든임직원분들께고개숙여감사를드리오며, 본서출판에많은희생을감수하시고밀어주신지앤북송민호사장님과 M 데모보드및 비트마이크로컨트롤러를무상으로제공해준마이크로칩본사관계자여러분께지면을통해서나마깊은감사의말씀드립니다. 끝으로본서적에포함된모든응용프로그램과실습소스코드는한국마이크로칩홈페이지 (www.microchipkorea.com) 에서다운로드받을수있으며기타정보도얻을수있습니다. 2007년 5월 20일한국마이크로칩 CAE부 서한석, 최영섭올림 3
MicroChip bit MicroController CONTENTS 제 1 장 13 1.1 마이크로칩회사소개 14 1.2 마이크로칩제품군 1.2.1 8비트 PIC 마이크로프로세서 17 1.2.2 비트 PIC 마이크로프로세서 17 1.2.3 비트 dspic Digital Signal Controllers(DSC) 17 1.2.4 아날로그및인터페이스제품 19 1.2.5 직렬 EEPROM 22 1.2.6 보안데이터제품 22 1.3 마이크로칩개발툴 22 1.3.1 비트소프트웨어개발툴 22 1.3.1.1 MPLAB C30 C 컴파일러 22 1.3.1.2 Assembler / Linker / Librarian 23 1.3.1.3 MPLAB SIM Software Simulator 23 1.3.1.4 MPLAB VDI(Visual Device Initializer) 23 1.3.1.5 주변장치드라이버라이브러리 24 1.3.1.6 수학 (Math) 라이브러리 24 1.3.1.7 DSP 알고리즘라이브러리 25 1.3.2 비트하드웨어개발툴 25 1.3.2.1 MPLAB ICD2 (In Circuit Debugger / Programmer) 25 1.3.2.2 MPLAB REAL ICETM (In Circuit Emulation System) 26 1.3.2.3 MPLAB PM3 (Device Programmer) 27 1.3.2.4 Explorer Development Board 27 1.3.2.5 dspicdemtm 80 pin Starter Development Board 28 1.3.2.6 dspicdem 1.1 General Purpose Development Board 29 1.3.2.7 모터컨트럴개발시스템 29 1.3.2.8 PICDEMTM MC LV Motor Control Development Board 30 1.3.2.9 dspicdem SMPS Buck Development Board 31 1.3.2.10 dspicdem.nettm Connectivity Development Board 32 1.3.2.11 dspicdem 2 Development Board 32 1.3.2.12 dspicdem 28 pin Starter Development Board 33 4
CONTENTS : 차례 제 2 장마이크로칩 비트마이크로컨트롤러구조 35 2.1 마이크로칩 비트제품패밀리소개 36 2.1.1 PIC24F 제품군 36 2.1.2 PIC24H 제품군 38 2.1.3 dspic30/33f 제품군 40 2.1.3.1 dspic30f 제품군 41 2.1.3.2 dspic33f 제품군 43 2.2 마이크로칩 비트마이크로컨트롤러구조및주변장치개요 45 2.2.1 Havard Architecture 45 2.2.2 명령어파이프라인 46 2.2.3 프로그램메모리구조 46 2.2.4 비트프로그래머모델구조 47 2.2.5 데이터메모리구조 48 2.3 마이크로칩 비트마이크로컨트롤러용라이브러리소개 49 2.3.1 음성어플리케이션을위한라이브러리 49 2.3.1.1 음성인코딩 / 디코딩라이브러리 49 2.3.1.2 소음억제라이브러리 50 2.3.1.3 음향반향제거라이브러리 50 2.3.1.4 라인에코제거라이브러리 51 2.3.1.5 음성인식 51 2.3.2 통신 (Connectivity) 라이브러리 52 2.3.2.1 TCP/IP 프로토콜스택 52 2.3.2.2 CMX사의 MicroNETTM TCP/IP 스택 52 2.3.2.3 소프트모뎀라이브러리 53 2.3.3 기타어플리케이션라이브러리 54 2.3.3.1 암호화라이브러리 (Encryption Libraries) 54 2.3.3.2 FAT 파일시스템 54 2.3.3.3 모터컨트롤어플리케이션소프트웨어 55 2.4 마이크로칩웹세미나소개 57 제 3 장마이크로칩개발툴 59 3.1 MPLAB IDE 60 3.1.1 MPLAB IDE 소개 60 3.1.2 다운로드방법 61 3.1.3 설치 62 3.2 MPLAB ICD2 디버거 65 3.2.1 MPLAB ICD2 소개 65 5
MicroChip bit MicroController 3.2.2 MPLAB ICD2 설치 66 3.2.3 MPLAB ICD2 사용법 71 3.2.4 디버거설정 73 3.2.5 디버거사용법 76 3.3 MPLAB C30 컴파일러 76 3.3.1 MPLAB C30 컴파일러소개 76 3.3.2 MPLAB C30 컴파일러다운로드방법 77 3.3.3 MPLAB C30 컴파일러설치 78 3.3.4 MPLAB C30 컴파일러기초 80 3.3.4.1 C30 컴파일러변수기초 80 3.3.4.2 C30 컴파일러데이터형 83 3.3.4.3 전처리문 96 3.3.4.4 연산자 (Operators) 110 3.3.4.5 제어문 (Control Statement) 120 3.3.4.6 함수 130 3.3.4.7 배열 (Array) 136 3.3.4.8 포인터 (Pointer) 140 3.3.4.9 구조체 (Structure) 와공용체 (Union) 152 3.3.4.10 나열형 (Enumerated) 변수 6 3.3.4.11 C30 컴파일러의속성 (Attribute) 7 3.3.4.12 C30 컴파일러의 I/O 포트액세스 175 3.3.4.13 인터럽트함수 (Interrupt Service Routine) 179 3.4 Explorer 개발보드 185 3.4.1 보드설명 185 3.4.2 보드회로도 186 3.4.2.1 블록다이어그램 186 3.4.2.2 PIM 소켓및디바이스마운트보드회로도 187 3.4.2.3 각종커넥팅회로도 190 3.4.2.4 스위치, 멀티플렉서, 포텐셔미터부회로도 192 3.4.2.5 EEPROM, 온도센서, LED, 오실레이터, 전원공급부회로도 193 3.4.2.6 USB 및 UART 부회로도 194 3.4.2.7 LCD 및 LCD 커넥터부회로도 195 3.5 기타 196 3.5.1 DSP 라이브러리 196 3.5.2 DSP 알고리즘개발툴 197 3.5.2.1 dspicworkstm Data Analysis and DSP Software 197 3.5.2.2 Digital Filter Design Tool 198 3.5.3 어플리케이션노트 199 3.5.4 MPLAB Real ICE 소개 201 6
제 4 장모듈별실습예제 203 4.1 Example 프로젝트열기및보드테스트 204 CONTENTS : 차례 4.1.1 Explorer 데모보드테스트및 Example 프로젝트실습 204 4.1.1.1 개발환경만들기 ( 이미설치된소프트웨어툴이있다면이과정은무시한다 ) 204 4.1.2 Explorer 데모보드테스트및 Example 프로젝트실습 206 4.2 새프로젝트만들기 209 4.2.1 PIC24FJ 패밀리프로젝트만들기 209 4.2.1.1 MPLAB IDE 실행하기 209 4.2.1.2 디바이스선택 209 4.2.1.3 새로운프로젝트만들기 210 4.2.1.4 새로운소스코드만들고프로젝트에넣기 212 4.2.2 dspic33fj 패밀리프로젝트만들기 2 4.2.3 외부함수, 외부변수, 어셈블러혼용하는새프로젝트만들기 218 4.2.3.1 외부함수 / 변수만들어프로젝트에넣기 218 4.3 오실레이터클럭설정예제 226 4.3.1 오실레이터설정 226 4.3.1.1 제 1 오실레이터 (Primary Oscillator) : 외부클럭소스 226 4.3.1.2 제 2 오실레이터 (Secondary Oscillator) : 외부클럭소스 228 4.3.1.3 FRC 오실레이터 (Fast Internal RC Oscillator) : 내부클럭소스 228 4.3.1.4 LPRC 오실레이터 (Low Power Internal RC Oscillator) : 내부클럭소스 229 4.3.2 오실레이터설정레지스터설명 229 4.3.2.1 Oscillator 관련 Configuration Bit 설정 229 4.3.2.2 OSCCON : 오실레이터컨트롤레지스터 231 4.3.2.3 CLKDIV : 클럭분주설정레지스터 232 4.3.2.4 PLLFBD : PLL Feedback Divisor Register(PIC24H 패밀리, dspic33fj 패밀리 ) 234 4.3.2.5 OSCTUN : FRC Oscillator Tunning Register 235 4.3.3 클럭스위칭동작 (Clock Switching Operation) 236 4.3.3.1 오실레이터스위칭 (Oscillator Switching) 동작순서 237 4.3.3.2 Fail Safe Clock Monitor(FSCM) 237 4.3.4 동작주파수 FOSC 계산예제 238 4.3.4.1 dspic33fj / PIC24H 패밀리 FOSC 계산예제 238 4.3.4.2 PIC24FJ 패밀리 FOSC 계산예제 239 4.3.4.3 도즈 (DOZE) 모드동작 239 4.3.5 오실레이터설정예제 240 4.3.5.1 제1오실레이터 (Primary Oscillator) 설정예 240 4.3.6 오실레이터클럭스위칭실습 (dspic33fj256 GP710 사용 ) 248 4.4 I/O 포트실습예제 257 4.4.1 I/O 포트동작설명 258 7
MicroChip bit MicroController 4.4.2 다기능 I/O 포트 261 4.4.3 I/O 포트오픈드레인컨트롤기능 262 4.4.4 I/O 포트컨트롤레지스터 264 4.4.4.1 TRISx I/O 입출력방향설정레지스터 (x = A, B, C, D, E, F, G, ) 264 4.4.4.2 PORTx I/O 포트 x 입출력데이터레지스터 (x = A, B, C, D, E, F, G, ) 264 4.4.4.3 LATx I/O 포트 x 데이터래치레지스터 (x = A, B, C, D, E, F, G, ) 265 4.4.4.4 ODCx I/O 포트오픈드레인컨트롤설정레지스터 (x=a, B, C, D, E, F, G, ) 265 4.4.5 I/O 포트입출력실습 265 4.4.5.1 I/O 포트출력실습 (PIC24FJ128GA010 사용 ) 265 4.4.5.2 I/O 포트입력 / 출력실습 (PIC24FJ128GA010) 271 4.5 인터럽트실습예제 278 4.5.1 인터럽트방식설명 279 4.5.2 인터럽트동작설명 279 4.5.3 인터럽트네스팅 (Nesting) 기능 282 4.5.4 인터럽트관련레지스터설명 284 4.5.4.1 SR : CPU 상태레지스터 ( 여기서는인터럽트에해당하는것만설명 ) 284 4.5.4.2 CORCON : CORE 컨트롤레지스터 285 4.5.4.3 INTCON1 : 인터럽트컨트롤레지스터 1 285 4.5.4.4 INTCON2 : 인터럽트컨트롤레지스터 2 288 4.5.4.5 IFS0 : 인터럽트플래그상태레지스터 0 289 4.5.4.6 IFS1 : 인터럽트플래그상태레지스터 1 290 4.5.4.7 IFS2 : 인터럽트플래그상태레지스터 2 290 4.5.4.8 IFS3 : 인터럽트플래그상태레지스터 3 291 4.5.4.9 IFS4 : 인터럽트플래그상태레지스터 4 292 4.5.4.10 IEC0 : 인터럽트사용설정레지스터 0 292 4.5.4.11 IEC1 : 인터럽트사용설정레지스터 1 293 4.5.4.12 IEC2 : 인터럽트사용설정레지스터 2 294 4.5.4.13 IEC3 : 인터럽트사용설정레지스터 3 294 4.5.4.14 IEC4 : 인터럽트사용설정레지스터 4 295 4.5.4.15 IPC0~17 : 인터럽트우선순위설정레지스터 0~17 295 4.5.4. INTTREG : 인터럽트컨트롤 & 상태레지스터 (dspic33fj 패밀리만있다 ) 296 4.5.5 인터럽트동작설정및인터럽트서비스루틴설명 296 4.5.5.1 인터럽트동작설정방법 296 4.5.6 인터럽트실습 299 4.5.6.1 인터럽트우선순위동작실습 (PIC24FJ128GA010 사용 ) 299 4.6 타이머실습예제 309 4.6.1 타이머1 실습 309 4.6.1.1 타이머1 설명 310 4.6.1.2 타이머1 설정레지스터 310 8
CONTENTS : 차례 4.6.1.3 타이머 1 예제 : 1초타이머만들기 (PIC24FJ1286A010 사용 ) 311 4.6.2 타이머2, 타이머3과타이머 4, 타이머5 실습 345 4.6.2.1 타이머x 설정레지스터 (x = 2, 4, y = 3, 5) 346 4.6.2.2 타이머y 설정레지스터 (x = 2, 4, y = 3, 5) 348 4.6.2.3 타이머x/y 예제 : 1초타이머만들기 (x = 2, 4, y = 3, 5) 349 4.7 Input Capture 실습예제 359 4.7.1 Input Capture 설명 359 4.7.2 Input Capture 설정레지스터 (ICxCON, x= 1,2,3, ) 360 4.7.3 Input Capture 실습 (PIC24FJ128GA010 사용 ) 362 4.8 Output Compare 실습예제 (PIC24FJ128GA010 사용 ) 369 4.8.1 Output Compare 설명 369 4.8.2 Output Compare 동작모드설명 369 4.8.2.1 싱글비교매치모드 (Single Compare Match Mode) 369 4.8.2.2 듀얼비교매치모드 (Dual Compare Match Mode) 372 4.8.2.3 심플 (Simple) PWM 모드 375 4.8.3 Output Compare 설정레지스터 (OCxCON, x= 1,2,3, ) 377 4.8.4 Output Compare 실습 378 4.9 SPI 실습예제 398 4.9.1 SPI 모듈설명 398 4.9.2 SPI 모듈설정레지스터 400 4.9.2.1 SPIxSTAT 설정, 상태레지스터 (x = 1, 2) 400 4.9.2.2 SPIxCON1 설정, 상태레지스터 (x = 1, 2) 402 4.9.2.3 SPIxCON2 설정, 상태레지스터 (x = 1, 2) 404 4.9.3 SPI 모듈의각모드별동작설명 405 4.9.3.1 8비트 / 비트동작 405 4.9.3.2 마스터 (Master) / 슬레이브 (Slave) 모드동작 407 4.9.3.3 프레임 (Frame) 모드동작 408 4.9.4 SPI 모듈실습 409 4.10 UART 실습예제 441 4.10.1 UART 모듈설명 443 4.10.2 UART 관련레지스터설명 445 4.10.2.1 UxMODE : UARTx 모드설정레지스터 (x = 1, 2) 445 4.10.2.2 UxSTA : UARTx 상태, 컨트롤레지스터 (x = 1, 2) 447 4.10.3 UARTx 모듈전송속도보오레이트 (Baud Rate) 계산법설명 449 4.10.4 UART 통신실습 (dspic33fj256gp710 사용 ) 450 4.11 A/D 컨버터실습예제 469 4.11.1 ADC 모듈설명 469 4.11.2 ADC 모듈설정레지스터 470 9
MicroChip bit MicroController 4.11.2.1 ADxCON1 설정, 상태레지스터 (x = 1, 2) 471 4.11.2.2 ADxCON2 설정, 상태레지스터 (x = 1, 2) 472 4.11.2.3 ADxCON3 설정, 상태레지스터 (x = 1, 2) 473 4.11.2.4 ADxCON4 설정, 상태레지스터 (x = 1, 2) 474 4.11.2.5 ADxCHS123 설정, 상태레지스터 (x = 1, 2) 474 4.11.2.6 ADxCHS0 설정, 상태레지스터 (x = 1, 2) 475 4.11.2.7 ADxCSSL 설정, 상태레지스터 (x = 1, 2) 475 4.11.2.8 ADxCSSH 설정, 상태레지스터 (x = 1, 2) 476 4.11.2.9 AD1PCFGH 설정, 상태레지스터 (x = 1, 2) 476 4.11.2.10 AD1PCFGL 설정, 상태레지스터 (x = 1, 2) 477 4.11.3 ADC 모듈의각모드별동작설명 477 4.11.4 ADC 모듈실습 478 4.12 I2C(Inter-Integeated Circuit) 실습예제 513 4.12.1 I2C 모듈설명 5 4.12.1.1 I2C 기본신호설명 5 4.12.2 I2C 인터페이스동작예 517 4.12.3 I2C 관련레지스터설명 520 4.12.3.1 I2CxCON : I2Cx 모듈동작설정레지스터 (x = 1, 2) 520 4.12.3.2 I2CxSTAT : I2Cx 모듈상태레지스터 (x = 1, 2) 522 4.12.3.4 기타다른 I2Cx 모듈관련레지스터 (x=1, 2) 525 4.12.4 I2Cx 모듈전송속도보오레이트 (Baud Rate) 계산법설명 525 4.12.5 I2C 통신실습 (dspic33fj256gp710 사용 ) 526 4.13 DMA(Direct Memory Access) 실습예제 542 4.13.1 DMA 모듈설명 542 4.13.2 DMA 모듈설정레지스터 543 4.13.2.1 DMAxCON : DMA 모듈동작설정레지스터 543 4.13.2.2 DMAxREQ : DMAx 채널 IRQ 선택레지스터 545 4.13.2.3 DMAxSTA : DMAx 채널 RAM 스타트주소설정레지스터 A 545 4.13.2.4 DMAxSTB : DMAx 채널 RAM 스타트주소설정레지스터 B 546 4.13.2.5 DMAxPAD : DMAx 채널주변장치설정어드레스레지스터 546 4.13.2.6 DMAxCNT : DMAx 채널데이터전송카운트레지스터 546 4.13.2.7 DMACS0 : DMA 컨트롤러상태레지스터 0 547 4.13.2.8 DMACS1 : DMA 컨트롤러상태레지스터 1 549 4.13.2.9 DSADR : 가장최근사용한 DMA RAM 어드레스레지스터 551 4.13.3 DMA 컨트롤러의각모드별설명 551 4.13.3.1 DMA 컨트롤러의동작설명 551 4.13.3.2 DMA 채널동작모드설명 552 4.13.4 DMA 컨트롤러동작설명 557 4.13.5 DMA 모듈실습 (dspic33fj256gp710 사용 ) 566 10
CONTENTS : 차례 4.14 PMP(Parallel Master Port) 실습예제 (PIC24FJ 패밀리에만해당 ) 622 4.14.1 PMP 모듈설명 622 4.14.2 PMP 모듈설정레지스터 624 4.14.2.1 PMCON : PMP 모듈동작설정레지스터 624 4.14.2.2 PMMODE : PMP 동작모드설정레지스터 625 4.14.2.3 PMADDR : PMP 어드레스레지스터 626 4.14.2.4 PMAEN( 구버전 : PMPEN) : PMP 사용가능설정레지스터 627 4.14.2.5 PMSTAT : PMP 상태레지스터 627 4.14.2.6 PADCFG1: PMP 관련포트설정레지스터 628 4.14.3 PMP 모듈의각예제별설명 628 4.14.3.1 기존 PSP(Legacy Parallel Slave Port) 예제동작설명 628 4.14.3.2 어드레서블 PSP(Addressable Parallel Slave Port) 예제동작설명 629 4.14.3.3 디멀티플렉스어드레싱마스터모드 : 2개칩셀렉트, 읽기, 쓰기, PMA<13:0>, PMD<7:0> 예제동작설명 630 4.14.3.4 멀티플렉스하위 8비트어드레싱마스터모드 : 2개칩셀렉트, 읽기, 쓰기, PMA<13:8>, PMD<7:0>, PMALL 예제동작설명 630 4.14.3.5 멀티플렉스상 / 하위 비트어드레싱마스터모드 : 2개칩셀렉트, 읽기, 쓰기, PMA<13:8>, PMD<7:0>, PMALL, PMALH 예제동작설명 631 4.14.4 각예제별 PMP 모듈동작설명 632 4.14.4.1 8비트캐릭터 LCD 모듈컨트롤동작설명 632 4.14.4.2 8비트캐릭터 LCD 모듈컨트롤커맨드 / 응용함수설명 635 4.15 Flash 메모리프로그래밍실습예제 641 4.15.1 내부플래시롬메모리설명 641 4.15.2 플래시메모리컨트롤레지스터 646 4.15.3 플래시프로그램메모리프로그래밍프로세스설명 647 4.15.3.1 플래시프로그램메모리프로그래밍동작순서 647 4.15.4 플래시메모리프로그래밍실습 649 APPENDIX 669 부록 1. Bootloader( 부트로더 ) 실습예제 670 부록 1.1 부트로더기능설명 670 부록 1.2 부트로더실습예제 (Explorer 보드와 ICD2 등의프로그래머필요 ) 673 부록 2. 마이크로칩 M 데모보드 681 부록 2.0 마이크로칩 M 데모보드사용시주의사항 681 부록 2.1 마이크로칩 M 데모보드설명 681 부록 2.1.1 dspic33fj256gp710 디바이스주변회로 ( 전체회로도참조 ) 682 부록 2.1.2 클럭회로 ( 전체회로도참조 ) 683 부록 2.1.3 전원부회로 ( 전체회로도참조 ) 683 11
MicroChip bit MicroController 부록 2.1.4 MCU 전체핀확장커넥터회로 ( 전체회로도참조 ) 684 부록 2.1.5 I2C 시리얼 EEPROM 회로 ( 전체회로도참조 ) 684 부록 2.1.6 SPI 시리얼 EEPROM 회로 ( 전체회로도참조 ) 685 부록 2.1.7 LED 회로 ( 전체회로도참조 ) 685 부록 2.1.8 스위치회로 ( 전체회로도참조 ) 686 부록 2.1.9 각종개발장비연결회로 ( 전체회로도참조 ) 687 부록 2.1.10 UART( 시리얼부트로더 ) 관련연결회로 ( 전체회로도참조 )(MAX232 사용가능 ) 688 부록 2.1.11 VR( 가변저항 :R6) 연결회로 ( 전체회로도참조 ) 689 부록 2.1.12 마이크로칩 M 데모보드실제사진 689 부록 2.1.13 마이크로칩 M 데모보드부품리스트 690 부록 2.2 M 데모보드실습방법 ( 필독 ) 691 부록 2.2.1 M 데모보드와시리얼부트로더를사용한 4장예제실습설명 691 부록 2.2.2 M 데모보드와시리얼부트로더를사용한 4.10장 UART 실습예제 692 부록 3. 마이크로칩기술세미나소개 697 찾아보기 701 12
CHAPTER 1.1 마이크로칩회사소개 1.2 마이크로칩제품군 1.3 마이크로칩개발툴
MicroChip bit MicroController 1.1 마이크로칩회사소개 과거마이크로컨트롤러는시스템에설계해넣기가쉽지않았다. 이러한제품들은어느정도의통합기능을제공했지만적절한규모의경제를달성하기위해서제조중에디바이스에프로그램코드를마스킹해야했다. 마스크프로그램 (mask programmed) 디바이스는높은 NRE(Non Recurring Engineering) 비용이요구되며, 이로인해많은수의디바이스로비용을상쇄할수있도록디바이스를대량으로생산해야했다. 이러한마스크프로그램방식은소량애플리케이션에서사용할수없었을뿐만아니라새로운마스크를만들지않으면코드업데이트와버그수정도불가능했다. 많은엔지니어들이여러접근방식을도입했는데, 이중가장인기있던방식은범용마이크로컨트롤러와외부 EPROM 및 I/O를함께사용하는방법이었다. 이방법은설계유연성과함께소형설계에있어현실적인비용구조를제공했다. 하지만이와동시에훨씬더많은설계노력이필요했으며보드공간을많이차지했고, 이는비용상승으로이어졌다. 마이크로컨트롤러에대한엔지니어들의인식은 1988년마이크로칩이 PICC5X의 CMOS 버전을발표하면서일대전환을맞이했다. 이디바이스는이해하기쉽고프로그래밍이용이했으며가격도저렴했다. 무엇보다중요한점은필드프로그래밍이가능했다는것이다. 이러한표준 1회프로그램 (OTP) 마이크로컨트롤러를사용하면단순하고저렴한프로그래머를사용해생산라인에서코드를넣을수있다. PICC5X 제품군을통해기업들의제품출시가더용이해졌고, 생산에서버그수정과업그레이드를거의즉각적으로구현할수있게되었으며, 다양한애플리케이션에서하나의범용디바이스를사용함으로써비축해야하는부품의수를줄일수있었다. 이러한개념은곧엔지니어링커뮤니티에널리도입됐으며 1989년마이크로칩 OTP PIC 마이크로컨트롤러출하량은 100만개를돌파했다. 마이크로컨트롤러개발툴의비용과복잡성이화두였던 1980년대후반과 1990년대초반, 마이크로칩은 PICC5X 제품군출시를통해단순하고안정적인저가용소프트웨어개발툴을선보였다. 이어 1991년마이크로칩은세계최초의 Windows 3.0 기반개발시스템인 MPLAB IDE(Integrated Development Environment) 를선보였다. 강력한 RISC 아키텍처, 단순한프로그래밍모델, 그리고통합 I/O를갖춘 PIC 마이크로컨트롤러는유닛당비용이낮은마스크프로그램마이크로컨트롤러의주영역이었던대량애플리케이션에서사용되기시작했다. 1992년마이크로칩은첫번째 ROM(Read Only Memory) 기반 CMOS PIC 마이크로컨트롤러를발표했다. 이로써기업들은최초생산가동에서 OTP 디바이스를사용, 비용절감을위해공장에서프로그래밍되는 ROM 마이크로컨 14
1.1 마이크로칩회사소개 트롤러로옮겨가기전에제품의완전한현장테스트와버그수정, 기능강화를구현할수있게됐다. 1993년마이크로칩이업계최초로인헨스드플래시 (Enhanced Flash) 마이크로컨트롤러를출시하면서유연성은한층높아졌다. 이디바이스는인쇄회로기판에납땜한후플래시메모리를통해손쉽게프로그래밍이가능했기때문에프로그래밍단계를생산공정의후반으로옮기고, 하나의보드에여러다른디바이스를함께프로그래밍하는것이가능해졌다. 또한플래시메모리덕분에 PIC 마이크로컨트롤러를현장에서재프로그래밍할수있었기때문에제품이고객에게인도된이후에도업데이트가가능했다. 1990년대에는보드면적의중요성이갈수록커졌다. 1996년등장한더작은크기의새로운패키지를통해마이크로칩은 8핀패키지로마이크로컨트롤러를제공하는최초의기업이됐다. PIC 마이크로컨트롤러의사용은계속해서빠른속도로확장됐으며, 1999년마이크로칩은 PIC 마이크로컨트롤러출하량 10억개돌파를발표하기에이르렀다. 2001년까지마이크로칩에서 20만개이상의 PIC 마이크로컨트롤러개발키트가판매됐다. PIC 마이크로컨트롤러제품군의개발은초기 PIC 마이크로컨트롤러아키텍처의장기간에걸친성공으로특징지을수있다. RISC 아키텍처, 별도의명령어및데이터버스 ( 하버드아키텍처 ) 와짧은 2단계파이프라인을통해 PIC 마이크로컨트롤러는거의매주기마다명령어를실행할수있다. 1999년에는향상된아키텍처를제시한 PIC18CXXX 제품군이출시됐다. 이전까지, 그리고이후개발된모든 PIC 마이크로컨트롤러와마찬가지로 PIC18CXXX는최초의 PICCXXX 제품군과완전한하위호환성을제공했다. 시장조사기관인가트너데이터퀘스트에따르면 PIC 마이크로컨트롤러의여세에힘입어마이크로칩은세계 1위의 8비트마이크로컨트롤러공급업체로부상했다. 1996년만해도 5 위공급업체였던마이크로칩의이러한성과는불과몇년만에이뤄진것이다. 현재애널리스트들은 8비트마이크로컨트롤러애플리케이션의지속적인확장을예상하고있으며, 마이크로칩은혁신을통해다양한애플리케이션에계속해서 PIC 마이크로컨트롤러를제공하고있다. 2004년마이크로칩은세계최소형마이크로컨트롤러인 PIC10F를발표했다. 6핀 SOT 23 패키지로제공되는이제품은플래시메모리를탑재했고 1회용에가까울정도로경제적인새로운지능형전자애플리케이션의개념을구현할수있게해준다. 또다른한쪽에서는 DSP와 비트마이크로컨트롤러의장점만단일디바이스에결합한 dspic 디지털신호컨트롤러제품군이출시됐다. 오늘날 30억개이상의 PIC 마이크로컨트롤러가사용되고있으며, 이탁월한마이크로컨트롤러는사실상거의모든제품에내장되어있다고할수있다. 15
MicroChip bit MicroController 마이크로칩연역 1989 세계최초로필드프로그래머블마이컴인 OTP 출시 1990 일백만개의 PICmicro 마이컴판매달성 1994 FLASH PICmicro 마이컴출시 1996 세계최초로 8핀마이컴출시 1997 8비트마이컴시장점유율세계 2위달성 1999 고성능 8비트마이컴인 PIC18FXXX 출시 2001 세계적으로인증된 Telcom 사인수및아날로그제품군확장 2002 PowerSmart 인수및 Fuel Guaging 솔루션제공 (Duracell 반도체설계회사 ) 2003 8비트마이컴시장점유율세계 1위달성 2004 비트마이컴인 dspic 출시 / 6핀의 8비트마이컴출시 2005 40억개의 PICmicro 마이컴판매달성 현재하루 170 만개의마이크로컨트롤러를출하하고있다. 1.2 마이크로칩제품군 아래그림은전형적인임베디드제어보드및신호의흐름을보여주고있다. 온도센서, 압력센서, 모션센서등의아날로그센서신호들이증폭및필터링되어디지털신호로변환되어마이크로컨트롤러로의입력신호가된다. 이외에도전원관리블럭, 파워드라이버, 다양한버스구조, 주변장치및통신프로토콜등의아날로그신호등이마이크로컨트롤러와인터페이스를이루고있다. 각각의블럭들은마이크로칩에의해제공되고있는제품및기능들을개괄적으로보여주고있다.
1.2 마이크로칩제품군 1.2.1 8비트 PIC 마이크로프로세서마이크로칩의풍부한주변장치를갖추고있는 8비트 PIC 마이크로프로세서는플래시, OTP(One-Time Programmable) 및 ROM 프로그램메모리옵션등을통해다양한제품을제공하고있다. RISC 코어를기본으로설계된이들제품군은거의코드변경없이 6핀에서 100핀으로손쉽게마이그레이션할수있도록공통의아키텍처를채용하고있다. 1.2.2 비트 PIC 마이크로프로세서 비트 PIC24 마이크로프로세서는 8비트 PIC18 제품군의성능, 주변장치및기능을토대로설계되었으며최대 40MIPS 의성능을발휘한다. 비트제품개발언어인 MPLAB C30 컴파일러를통해높은처리성능과 C 코드집적도를제공한다. PIC24F/PIC24H 시리즈는소프트웨어및 MPLAB IDE와완벽하게호환되기때문에요구사항의변화에따라손쉽게마이그레이션할수있는것은물론, 기존의리소스를그대로활용하면서애플리케이션에성능및기능을추가할수있다. 1.2.3 비트 dspic Digital Signal Controllers(DSC) 비트고성능 dspic DSC는마이크로프로세서가가진강점과 DSP의강점을단일코어로통합한디바이스다. 최대 40MIPS 의속도를제공하는이제품은 C 프로그래밍작업의효율성을높이도록설계되었으며플래시프로그램메모리, 데이터 EEPROM, 강력한주변 17
MicroChip bit MicroController 장치및다양한소프트웨어라이브러리를갖추고있다. 툴및디자인환경에서친숙한마이크로컨트롤러의느낌을그대로제공하고있는 dspic DSC는모터컨트롤및전력변환, 음성 / 오디오, 인터넷 / 모뎀연결, 통신, 암호화, 고속감지및자동차애플리케이션을위해개발되었다고말할수있다. 다음그림은마이크로칩의 8/비트 MCU 및 DSC(Digital Signal Controller) 제품군요약및응용분야에따른구분을보여주고있다. [8/ 비트 MCU 및 DSC 제품군요약 ] 18
1.2 마이크로칩제품군 [ 응용분야에따른 8/ 비트 MCU 및 DSC 제품군분류 ] 1.2.4 아날로그및인터페이스제품마이크로칩은마이크로컨트롤러외에도임베디드시스템을위한아날로그및인터페이스제품군으로써선형, 복합신호, 전원관리, 온도관리, 배터리관리및인터페이스장비등을포함해포괄적인포트폴리오를제공하고있다. 특정유형의제품과수천개에달하는제품사양에대한보다자세한정보는마이크로칩웹사이트를통해제공받을수있으므로, 여기에서는주요사양만소개하기로하겠다. 19
MicroChip bit MicroController 20
21 1.2 마이크로칩제품군
MicroChip bit MicroController 1.2.5 직렬 EEPROM 마이크로칩은 128비트에서 1M 비트에이르는집적도, 1.8V까지가능한작동전압, 다양한버스프로토콜 (I 2 C, Microwire 및 SPI) 등을비롯한광범위한시리얼 EEPROM 옵션을제공하고있다. 이들제품은 40 C~125 C에이르는모든표준온도범위에서작동가능하다. 1.2.6 보안데이터제품마이크로칩의 KEELOQ 코드호핑 (code hopping) 기술은단어길이가긴코드와함께암호화및동기화기법을사용해고도의보안성을실현해준다. 자세한내용은마이크로칩웹사이트를통해확인할수있다. 1.3 마이크로칩개발툴 마이크로칩의 비트제품을이용한개발시유용하게사용될수있는소프트웨어및하드웨어개발툴에대해살펴보자. 1.3.1 비트소프트웨어개발툴 1.3.1.1 MPLAB C30 C 컴파일러 MPLAB C30 C Compiler 는모든기능을완벽하게갖춘 ANSI 규격최적화컴파일러로써문자열조작, 동적메모리할당, 데이터변환, 타임 키핑 (timekeeping) 및수학라이브러리 (math libraries) 등전체 ANSI C 표준라이브러리를포함하고있다. 22
1.3 마이크로칩개발툴 1.3.1.2 Assembler / Linker / Librarian MPLAB ASM30은모든기능을갖춘매크로어셈블러로써, 사용자정의매크로, 조건부어셈블리및다양한어셈블러지시어등의강력한코드생성툴이며, 무료로제공되고있다. MPLAB LINK30 및 MPLAB LIB30은효율적인연결, 라이브러리생성및유지관리를지원하는 Linker 및 Librarian 모듈이다. MPLAB ASM30은무료통합개발환경툴인 MPLAB IDE 설치시해당디렉토리에자동으로설치된다. 1.3.1.3 MPLAB SIM Software Simulator MPLAB SIM 소프트웨어시뮬레이터는 CPU와명령어를완벽히시뮬레이션할수있을뿐만아니라 I/O, 인터럽트, UART, A/D 모듈등과같은주요주변장치의시뮬레이션또한지원해주는이상적인알고리즘개발툴이다. 1.3.1.4 MPLAB VDI(Visual Device Initializer) MPLAB VDI를통해전체 DSC를도식적으로구성할수있으며, 구성이완성되면한번의마우스클릭으로어셈블리또는 C 프로그램에서사용가능한초기화코드를생성한다. MPLAB VDI는일련의작동조건뿐만아니라핀, 메모리및인터럽트의할당및충돌에대한광범위한오류검사를실행한다. 생성된코드파일은 MPLAB Project Manager 를통해나머지애플리케이션코드와쉽게통합할수있다. 또한리소스할당및구성에대한상세한보고서를통해프로젝트문서화를단순화한다. MPLAB VDI 의주요기능 : 드래그앤드롭기능선택 원클릭구성 포괄적인오류검사 초기화코드생성 MPLAB Project Manager 를통해손쉽게통합 출력보고서를통해프로젝트문서화요건완화 23
MicroChip bit MicroController 1.3.1.5 주변장치드라이버라이브러리 270개이상의 C 유틸리티기능으로구성된이라이브러리는하드웨어주변장치모듈을다양한모드로설정및작동할수있도록지원한다. 주변장치드라이버라이브러리에포함된기능은다음과같다. 10비트및 12비트 A/D 컨버터 UART, SPI, I²C 및코덱인터페이스 모터컨트롤 PWM 및 QEI 범용타이머 IC(Input Capture) 및 OC(Output Compare) 1.3.1.6 수학 (Math) 라이브러리이 IEEE 754 호환라이브러리는단일 / 이중정밀부동소수점 ANSI C 표준수학함수를제공한다. 이들루틴은코드크기를최소화할수있도록최적화되었다. 수학라이브러리는어셈블리나 C에서사용할수있으며주요함수는다음과같다. sin, cos, tan asin, acos, atan 24
1.3 마이크로칩개발툴 ln, log10, sqrt, power ceil, floor, mod, frexp 1.3.1.7 DSP 알고리즘라이브러리포괄적인 DSP 빌딩블록라이브러리는실행속도에맞게어셈블리코드에서완벽하게최적화되었다. DSP 함수는어셈블리나 C에서사용할수있으며, DSP 알고리즘라이브러리에서지원되는주요알고리즘은다음과같다. 연속적 IIR 필터 FIR 필터및 LMS 필터 상관관계, 회귀선 FFT 및윈도우함수 행렬및벡터연산 1.3.2 비트하드웨어개발툴 1.3.2.1 MPLAB ICD2 (In Circuit Debugger / Programmer) MPLAB ICD 2 디버거및프로그래머로써강력한성능의저가형개발툴이다. MPLAB ICD 2는 MPLAB IDE에서작동하기때문에어셈블리또는 C 소스코드를디버그하고단일단계모드에서변수를확인및수정하며브레이크포인트를설정할수있다. 25
MicroChip bit MicroController 주요기능 : 고속동작 USB 또는시리얼포트를통해 PC 연결 플래시메모리프로그래머 지능형 watch 변수윈도우 고급브레이크포인트기능 1.3.2.2 MPLAB REAL ICE TM (In Circuit Emulation System) MPLAB REAL ICE In Circuit Emulator 는마이크로칩의차세대에뮬레이션및디버깅시스템이다. dspic33f, PIC24H, PIC24F 및 dspic30f 비트장비를초기지원하는이시스템은손쉽고신속한애플리케이션개발및디버깅을위해강력한회로내에뮬레이션플랫폼을제공한다. 타깃마이크로컨트롤러자체의특수하드웨어로직을통해에뮬레이션이수행되기때문에별도의에뮬레이션장비가필요하지않다. 주요기능 : 최대 6개의하드웨어브레이크포인트 최대 1,000개의소프트웨어브레이크포인트 사용자제어방식의프로그램메모리추적 / 데이터메모리로그 고속 USB 2.0 PC 인터페이스 기존의 ICSP(In-Circuit Serial Programming ) 인터페이스나 LVDS( 추가옵션 ) 실행 (Run), 정지 (Halt) 및단일단계 (Single-step) 모드 로직프로브 (logic probe) 스톱워치 26
1.3 마이크로칩개발툴 1.3.2.3 MPLAB PM3 (Device Programmer) MPLAB PM3 Device Programmer는양산환경을지원할수있을정도로완벽한기능을갖춘범용장비프로그래밍솔루션으로서, 상호호환되는소켓모듈을사용해프로그래밍이가능한마이크로칩의거의모든장비를지원한다. MPLAB PM3는많은장비에서프로그래밍시간을단축하고강력한 ICSP를위해내장인터페이스를제공한다. 1.3.2.4 Explorer Development Board PIC24 마이크로컨트롤러및 dspic33f 디지털신호컨트롤러제품군의기능및성능을평가하는데사용되는저가개발보드로서, 주요설계요구를신속하게개발및검증할수있도록지원하는데모보드이다. 27
MicroChip bit MicroController 주요기능 : PIC24F, PIC24H 및 dspic33f General Purpose 및 Motor Control 제품지원 상호호환되는 2개의 PIM(Plug In Module) : PIC24F 및 dspic33f용 PICtail Plus 애플리케이션별도터 (daughter) 카드를위한모듈식설계 : - SD(Secure Digital)/MMC(Multimedia Card) - SPI 인터페이스 (AC4122) - Ethernet(AC4123) - 컴팩트플래시, IEEE 802.15.4 WPAN, IrDA 프로토콜, 음성재생도터카드 1.3.2.5 dspicdem TM 80 pin Starter Development Board 이개발보드는 dspic33f 디바이스를비롯해 80핀 dspic30f General Purpose 및 Motor Control 제품군을평가할수있는개발보드이다. 주요기능 : 80핀 dspic30f6014a General Purpose PIM(MA300014) 포함 80핀 dspic30f6010 Motor Control PIM(MA300013) 및 80핀~100핀 dspic33f General Purpose PIM(MA330012) 지원 9V 전원공급 LED, 스위치, 전위차계, UART 인터페이스 음성대역신호입력을위한 A/D 입력필터회로 음성대역출력을위한온보드 DAC 및필터 28
1.3 마이크로칩개발툴 회로프로토타이핑영역 어셈블리언어데모프로그램및사용자가이드 3.3V로의 5개출력에대한선택형전압레귤레이터포함 1.3.2.6 dspicdem 1.1 General Purpose Development Board 이보드는음성및오디오관련애플리케이션에대한개발을지원한다. 주요기능 : dspic30f6014a PIM(MA300014) 포함 직렬통신채널 (2개의 UART, SPI, CAN) Si3000 코덱 (MIC IN/ 스피커 OUT 상태 ) 범용프로토타이핑영역및확장헤더 디지털전위차계, LED, 스위치등 1.3.2.7 모터컨트럴개발시스템 BLDC, ACIM, PMSM, SR 모터및 UPS 애플리케이션의신속한프로토타이핑및검증을지원하는시스템으로, dspicdem MC1 Motor Control Development Board와 2개의전원모듈옵션가운데하나로구성되어있습니다. dspicdem MC1H 3 Phase High Voltage Power Module(DM300021) 은 AC 전원애플리케이션을지원하는반면, dspicdem MC1L 3 Phase Low Voltage Power Module(DM300022) 은최대 48V까지 DC 전원애플리케이션을지원한다. 29
MicroChip bit MicroController 주요기능 : 전원부냉각을위한열발산판 (heat sink) 완전자동화된전원회로보호 전원회로에서의절연 모터피드백신호를위한다양한옵션 1.3.2.8 PICDEM TM MC LV Motor Control Development Board Sensored 및 senserless BLDC 모터컨트롤애플리케이션을효율적으로평가및개발할수있도록지원하는개발보드로서 28핀 dspic30f3010 가사용된다. 주요기능 : I²C 인터페이스에서과전류보호및온도센서지원 3-phase 전압소스인버터브리지 9개의 LED - 3개는상태표시용, 나머지 6개는 PWM 표시용 30
1.3 마이크로칩개발툴 모터전류및역기전력 (Back EMF) 감지를위한테스트지점 속도제어전위차계 48V 및 2.2A의최대모터정격지원 28핀 PIC18 MCU 지원 ( 특히 PIC18F2431) 즉각적인사용이가능한전원공급장치및모터제공 ( 옵션 ) 1.3.2.9 dspicdem SMPS Buck Development Board 단순한 DC/DC SMPS(Switch Mode Power Supply) 를구현하는개발보드로서, 디지털루프제어설계가처음인초보설계자들을위한데모보드이다. 주요기능 : 이중의독립형강압용컨버터 (buck converter) 강압용컨버터는동기또는비동기모드에서작동가능 31
MicroChip bit MicroController 입력전압의범위는 7V~15V( 공칭전압 9V) 출력전압은 0V를시작으로입력전압 - 1.5V로설정가능 사용자는동적출력로드가과도응답을조사할수있도록지원 1.3.2.10 dspicdem.net TM Connectivity Development Board 소프트모뎀및접속기반애플리케이션에대한개발을지원하는개발보드이다. 주요기능 : dspicdem.net 1 (DM300004-1) 은 FCC/JATE PSTN 국가를지원 dspicdem.net 2 (DM300004-2) 은 CTR 21 PSTN 국가지원 dspic30f6014 PIM(MA300011) 포함 DAA/AFE 칩셋을연결하는 10Base-T Ethernet MAC 및 PHY 인터페이스와 PSTN 인터페이스 직렬통신채널 (UART 및 CAN) 상시저장을위한외장 EEPROM 및 RAM 메모리 범용프로토타이핑영역및확장헤더 LED, 스위치, 전위차계및 LCD 디스플레이 1.3.2.11 dspicdem 2 Development Board 18핀, 28핀및 40핀 DIP 패키지 dspic DSC 장비모두를위한솔루션을효율적으로설계할수있는설계보드이다. 32
1.3 마이크로칩개발툴 주요기능 : 모터컨트롤, 센서및범용제품군을포함해 18핀, 28핀및 40핀 DIP 패키지로 11개의 dspic DSC 장비를위한개발플랫폼제공 온보드 CAN 및 UART 지원 다양한오실레이터옵션을온보드지원 모든 11개장비에서애플리케이션개발을신속하게시작할수있도록소스코드예와사용자가이드가제공 1.3.2.12 dspicdem 28 pin Starter Development Board 모터컨트롤, 센서및전력변환제품군을포함해 28핀 dspic30f MCU에서효율적으로개발에착수할수있도록하는개발보드이다. 주요기능 : 28핀 dspic30f2010 MCU포함 9V 전원공급장치로부터의전원입력 UART 인터페이스 MCU의모든 I/O 핀에액세스하기위한헤더 회로프로토타이핑영역 어셈블리언어데모프로그램및설명서 모든 dspic30f 28핀 DIP 또는 SOIC 장비수용 33
MicroChip bit MicroController 34
CHAPTER 마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩 비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트비트마이크로칩 비트마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러마이크로컨트롤러구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조구조마이크로컨트롤러구조 2.1 마이크로칩 비트제품패밀리소개 2.2 마이크로칩 비트마이크로컨트롤러구조및주변장치개요 2.3 마이크로칩 비트마이크로컨트롤러용라이브러리소개 2.4 마이크로칩웹세미나소개
MicroChip bit MicroController 2.1 마이크로칩 비트제품패밀리소개 마이크로칩의 비트제품군에는 PIC24F, PIC24H, dspic30f, dspic33f 총 4가지제품군으로이루어졌다. 이들제품군의가장큰특징은동일한기본아키텍처를갖고있으며, 24 비트프로그램플래쉬메모리, 동일한 비트데이터메모리로구성되어있어, 각제품군간의코드마이그레이션이손쉽게이루어질수있다. 이들제품군의가장큰차이점은 PIC24F 및 PIC24H 제품군은 DSP 엔진을배제한범용의디바이스이며, dspic30f 및 dspic33f 제품군은 DSP 엔진을탑재하고있어고속 DSP 연산처리를지원한다는것이다. 2.1.1 PIC24F 제품군 PIC24F 제품군은 DSP 엔진을탑재하지않은저가형 비트범용디바이스이다. 이제품군은 0.25 마이크론공정을통해 3.3V의낮은동작전압레벨을지원하며, 최대 MIPS의동작속도를지원하며마이크로칩의고성능 8비트제품군인 PIC18 제품군의주변장치및더욱향상된병렬마스터포트 (PMP, Parallel Master Port), 저전력리얼타임클럭캘린더및하드웨어 CRC(Cyclic Redundancy Check) 등의범용주변장치와완벽히호환이되며, 디버깅을위한 JTAG 인터페이스도추가로지원하고있다. 36
2.1 마이크로칩 비트제품패밀리소개 PIC24F 제품군의주요사양은다음과같다. 주요특징 연산처리성능 : MIPS @ 32MHz 프로그램메모리 - 셀프프로그래밍플래쉬 - 메모리용량 : 32~128KB 데이터메모리 (RAM) : 8KB 패키지 : 64~100핀 내부오실레이터내장 저전력모드지원 JTAG Boundary Scan & Flash Memory Programming 주변장치 UART(2 채널 ) : LIN 및 IrDA 인터페이스지원 I 2 C 통신인터페이스 : 2채널 37
MicroChip bit MicroController SPI 통신인터페이스 : 2채널 A/D 컨버터 : 채널, 10비트분해능, 500ksps 샘플링속도 IC( 입력캡쳐 ) : 5채널 OC( 출력캡쳐 ) / PWM : 5채널 타이머 : 비트타이머 x 5 비교기 : 2채널 하드웨어 RTCC( 리어타임클럭캘린더 ) PMP(Parallel Master Port) CRCGenerator PIC24F 제품군 2.1.2 PIC24H 제품군 PIC24H는 PIC24F 제품군보다빠른처리속도를지원하는제품군으로써 H는높은속도와성능을의미하는 Higher 의약자이다. 이제품군은 PIC24F 제품군보다큰프로그램및데이터메모리를갖고있으며, 40MPIS의고속처리속도를발휘할수있다. 가장큰주변장치특징으로써 CPU의개입없이듀얼-포트램을지원하는 8채널 DMA 기능을제공하고있다. 또한보다빠른 A/D 컨버터및향상된 CAN 모듈과같은새로운주변장치를지원하고있다. 38
2.1 마이크로칩 비트제품패밀리소개 주요특징 연산처리성능 : 40MIPS 프로그램메모리 - 셀프프로그래밍플래쉬 - 메모리용량 : 256KB, 128KB, 64KB 데이터메모리 (RAM) : 8~KB 패키지 : 100-, 80-, 64-pin 8채널 DMA 내부오실레이터내장 저전력모드지원 JTAG Boundary Scan & Flash Memory Programming 주변장치 UART(2 채널 ) : LIN 및 IrDA 인터페이스지원 I 2 C 통신인터페이스 : 1~2채널 39
MicroChip bit MicroController SPI 통신인터페이스 : 2채널 CAN 인터페이스 : 1~2채널 A/D 컨버터 - 6~32채널, 10비트분해능 (1.1Msps) 또는 12비트분해능 (2.2Msps) - 2채널 2.2Msps 샘플링속도 IC( 입력캡쳐 ) : 8채널 OC( 출력캡쳐 ) / PWM : 8채널 타이머 : 비트타이머 x 5 PIC24H 제품군 2.1.3 dspic30/33f 제품군 dspic30/33f 제품군은 PIC24H 제품군의모든기능을지원할뿐만아니라, 곱셈및어큐뮬레이트연산을단일사이클에수행할수있도록지원하는 DSP 엔진을탑재하고있다. 이제품군은 PIC24F/H 제품군과동일한 비트아키텍처및명령어를사용하고있다. dspic30f 제품군은 2.5~5.5V의동작전압과최대 30MIPS의연산처리속도를갖는반면, dspic33f 제품군은 3.0~3.6V의동작전압과최대 40MIPS 의연산처리속도를갖고있다. 40
2.1 마이크로칩 비트제품패밀리소개 2.1.3.1 dspic30f 제품군 주요특징 연산처리성능 : 30MIPS 프로그램메모리 - 셀프-프로그래밍플래쉬 - 메모리용량 : 12~144KB 데이터메모리 (RAM) : 0.5~8KB 패키지 : 18~80핀 내부오실레이터내장 저전력모드지원 주변장치 UART(1~2) : LIN 인터페이스 SPI : 1~2채널 I 2 C : 1채널 41
MicroChip bit MicroController CAN : 1~2채널 ( 일부디바이스 ) A/D 컨버터 - GP 제품군 : 13~채널, 12비트분해능 (200ksps) - MC 제품군 : 6~15채널, 10비트분해능 (1Msps) - Sensor 제품군 : 8~10채널, 12비트분해능 (200ksps) - SMPS 제품군 : 6~12채널, 10비트분해능 (2Msps) IC ( 입력캡쳐 ) : 8채널 OC( 출력캡쳐 ) / PWM : 8채널 타이머 : 비트타이머 x 5 CODEC Interface (GP 제품군 ) MC(Motor Control) 제품군특징 모터컨트롤 PWM Quadrature Encoder Interface SMPS 제품군특징 SMPS PWM : 1ns 분해능 SMPS용 A/D 컨버터 : 10비트분해능, 2Msps 샘플링속도 아날로그비교기 : 20ns dspic30f 제품군 ( 범용 ) dspic30f 제품군 ( 센서응용 ) 42
2.1 마이크로칩 비트제품패밀리소개 dspic30f 제품군 ( 모터컨트롤및전력변환응용 ) dspic30f 제품군 (SMPS 응용 ) 2.1.3.2 dspic33f 제품군 주요특징 연산처리성능 : 40MIPS 프로그램메모리 - 셀프-프로그래밍플래쉬 - 12~256KB 플래쉬 데이터메모리 (RAM) : 1~30KB 패키지 : 18~100핀 8채널 DMA 내부오실레이터내장 저전력모드지원 JTAG Boundary Scan & Flash Memory Programming 주변장치 UART(1~2) : LIN 및 IrDA 인터페이스지원 I 2 C, SPI, CAN : 최대 2개 A/D 컨버터 43
MicroChip bit MicroController - 2채널 2.2Msps - 12비트분해능 : 단일채널샘플링 - 10비트분해능 : 4채널동시샘플링 IC( 입력캡쳐 ) : 최대 8채널 OC( 출력캡쳐 ) / PWM : 최대 8채널 타이머 : 비트타이머 x 9 CODEC Interface(GP 제품군 ) Motor Control Motor Control PWM Quadrature Encoder Interface (2) dspic33f 제품군 ( 범용 ) 44
dspic33f 제품군 ( 모터컨트롤및전력변환 ) 2.2 마이크로칩 비트마이크로컨트롤러구조및주변장치개요 2.2 마이크로칩 비트마이크로컨트롤러구조및주변장치개요 2.2.1 Havard Architecture 마이크로칩 비트 MCU는 24비트의프로그램메모리버스와 비트의데이터메모리버스가각각분리된하바드아키텍쳐구조를가지며또한, 프로그램메모리와데이터메모리간의데이터전송이가능하도록개선된구조를갖고있다. 45
MicroChip bit MicroController 2.2.2 명령어파이프라인마이크로칩 비트 MCU는 2레벨명령어파이프라인을갖기때문에명령어의페치및실행이동시에이루어진다. 따라서분기명령어를제외한대부분의명령어가 1사이클에수행된다. 다음그림은명령어파이프라인의실행과정을설명해주고있다. 첫번째명령어사이클에서첫명령어의 1워드가패치되고, 두번째명령어사이클에서실행이된다. 이때다음명령어가패치되게되는데 2번째명령어는분기명령어로써 2워드 2사이클명령어이며, 이명령어의 2번째워드의 OPCODE는 NOP이다. 따라서 3번째사이클에서 2번째워드가액세스되고전체명령어인 CALL SUB_1이실행된다. 4번째사이클에서임의의 NOP 명령어가실행되면서동시에호출된함수의첫번째명령어인 BSET PORTA, RA3가페치된다. 2.2.3 프로그램메모리구조마이크로칩 비트 MCU는최대 12MB의프로그램메모리및 12MB의 Configuration 메모리영역을지원할수있는구조를갖고있다. 0번지에리셋벡터가위치하며, 0x000004~0x0000FF 및 0x000104~0x0001FF에는인터럽트벡터테이블 (IVT) 및얼터네이트인터럽트벡터테이블 (AIVT) 이차지하고있다. 일반적인응용프로그램이위치하게되는사용자프로그램영역은 0x000200~0x7FFFFF 영역을갖게된다. 다만, dspic30f 제품군은인터럽트벡터테이블 (IVT) 및얼터네이트인터럽트벡터테이블 (AIVT) 이 0x000004~0x0000FF 영역에위치하기때문에사용자프로그램영역은 0x000100번지부터시작한다. 46
2.2 마이크로칩 비트마이크로컨트롤러구조및주변장치개요 2.2.4 비트프로그래머모델구조마이크로칩 비트 MCU는 개의 비트워킹레지스터 (Working Register) 즉, W0~ W15를갖고있으며, 소프트웨어스택지원을위해 W15는스택포인터, W14는프레임포인터로사용된다. 23비트의 PC(Program Counter) 는프로그램메모리의액세스를위해사용되며워드 (2바이트 ) 크기의 PCL 및 PCH이있으며, PCH의상위바이트는사용되지않는다. 상태레지스터 (SR, Status Register) 는 ALU(Arithmetic Logic Unit) 및 DSP의상태등과함께 CPU의우선순위상태를갖고있다. RCOUNT 레지스터는명령어가반복되어야하는회수를나타내는반복카운터값을저장하고있는레지스터이며, CORCON 레지스터는 CPU에할당된우선순위의상태및 PSV (Program Space Visibility) 동작을결정하는역할을한다. TBLPAG 레지스터는테이블연산이수행될프로그램메모리의페이지를가리키며, PSVPAG 레지스터는데이터메모리처럼액세스될수있는프로그램메모리의페이지를가리킨다. 나머지레지스터는 dspic 제품군에서만지원되는 DSP 전용레지스터들이다. 47
MicroChip bit MicroController 2.2.5 데이터메모리구조데이터메모리는최대 64KB 크기를가지며, 최상위 2KB 영역은 MCU의주변장치를설정하고액세스하기위해사용되는 SFR(Special Function Register) 들이위치하고있다. 따라서이후영역부터사용자 RAM으로사용될수있다. 또한데이터메모리의최초 8KB 영역을 Near 데이터메모리라불리며, 이영역은명령어에따라서빠르고효율적으로데이터를액세스할수있는영역이다. PIC24F 및 PIC24H 제품군과같이 DSP 엔진이없는 MCU는단일액세스데이터메모리영역을갖고있지만, dspic30f 및 dspic33f와같이 DSP 엔진이탑재된디바이스는듀얼액세스를위해 X 데이터와 Y 데이터메모리영역으로구분되어진다. 데이터메모리의하위 32KB는 PSV(Program Space Visibility) 명령어를이용해프로그램메모리에맵핑될수있는영역으로일반데이터메모리로서는사용이되지않는영역이다. 이기능을통해사용자는 32KB 크기의프로그램메모리를데이터메모리처럼액세스할수있도록지원하는편리한기능을제공해준다. 참고로데이터메모리는 비트워드크기를갖으며두개의 8비트즉, 1 바이트크기의데이터로구분하여그림의오른쪽 LSB(Least Significant Byte) 는짝수번지, 왼쪽 MSB 48
2.3 마이크로칩 비트마이크로컨트롤러용라이브러리소개 (Most Significant Byte) 는홀수번지를바이트액세스명령어를통해각각액세스할수있다. 만약사용자가워드 (2바이트) 액세스를통해홀수번지를액세스하게되면, 어드레스에러트랩이발생하게되므로모든워드액세스를위해서는어드레스가짝수가되도록액세스할데이터를정렬하여야한다. 2.3 마이크로칩 비트마이크로컨트롤러용라이브러리소개 2.3.1 음성어플리케이션을위한라이브러리 2.3.1.1 음성인코딩 / 디코딩라이브러리다양한음성인코딩 / 압축및디코딩 / 해제애플리케이션을위해다음 3가지옵션이제공되고있다. G.711 : 무료제공되는라이브러리로서 ITU T G.711 표준을토대로하며 2:1 압축을위해 A-law 또는 u(mu)-law 압신 (companding) 을사용 G.726A : ITU-T G.726 Annex A 표준을토대로하며 ADPCM(Adaptive Differential 49
MicroChip bit MicroController Pulse Code Modulation) 인코딩알고리즘을사용한다. 선택한출력비트속도에따라최고 8:1의압축율달성가능 SPEEX : dspic DSC에맞게적응된 Linux 워크스테이션커뮤니티에서널리사용되는표준으로서, 셀룰러애플리케이션을위해새롭게개발된 CELP(Code Excited Linear Prediction) 인코딩기술을사용하고있다. :1의압축율달성가능. 2.3.1.2 소음억제라이브러리음성을캡처하는동안마이크에잡히는주변소음등과같이음성신호에대한소음간섭을없애주는애플리케이션라이브러리이다. 이알고리즘은특히핸즈프리폰, 스피커폰, 인터컴시스템, 헤드셋같이소음간섭이격리되지않는시스템에유용하며, 0~4kHz의오디오대역을처리하며 10~20dB의소음감소를보장한다. 또한, 이라이브러리에는 9.6kHz, 11.025kHz 및 12kHz의입력 / 출력샘플링속도를지원하기위한일부샘플속도변환기능도포함되어있다. 2.3.1.3 음향반향제거라이브러리스피커폰이나인터컴시스템에서스피커와마이크로폰간의음향경로에서발생하는에코를제거할수있도록지원하는라이브러리로써, G.7 표준과완벽하게호환되고, 32 또는 64ms의에코지연을보장하고 0~4kHz의오디오대역처리는물론, 40~50dB의에코 50
2.3 마이크로칩 비트마이크로컨트롤러용라이브러리소개 제거를실행한다. 또한, 이라이브러리에는 9.6kHz, 11.025kHz 및 12kHz의입력 / 출력샘플링속도를지원하기위한일부샘플속도변환기능도포함되어있다. 2.3.1.4 라인에코제거라이브러리전화선에혼재하고있는 2~4 와이어변환으로발생하는전기회선의에코을제거하는라이브러리로써장거리음성통신애플리케이션, 특히위성네트워크및대륙간장거리네트워크를비롯한디지털네트워크 ( 예 : VoIP) 를통한연결에서유용하게사용될수있다. 이라이브러리는 ITU-T G.8 권고를완벽하게준수하며전이중 (full-duplex) 방식으로사용할수있으며, 0~4kHz 의오디오대역 (비트음성데이터에대한 8kHz 샘플링 ) 을처리한다. 2.3.1.5 음성인식 dspic DSC를위한자동음성인식 (Automatic Speech Recognition) 은핸드셋, 가전기기제어와같은다양한음성구동애플리케이션을지원하며, 이패키지는음성단어라이브러리빌더 (Speech Word Library Builder) 와음성인식소프트웨어라이브러리 (Speech Recognition Software Library) 로이루어져있다. 51
MicroChip bit MicroController 2.3.2 통신 (Connectivity) 라이브러리 2.3.2.1 TCP/IP 프로토콜스택마이크로칩의 TCP/IP Stack 은표준 TCP/IP 기반애플리케이션 (HTTP 서버, FTP 서버등 ) 을위한서비스를제공하는무료소프트웨어이며맞춤형 TCP/IP 기반애플리케이션으로사용될수있다. 이스택은모든 PIC18, PIC24, dspic30f 및 dspic33f 제품에이식할수있으며 MPLAB C18, HI-TECH PIC-18 및 MPLAB C30 C 컴파일러를지원한다. 마이크로칩무료 TCP/IP Stack TCP 및 UDP에대한소켓지원 RTOS 비종속 최대 TCP 상태머신 ENC28J60 이더넷컨트롤러지원 제공되는모듈 : MAC, SLIP, ARP, IP, ICMP, TCP, SNMP, UDP, DHCP, FTP 및 HTTP 2.3.2.2 CMX사의 MicroNET TM TCP/IP 스택 CMX사의 MicroNet TCP/IP Stack 은 dspic DSC상의 Flash 및 RAM 리소스사용을최적화하기위해설계되었으며, 이소프트웨어는게이트웨이나 PC를사용하지않고직접프로세서를실행한다. 이스택은독립형모드로실행되거나 RTOS와연동해실행될수있으며, 업계표준프로토콜만을사용하는 CMX-MicroNet 은직접연결, 모뎀접속또는이더넷및무선이더넷 (802.11b) 연결을통해 TCP/IP 네트워킹을제공한다. 이라이브러리는 dspicdem.net Connectivity Board 에서구현될수있다. 이스택을이용하면무료마이크로칩스택에서는현재지원되지않는 P2P(Point-to-Point) 프로토콜 E-메일지원및모뎀제어를지원한다. MicroNet TCP/IP Stack by CMX RFC 호환프로토콜스택 CMX RTOS 지원 이더넷 NIC 드라이버 소형 Flash/RAM 면적 소스코드제공 52
2.3 마이크로칩 비트마이크로컨트롤러용라이브러리소개 2.3.2.3 소프트모뎀라이브러리 2.3.2.3.1 V.22bis/V.22 소프트모뎀라이브러리이라이브러리는마이크로칩웹사이트에서무료로제공되고있으며, V.22bis Soft Modem Library는 ITU-T 준수 V.21/Bell 103, V.22 및 V.22bis 모뎀과 V.42 권장사항에대한알고리즘컬렉션이며, V.22bis 라이브러리는전체소스코드는물론, 사용자애플리케이션과연결하는데필요한객체코드모듈이포함되어제공된다. 송수신데이터펌프코드모듈은어셈블리언어로코딩되어최적의속도와최소형코드사이즈를보장하며, AT, V.42 및 Data Pump API는 C로코딩되어있으며, UART 및 Analog Front End(AFE) I/O 를위한 Data Converter Interface(DCI) 와같은하드웨어컴포넌트드라이버가제공된다. 이라이브러리는 dspicdem.net Connectivity Board 에서구현할수있다. 마이크로칩의 V.32bis/V.22bis 최적의크기와속도를위해어셈블리에코딩된데이터펌프 (Data Pump) V.32bis(4800~14,400bps) V.22bis(1200~2400bps) V.42(LAPM, 오류수정절차 ) 2.3.2.3.2 V.32bis 소프트모뎀라이브러리 V.32bis Soft Modem Library는 ITU-T 준수 V.21/Bell 103, V.22, V.22bis, V.32 및 V.32bis 모뎀과 V.42 권장사항에대한알고리즘이며, 사용자애플리케이션과연결하는데필요한객체코드모듈이포함되어제공되고있다. 송수신데이터펌프코드모듈은어셈블리언어로코딩되어최적의속도와최소형코드사이즈를보장하며, AT, V.42 및 Data Pump API는 C로코딩되어있고, UART 및 AFE I/O를위한 DCI 같은하드웨어컴포넌트드라이버가제공된다. 이라이브러리는 dspicdem.net Connectivity Development Board 에서구현할수있다. 2.3.2.3.3 VOCAL Technologies 의 V.32/V.22/V.22bis 소프트모뎀라이브러리이 Soft Modem Library는데이터모듈레이션및프로토콜 (V.32, V.22, V.22bis, V.23, V.21, Bell 103, Bell 212A 및 Bell 202) 의컬렉션이며, 사용자애플리케이션과연결하는데필요한객체코드모듈이포함되어제공된다. 데이터모듈레이션은속도와코드크기에대한인라인어셈블리언어최적화기능을통해 C로코딩되어있으며, UART 및 AFE I/O를위한 DCI 같은하드웨어컴포넌트드라이브가제공된다. 이라이브러리는 dspicdem.net Connectivity Board에구현할수있다. 53
MicroChip bit MicroController VOCAL의입증된 dspic30f용솔루션 V.32(9600 및 4800bps, non-trellis encoding) V.22/V.22bis(2400, 1200 및 600bps) V.42(LAPM, 오류수정절차 ) 2.3.3 기타어플리케이션라이브러리 2.3.3.1 암호화라이브러리 (Encryption Libraries) 대칭및비대칭키임베디드 Encryption Libraries를사용하여신뢰할수있고안전한애플리케이션을구현가능하다. NTRU Cryptosystems Inc. 에의해마이크로칩을위해개발된이들라이브러리는최적화되고검증된것이며, 라이브러리함수는 C 또는어셈블리코드에의해쉽게호출될수있다. 또는마이크로칩이개발한 128비트키 AES 및 Triple DES Libraries가 microchipdirect(www.microchipdirect.com) 에서온라인으로 5달러의프로덕션라이센스요금으로판매되고있다. 대칭키임베디드 Encryption Library 기능 : ECB, CTR, CBC, CBC MAC 및 CCM 모드의 128비트 AES ECB, CTR, CBC 및 CBC MAC 모드의 Triple DES SHA-1, MD5, 난수발생기 (DRBG X9.82) 비대칭키임베디드 Encryption Library 기능 : 암호화 / 암호해제및신호처리 / 유효성검증을위한 RSA(1024비트및 2048비트모듈 ) 신호처리 / 유효성검증을위한 DSA(1024비트모듈 ) Diffie-Hellman Key Agreement(1024비트및 2048비트모듈 ) - 전용 / 공용키생성 - 공유키생성 SHA-1, MD5, 난수발생기 (DRBG X9.82) 2.3.3.2 FAT 파일시스템임베디드시스템에탈착형 Flash 기반미디어카드를사용하는것이점차보편화되고있으며, FAT 파일시스템라이브러리를통해탈착형 Flash 기반미디어카드 ( 최고 2기가비트 ) 응용개발을용이하게수행할수있다. 54
FAT File System Library 기능 : 마이크로칩컨트롤러용으로무료제공 모든 PIC18, PIC24 및 dspic DSC 제품에이식가능 MPLAB C18 및 MPLAB C30 C 컴파일러지원 SD/MMC CompactFlash 메모리카드지원 최고 2GB 지원 2.3 마이크로칩 비트마이크로컨트롤러용라이브러리소개 2.3.3.3 모터컨트롤어플리케이션소프트웨어 Motor Control 제품군은 ACIM(AC Induction Motor), BLDC(Brushless DC) 및 SR (Switched Reluctance) 모터어플리케이션에적합하게제공되고있다. dspic30f Motor Control Development System 에서실행되는 2가지고급어플리케이션이제공되고있으며, 모든애플리케이션노트에대해서는마이크로칩웹사이트에서전체설명서와소스코드가무료로제공되고있다. 마이크로칩의모터컨트롤솔루션에대한자세한내용을확인하려면 www.microchip.com/motor 의 Motor Control Design Center 사이트를이용하면유익한정보를얻을수있다. 2.3.3.3.1 ACIM( 유도전동기 ) 의벡터컨트롤어플리케이션노트 AN908은 3상유도전동기를위한완벽하게검증된벡터제어알고리즘에대해설명하고있으며, 모터의전류, 토크 (torque) 및속도 (velocity) 는제어루프에서조정될수있다. 마이크로칩웹사이트에서전체설명과함께소스코드가무료로제공되고있다. 2.3.3.3.2 ACIM( 유도전동기 ) 제어소개어플리케이션노트 AN984를통해유도전동기벡터제어에대한기초적인접근법을설명하고있다. 또한단상및삼상유도전동기의기본적인가변속제어에대한예제코드가포함되어있다. 2.3.3.3.3 홀 센서형 BLDC 모터제어어플리케이션노트 AN957에서는 3개의홀효과 (hall effect) 센서와함께완벽하게테스트된 3상 BLDC 모터컨트롤알고리즘을설명하고있으며, 제공되는소스코드는 PI 속도제어루프를포함하고있다. 55
MicroChip bit MicroController 2.3.3.3.4 사인파를이용한 PMSM 모터제어어플리케이션노트 AN1017을통해회전자위치를예측할수있도록분로권선 (shunt winding) 을사용해 PMSM(Permanent Magnet Synchronous Motor) 을제어하며, dspic30f2010을사용하여구현한솔루션을소개하고있다. 2.3.3.3.5 dspic30f6010 을이용한센서리스 BLDC 모터제어어플리케이션노트 AN901은 3상 BLDC 모터에대해테스트된센서리스제어알고리즘을설명하고있다. 모터의전류, 속도및버스전압은제어루프에서조정되며, LCD 메뉴인터페이스를통해모든센서리스모터제어의파라미터를조정하고있다. 이솔루션은 dspic30f6010 디바이스와 dspicdem MC1 개발보드를이용하고있다. 2.3.3.3.6 dspic30f2010 을이용한센서리스 BLDC 모터제어어플리케이션노트 AN992를통해 dspic30f2010 디바이스를이용한센서리스 BLDC 모터제어의솔루션을제공하고있으며, 이솔루션은어플리케이션노트 AN901(dsPIC30F를이용한센서리스 BLDC 제어 ) 및 AN957(I/O 최소화를위한솔루션 ) 를기초로하고있다. 이솔루션은 dspic2010 디바이스및 PICDEM TM MC LV 개발보드를사용하고있다. 56
2.4 마이크로칩웹세미나소개 2.4 마이크로칩웹세미나소개 마이크로칩은지역별트레이닝센터및웹세미나를통해다양한기술세미나를제공하고있다. 특히 www.microchip.com/webseminars 사이트를방문하면다양한기술세미나를무료로이용할수있다. 57
MicroChip bit MicroController 58
CHAPTER 마이크로칩개발툴 3.1 MPLAB IDE 3.2 MPLAB ICD2 디버거 3.3 MPLAB C30 컴파일러 3.4 Explorer 개발보드 3.5 기타
MicroChip bit MicroController 3.1 MPLAB IDE 3.1.1 MPLAB IDE 소개 MPLAB IDE(Integrated Development Environment, 마이크로칩통합개발환경 ) 는 MPASM, MPLAB C18/30등의 Language Tool과 MPLAB ICD2, Real ICE, Pickit2, ICE2000 및 ICE4000, PM3 등의디버깅및프로그래밍툴등을하나의통합환경인 MPLAB IDE라는소프트웨어안에서이루어질수있도록지원해주는통합개발환경소프트웨어이다. 이소프트웨어는개발자 PC에서코드의편집, 컴파일, 링크및다양한하드웨어개발툴과인터페이스해주는개발 Workstation 이다. 즉, 마이크로칩 MPLAB IDE를이용하여 PIC MCU 및 dspic Digital Signal Controller 개발이가능하며마이크로칩웹사이트를통해무료로제공되고있다. 따라서 MPLAB IDE에익숙해지게되면마이크로칩의 8비트및 비트모든디바이스를개발함에있어서디바이스의변환이쉽고, 자유로워지게된다. MPLAB IDE에는툴바와다양한윈도우즈를가지고있는윈도우어플리케이션프로그램으로써현재 Version 7.52가제공되고있으며향후보다나은서비스를위해지속적인업데이트가이루어지고있다. 60
3.1 MPLAB IDE 프로젝트관리를위한툴인프로젝트매니저는개발자가작업중인프로젝트와연관된다양한파일들즉, 소스파일및헤더파일, 링크파일등을한눈에볼수있도록지원함으로써프로젝트관리가용이하도록지원해주는유익한툴이다. Embedded System 개발자들에게있어가장많이사용하게되는텍스트에디터는일반적으로코드를편집하는툴로써 C언어및 Assembly 코드에따라다양한색상을지원해줌으로써코딩을효과적으로할수있도록지원해주고있다. 각레지스터및데이터메모리, 프로그램메모리, Disassembly 의내용확인을위한윈도우, 그리고메모리사용현황을한눈에알아볼수있도록지원하는메모리게이지기능등은개발업무에많은편의와도움을제공해주고있다. 3.1.2 다운로드방법 MPLAB IDE는마이크로칩공식홈페이지 (www.microchip.com) 를통해무료로다운로드할수있으며, 새로운디바이스출시에따른지원및개선등을위해지속적인업데이트가이루어지고있으므로최신버전으로업데이트하는습관을갖기를추천한다. Down Load 위치 : www.microchip.com Design MPLAB IDE 61
MicroChip bit MicroController 3.1.3 설치 그럼이제 MPLAB IDE 설치에대해알아보도록하자. 먼저마이크로칩공식홈페이지를통해 MPLAB IDE를다운로드받은후압축을해제하여생성된파일중인스톨파일 (setup.exe) 을실행한다. 설치과정중 MPLAB ICD2 등을위한설치옵션을물어보는창이뜨게되는데이때가능한모든옵션을선택할것을권장한다. <STEP1> 인스톨파일실행 (setup.exe) <STEP 2> 인스톨마법사실행과정 <STEP 3> 라이센스동의 (Agree 선택후 Next 버튼클릭 ) 62
3.1 MPLAB IDE <STEP 4> 옵션선택 (Complete 선택후 Next 버튼클릭 ) <STEP 5> 폴더위치선택 ( 권장하는기본폴더에설치 ) 주의 : Microchip 관련어플리케이션의기본폴더인 C:\Program Files\ Microchip 에설치할것을적극권장한다. <STEP 7> 라이센스동의 (Agree 선택후 Next 버튼클릭 ) 63
MicroChip bit MicroController <STEP 8> 파일복사실행 (Next 버튼클릭 ) <STEP 9> 설치과정 ( 실행중인응용프로그램이있으면, 아래와같이종료하라는경고를보여준다. 이때응용프로그램을종료할것을권장한다.) 64
3.2 MPLAB ICD2 디버거 이제 MPLAB IDE의설치과정이끝났다. 끝으로 MPLAB IDE 실행에앞서컴퓨터를재시작하면 MPLAB IDE를정상적으로사용할수있게된다. MPLAB IDE 사용법은 MPLAB C30 컴파일러를다루는장에서함께설명하도록하겠다. 3.2 MPLAB ICD2 디버거 3.2.1 MPLAB ICD2 소개 MPLAB ICD2 는 PIC MCU 및 dspic DSC를위한저가형실시간디버거및프로그래머이다. MPLAB ICD2를이용하여프로그램을다운로드및실시간실행이가능하며, MPLAB 의디버그기능을이용하여변수등의상세한확인이가능해진다. C 또는어셈블리소스코드의심볼릭레이블로부터변수값확인및브레이크포인트설정이가능하며 C 소스라인이나어셈블리코드라인을통해싱글스텝실행이가능해진다. 뿐만아니라 MPLAB ICD2는 MCU의프로그래머로서도사용이가능하다. ICD2는디바이스의 ICSP(In Circuit Serial Programming) 을제어하는 2개의하드웨어라인을이용하며, 온칩펌웨어를통해디버깅한다. ICD2의디버그기능은마이크로컨트롤러에내장되어있으며, 디버그코드를타켓프로세서에프로그래밍함으로써실행된다. 따라서디버그모드에서는프로그램메모리의일부영역과일부범용파일레지스터및스택레벨을점유하게된다. 65
MicroChip bit MicroController 3.2.2 MPLAB ICD2 설치 MPLAB ICD2 설치방법에대해알아보자. MPLAB ICD2 이용을위해서는 PC에 USB 드라이버를설치하여야하는데이는앞서 MPLAB IDE 설치시해당 PC에이미설치되었을것이다. 그럼, 이제 MPLAB ICD2를설치해보자. <STEP 1> MPLAB IDE 설치먼저 MPLAB IDE를설치하기전에 ICD2를 USB 케이블또는 Serial Cable을통해 PC 와연결해서는안된다. 즉, MPLAB IDE 설치시 ICD2를위한드라이버를 PC에설치하므로, 이과정을먼저수행한후 ICD2를 PC와연결하면자동으로해당드라이버를검색하여설치할수있게된다. <STEP 2> ICD2 와 PC 연결 USB 케이블또는 RS 232 케이블을통해 ICD2와 PC를연결한다. 가능하면, 통신속도향상을위해 USB 연결을사용할것을권장한다. 66
3.2 MPLAB ICD2 디버거 USB 연결시드라이버의위치를물어보게되는데자동설치옵션을선택하거나수동으로드라이버위치를설정할수있다. 해당드라이버의위치는 MPLAB IDE가설치된폴더를참조하여아래와같이지정하면된다. ICD2 용 USB 드라이버위치 : C:\Program Files\Microchip\MPLAB IDE\ICD2\Drivers 67
MicroChip bit MicroController [ 장치관리자에서확인가능 ] <STEP 3> 전원및타깃보드연결다음그림과같이전원연결을 ICD2 모듈또는타깃보드에연결하여준다. 이전원은타깃보드의디바이스에공급될전원을의미하므로가능하면타깃보드에전원을직접공급해주는방식을사용할것을권장한다. 68
3.2 MPLAB ICD2 디버거 <STEP 4> 이제 MPLAB IDE를실행하고 Debugger 또는 Programmer 메뉴에서 MPLAB ICD2를선택하면사용할준비가끝났다. 참고사항 MPLAB ICD2 와타깃보드의연결은기본적으로 5핀커넥션을이용하며, 기본적으로사용되는잭은 RJ-12 6핀잭이사용되며이와관련된사항은다음그림을참조하거나, ICD2 사용자설명서를참조하면보다자세항사항을확인할수있다. 69
MicroChip bit MicroController 70
3.2 MPLAB ICD2 디버거 <MPLAB ICD2 Schematic> 3.2.3 MPLAB ICD2 사용법 이제 MPLAB IDE 프로그램을실행해보자. <STEP 1> 디버거설정 Debugger Select Tool MPLAB ICD2 선택 프로그래머설정 Programmer Select Programmer MPLAB ICD2 선택 71
MicroChip bit MicroController <STEP 2> Output Windows 확인 - 정상설정시 - 비정상설정시 ( 예 ) 타깃보드에전원미공급시 72
3.2 MPLAB ICD2 디버거 3.2.4 디버거설정 MPLAB ICD2 디버거의설정에대해알아보자. 먼저 MPLAB IDE 메뉴바에서다음과같이 Debugger Setting 을선택하면디버거설정윈도우가나타난다. 이윈도우의각설정 Tab 메뉴를누르고해당옵션을선택할수있다. <Status> 현재 ICD2의연결옵션및연결상태를확인할수있다. ICD2와타깃보드가정상적으로연결되었을때 Run Selft Test 버튼을누르면모두 Pass 라는결과를얻을수있다. 73
MicroChip bit MicroController <Communication> PC와 ICD2의연결을 USB 및시리얼통신중선택할수있는옵션을제공해준다. 빠른통신속도를위해서 USB 통신으로선택할것을권장한다. <Power> 타깃보드에공급되는전원을모니터링할수있는옵션이며, 디바이스전압인 와프로그래밍전압인 를확인할수있다. 74
3.2 MPLAB ICD2 디버거 <Versions> MPLAB ICD2의 Firmware 버전및타깃디바이스의버전을확인할수있다. <Program> MPLAB ICD2를이용해타깃디바이스를프로그래밍옵션을선택할수있으며, 일반적으로그림과같이자동옵션을선택하여사용하면특별한문제가없다. 75
MicroChip bit MicroController <Warnings> 특정경고메시지를활성또는비활성화할수있는옵션을제공해준다. 3.2.5 디버거사용법 MPLAB ICD2의디버거사용법에대한자세한사항은 MPLAB ICD2 사용자설명서를참조하기바란다. (DS51331B MPLAB ICD2 In-Circuit Debugger User s guide) 3.3 MPLAB C30 컴파일러 3.3.1 MPLAB C30 컴파일러소개 MPLAB C30 컴파일러는마이크로칩의 비트 MCU인 PIC24, dspic30f 및 dspic33f 임베디드소프트웨어개발을위한 ANSI 호환 C 컴파일러로써 MPLAB IDE와완벽하게호환이됨으로써, MPLAB ICE(In-Circuit Emulator), MPLAB ICD2(In-Circuit Debugger) 및 MPLAB SIM(Simulator) 와함께소스레벨디버깅을지원해준다. C30 컴파일러는 C 소스파일을컴파일하여어셈블리언어파일을생성한다. 이렇게생성된파일은다른오브젝트파일및라이브러리와함께링크되어실행가능한 COFF 또는 ELF 파일포맷으로최종어플리케이션프로그램을생성한다. COFF 또는 ELF 파일은 MPLAB IDE에로링되어테스트또는디버그될수있으며, 시뮬레이터나디바이스프로그래머에로딩가능한 Intel Hex 포맷으로변환될수있다. 76
3.3 MPLAB C30 컴파일러 3.3.2 MPLAB C30 컴파일러다운로드방법 MPLAB C30 컴파일러를설치해보자. 마이크로칩공식홈페이지 (www.microchip.com) 을통해제공되고있는 MPLAB C30 컴파일러 Student Edition은 60일간모든기능을무료로이용할수있으며, 이후사용시는최적화레벨 1에한해무제한사용할수있다. 즉, 코드사이즈가다소증가하게되는것을감수하여야하므로, 필요시정품을구입하여사용할것을권장한다. 또한신규디바이스출시및성능향상등을목적으로지속적으로업그레이드되고있으므로최신버전으로유지하는습관을갖도록하자. 참고로, C30 컴파일러의다운로드를위해서는로그인을필수로요구하고있다. 77
MicroChip bit MicroController 다운로드위치 : www.microchip.com Design Development Tools Software MPLAB C30 dspic30/33 and PIC24 3.3.3 MPLAB C30 컴파일러설치 앞에서설명한다운로드파일을실행하여다음절차에따라 C30 컴파일러를설치해보자. <STEP 1> 파일실행 <STEP 2> 라이센스동의 <STEP 3> 해당폴더설정 ( 기본폴더사용권장 ) 폴더위치 ; C:\Program Files\Microchip\MPLAB C30 78
3.3 MPLAB C30 컴파일러 <STEP 4> 사용자지정 ( 사용 PC의상황에따라설정 ) <STEP 5> 파일복사 <STEP 6> 환경설정 자동경로설정을위해 Yes 를클릭한다. 79
MicroChip bit MicroController <STEP 7> 설치완료 이제 MPLAB C30 컴파일러를사용할준비가완료되었다. 참고로 MPLAB C30 컴파일러는 MPLAB IDE에서사용이지원되므로, 특별한컴파일러명령어를익힐필요는없다. 3.3.4 MPLAB C30 컴파일러기초 3.3.4.1 C30 컴파일러변수기초 3.3.4.1.1 C30 컴파일러식별자다음예제에서와같이 C프로그램의구성요소들의이름을식별자라하며, 여기에서는변수 a, c, 상수 b, 함수명 main이식별자에해당한다. 이러한모든식별자의이름을지정하기위해서는특별한규칙을갖고있다. 첫글자는반드시밑줄 (_) 및알파벳대문자 (A~Z) 또는알파벳소문자 (a~z) 만가능하며, 숫자는위치할수없지만이후나머지글자는숫자 (0~9) 도가능하다. 80
3.3 MPLAB C30 컴파일러 3.3.4.1.2 C30 컴파일러키워드 MPLAB C30 컴파일러는 GCC 컴파일러를기반으로하고있으며, 다음그림과같이 32 개의 ANSI C 키워드뿐만아니라 12개의추가적인키워드를갖고있다. 이들키워드는다음에소개하도록하겠다. 3.3.4.1.3 C30컴파일러코멘트사용법코멘트는컴파일러에의해코드가아닌일반텍스트로인식되는부분을말한다. 흔히훌륭한프로그램밍은코드가의도하고자하는바를코멘트를이용해잘설명한것을말하기도한다. 따라서코드작성시다소귀찮더라도코멘트를잘이용하는습관을갖도록하자. 코멘트사용에는단 1줄을코멘트로처리하도록하는싱글라인코멘트와특정부분을코멘트로처리할수있는블록코멘트로분류할수있다. 싱글라인코멘트사용법 : // This is a single line comment 블록코멘트사용법 : /* This is a block comment */ 81
MicroChip bit MicroController 3.3.4.1.4 C30컴파일러변수 C 프로그램에서의변수선언및사용예를보여주고있다. 변수선언은메모리의저장위치를할당하는것이라말할수있다. 즉, 아래예는데이터메모리에워드 (2바이트) 메모리 2개를할당하고, 그이름을각각 a, b라부르기로하자는일종의명령이라고볼수있다. 또다른예를살펴보자. 정수형 (2바이트) 변수, 캐릭터형 (1바이트) 변수, 실수형 (4바이트) 변수를각각하나씩선언하고그이름을 warp_factor, first_letter, length 라정했을때컴파일러에의해실제데이터메모리에는다음그림과같이각변수들에대한메모리를할당한다. 다시말해서, 변수는메모리에저장되는위치를가리키는이름이며, 고유의식별자 ( 이름 ) 로선언되어야하며, 또한데이터형을통해사이즈를할당받게된다. 82
3.3 MPLAB C30 컴파일러 3.3.4.2 C30 컴파일러데이터형 C 프로그래밍언어에는다음과같이 4개의기본데이터형을갖고있으며, char 및 int 데이터형을정수형데이터라부르며, float 및 double을실수형데이터라부르기도한다. 각각의데이터형이의미하는데이터사이즈가다르므로임베디드프로그래밍에서는사용하는컴파일러의데이터형을반드시숙지하고있어야한다. 참고로, CCS C 컴파일러를사용했던경험이있는독자라면다소생소한것을발견했을것이다. CCS C 컴파일러에서는 int가 8비트즉, 1바이트의데이터사이즈를갖기때문에여타의 C 컴파일러와는차이가있었다. 이는 CCS C 컴파일러가주로 8비트 PIC 마이크로컨트롤러를위한기본데이터형으로 int를사용했기때문으로생각된다. 하지만, ANSI C 뿐만아니라, MPLAB C30, C18 컴파일러및 Hi Tech PICC 컴파일러는 int 데이터형은 비트즉, 2바이트의데이터사이즈를갖고있으므로기존의 CCS C 컴파일러사용자는이점에주의하길당부한다. C30 컴파일러에서사용하는데이터형의한정어 (Qualifier) 에는 unsigned, signed, short, long이있으며, 이들은특정데이터형의범위및양수또는음수여부등을한정하기위해사용된다. 따라서변수선언시해당변수가갖는데이터사이즈및범위에따라서아래수 83
MicroChip bit MicroController 식어를이용할수있다. 다음그림의한정어가붙은데이터형에서회색의이탤릭체로표기된 int는생략하여사용할수있다. 즉 long과 long int는 32비트의동일한데이터형을갖게된다. 참고로, MPLAB C30 컴파일러는 IEEE 754 실수형포맷 (Floating Point Format) 을사용한다. 또한, 컴파일러옵션 fno short double 를사용할경우 double과 long double은동일하게 32비트데이터형을갖게된다. 변수선언에따라데이터가메모리에할당되는예를살펴보자. 일반적으로컴파일러에정렬 (Aligne) 옵션을주지않으면, 첫번째의예와같이선언된순서대로메모리가할당되며이로인해메모리에갭 (Gap) 이발생할수있다. 이경우, 두번째의예와같이같은데이터형의변수를함께선언해주면, 위에서발생했던메모리갭을최소화할수있다. 84
3.3 MPLAB C30 컴파일러 3.3.4.2.1 C30 컴파일러변수및데이터형실습 MPLAB IDE 를이용하여실습을해보도록하자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 1 Menu Configure Select Device 클릭 2 Select Device 윈도우 : Device PIC24FJ128GA010 선택 3 OK 버튼클릭 3. 프로젝트생성 1 - Menu Project New 클릭 2 - Project Name : Demo1 입력 3 - Project Directory : C:\Temp\Demo1 입력 4 - OK 버튼클릭 85
MicroChip bit MicroController 4. C30 컴파일러선택 1 Menu Project Select Language Toolsuit : MPLAB C30 선택 86
3.3 MPLAB C30 컴파일러 5. 디바이스링커스크립트파일추가 1 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 2 p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 3 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 87
MicroChip bit MicroController 6. C 소스코드생성하기 1 Menu File New 클릭 2 Menu File Save As 클릭 3 파일이름 : Demo1.c 입력후저장버튼클릭 88
3.3 MPLAB C30 컴파일러 7. 프로젝트에 C 소스코드추가 1 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 2 C:\Temp\Demo1\Demo1.c 선택후열기 (Open) 버튼클릭 89
MicroChip bit MicroController 8. C 소스코드입력 이제에디터윈도우의 Demo1.c 파일에다음과같이 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> #define CONSTANT1 0x50 // decimal 80 char charvariable; short shortvariable; int intvariable; long longvariable; float floatvariable; double doublevariable; // short int // long int int main(void) { charvariable = CONSTANT1; shortvariable = CONSTANT1; intvariable = CONSTANT1; 90
3.3 MPLAB C30 컴파일러 longvariable = CONSTANT1; floatvariable = CONSTANT1; doublevariable = CONSTANT1; printf("a char variable requires %d byte.\n", sizeof(char)); printf("a short variable requires %d bytes.\n", sizeof(short)); printf("an int variable requires %d bytes.\n", sizeof(int)); printf("a long variable requires %d bytes.\n", sizeof(long)); printf("a float variable requires %d bytes.\n", sizeof(float)); printf("a double variable requires %d bytes.\n", sizeof(double)); } while(1); 91
MicroChip bit MicroController 9. Build Option 설정 1 Menu Project Build Options Project 선택 2 Menu Project Build Options Project General Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib 3 Menu Project Build Options Project MPLAB LINK 30 Heap Size : 256 입력 92
3.3 MPLAB C30 컴파일러 10. MPLAB SIM 설정 1 Menu Debugger Select Tool MPLAB SIM 클릭 2 Menu Debugger Settings 클릭 3 Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 93
MicroChip bit MicroController 11. Build All 1 Menu Project Build All 클릭 (Ctrl + F10) 2 Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 1 Menu Debugger Run (F9) 클릭 2 Output Window SIM Uart1 탭에서메시지확인 94
3.3 MPLAB C30 컴파일러 13. File Register를통한변수확인 1 Menu View File Register 클릭 2 ctrl+f 클릭후 charvariable 입력후엔터를누르면, File Register 즉, 데이터메모리에변수가할당된것을확인할수있다. 3 변수가할당된어드레스와값을확인해보자. 95
MicroChip bit MicroController 3.3.4.3 전처리문 3.3.4.3.1 상수선언 C 프로그래밍에서다음과같이선언하면, float PI = 3.141593; 이경우컴파일러는데이터메모리의 32비트 (4바이트) 영역을할당하여 PI라는이름으로지정하게된다. const float PI = 3.141593; PI라는변수는 const 라는키워드로인해프로그램메모리에할당이되며그값은읽기만가능한상수값이된다. 96
3.3 MPLAB C30 컴파일러 하지만, 임베디드프로그래밍에서이들사용법은데이터메모리또는프로그램메모리를불필요하게사용하고있기때문에효율적이지못한방법이될수있다. 이러한경우 #define 을이용하여사용하게된다. [ 선언법 ] #define PI 3.141593 이경우컴파일러는 PI라는텍스트를 3.141593이라는상수값으로대체하게되며, 컴파일시소스코드에서 PI라는텍스트를만나게되면 3.141593이라는상수값으로대체하게된다. 즉, 어떠한메모리영역을사용하지않고사용될수있다는말이된다. 그러면, #define의사용법에대해알아보자. [ 사용법 ] #define name text [ 선언예 ] #define PI 3.141593 #define FOSC 10.0e6 #define BAUDRATE 9600 또한다음과같이파라미터를이용하여매크로로정의할수도있다. [ 선언예 ] #define PI 3.141593 #define area(r) PI * r * r #define multiply(a,b) a * b [ 사용예 ] AreaOfCircle = area(5); MyVar3 = multiply(myvar1, MyVar2); 97
MicroChip bit MicroController 다음과같이한줄이아닌여러줄을통해선언하는것도가능하다. [ 선언예 ] #define loop(n) for(i=1; i<=n; i++) { printf( %d\n,i); } [ 사용예 ] loop(5); loop(myvariable); #define 문사용시주의할점은문장의끝이세미콜론즉, ; 로끝나서는안된다는것이다. 만약아래와같이선언하게되면어떻게되는지살펴보자. #define MyConst 5; c = MyConst + 3; 이경우 MyConst 는 5; 와동일한텍스트로간주하게되므로, 결과적으로다음과같이사용한결과가된다. 즉, 컴파일시에러를발생시키게될것이다. c = 5; + 3 3.3.4.3.2 전처리문사용실습 앞절에서수행했던것과동일한방법으로 Demo2 라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 98
3.3 MPLAB C30 컴파일러 1 2 3 Menu Configure Select Device 클릭 Select Device 윈도우 : Device PIC24FJ128GA010 선택 OK 버튼클릭 3. 프로젝트생성 1 Menu Project New 클릭 2 Project Name : Demo2 입력 3 Project Directory : C:\Temp\Demo2 입력 4 OK 버튼클릭 4. C30 컴파일러선택 1 Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 1 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 2 p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 - 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo2.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo2\Demo2.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo2.c 파일에다음과같이실습할 C 소스코드를입력하자. 99
MicroChip bit MicroController //#include <p24fj128ga010.h> #include <stdio.h> #define CONSTANT1 0x33 const CONSTANT2 = 0xCC; int variable1 = CONSTANT1; int variable2; //int variable2 = CONSTANT2; //This cannot be done with a constant defined with "const" int main(void) { variable2 = CONSTANT2; printf("the first constant is 0x%X\n", CONSTANT1); printf("the second constant is 0x%X\n", CONSTANT2); } while(1); 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 1 Menu Debugger Select Tool MPLAB SIM 클릭 2 Menu Debugger Settings 클릭 3 Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All 1 Menu Project Build All 클릭 (Ctrl + F10) 2 Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 100
3.3 MPLAB C30 컴파일러 12. MPLAB SIM 실행 - Menu Debugger Run (F9) 클릭 - Output Window SIM Uart1 탭에서메시지확인 13. Watch 윈도우사용하기 - Menu View Watch 클릭 - 그림과같이 Symbol Name 컬럼의하단의빈칸을마우스로클릭한후하나씩입력한다. - variable1, variable2, CONSTANT1, CONSTANT2 - 각각의심벌이름과그값을소스코드와비교하여확인한다. - 각각의심벌이름과 Address 컬럼의내용을확인한다. * variable1, variable2 : 데이터메모리영역의 0x08C2, 0x08C4에할당되었다. * CONSTANT2 : 프로그램메모리영역의 0x011D0 에할당되었다. P 라는마크는프로그램메모리를의미함. * CONSTANT1 : 어떠한메모리할당도하지않았다는것을의미한다. 101
MicroChip bit MicroController 3.3.4.3.3 C30 컴파일러의상수 (literal) C30 컴파일러는정수형, 실수형 (Floating Point), 문자 (Character), 문자열 (String) 총 4가지기본상수형을갖고있다. 정수형과실수형은콤마 (,) 와빈공간 (space) 를사용할수없으며, 그값은자신의형이가질수있는범위를초과할수없고, 음수부호 (-) 가앞에올수있다. 102
3.3 MPLAB C30 컴파일러 3.3.4.3.3.1 정수형상수 <10진수표기 > 0 값을제외한다른값은 0 으로시작해서는안되며사용할수있는문자는 0~9이다. - 올바르게사용한예 : 0 5 127 1021 65535 - 잘못사용한예 : 32,767 25.0 1 024 0552 <진수표기 > 0x (zero x) 또는 0X 로시작해야하며, 사용할수있는문자는 0~9와 A~F 또는 a~f이다. - 올바르게사용한예 : 0x 0x1 0x1A2B 0xBEEF - 잘못사용한예 : 0x5.3 0EA12 0xEG 53h <8진수표기 > 0 (zero) 로시작해야하며사용할수있는문자는 0~7이다. - 올바르게사용한예 : 0 01 012 073125 - 잘못사용한예 : 05.3 0o12 080 53o * 8진수표기법은 ANSI C 표준이지만, 요즘은거의사용되지않고있다. <2진수표기 > 0b 또는 0B 로시작해야하며사용할수있는문자는 0~1이다. - 올바르게사용한예 : 0b 0b1 0b1101001100001111 - 잘못사용한예 : 0b1.0 01100 0b12 10b * 2진수표기법은 ANSI C 에서명시하고있지않지만, 유용하게사용될수있기때문에 대부분의컴파일러에서지원이되고있다. 103
MicroChip bit MicroController < 한정어 > 변수와유사하게상수값도숫자의끝에첨자를사용하여특정데이터형으로변환할수있다. unsigned ( U 또는 u 사용 ) : 25U long ( L 또는 l 사용 ) : 25L unsigned long( UL 또는 ul 이용 ) : 0xF5UL * 첨자가없는숫자는 signed short 로간주한다. 3.3.4.3.3.2 실수형상수 10진수정수형상수와동일하게표기하며, 소수점 (.) 과급수를표기하기위한 e 를사용 할수있다. - 올바르게사용한예 : 2.56e 5 10.4378 48e8 0.5 - 잘못사용한예 : 0x5Ae 2 02.41 F2.33 3.3.4.3.3.3 문자형상수단일인용부호 ( ) 를사용하여표기해야하며, 한글자의프린트가능한문자또는 \ 을사용한확장문자중단일문자즉, 한글자만사용해야한다. - 올바르게사용한예 : a T \n 5 @ ( 스페이스 ) - 잘못사용한예 : me 23 3.3.4.3.3.4 문자열상수 이중인용부호 ( ) 를사용하여표기해야하며, 프린트가능한문자및 \ 을사용한확장 문자들을이용할수있고, 문자열의끝은널문자 ( \0 ) 가자동으로채워진다. - 올바르게사용한예 : Microchip\0, Hi\n, PIC, 2500, - 잘못사용한예 : He said, Hi 104
3.3 MPLAB C30 컴파일러 ex) char color[3] = RED ; color[0] = R color[1] = E color[2] = D ex) char color[] = RED ; color[0] = R color[1] = E color[2] = D color[3] = \0 < 확장문자예 > 3.3.4.3.3.5 printf() 함수 printf() 함수는 C 언어표준라이브러리함수로써일반적으로텍스트를모니터또는프린터에출력하기위해사용하며, 임베디드시스템에서는 UART를통한출력으로사용되기도한다. 이미앞의실습에서사용한바와같이 MPLAB IDE의 MPLAB SIM에서는 Uart1 윈도우를통해그출력값을확인할수있도록지원하고있다. - 사용법 : printf( ControlString, arg_1, arg_2,..., arg_n); 105
MicroChip bit MicroController - 사용예 : printf( LoopCount = %d, i); printf( a = %d \n b = %d\n, a, b); < 출력포맷을위한변환문자 > 디버깅을위한유용한문자열포맷사용예 1) 진수 4자리값출력 ( 예 : 0x00F8) printf( Address of x = %#06x\n, x_ptr); - # : 진수값앞에 0x 붙이는옵션 - 06 : 6글자출력옵션 (0 포함 ) - x : 진수출력옵션 106
3.3 MPLAB C30 컴파일러 2) 진수대문자출력 printf( Address of x = 0x%#04X\n, x_ptr); - 04 : 4글자출력옵션 (0 포함 ) - X : 진수대문자로출력옵션 3.3.4.3.3.6 printf() 함수실습 전처리문사용실습 앞절에서수행했던것과동일한방법으로 Demo3 라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo3 입력 - Project Directory : C:\Temp\Demo3 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 107
MicroChip bit MicroController 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo3.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo3\Demo3.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo3.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int main(void) { printf("25 as decimal (d): %d\n", 25); printf("'a' as character (c): %c\n", 'a'); printf("'a' as decimal (d): %d\n", 'a'); printf("2.55 as float (f): %f\n", 2.55); printf("2.55 as decimal (d): %d\n", 2.55); printf("6.02e23 as exponent (e): %e\n", 6.02e23); printf("6.02e23 as decimal (d): %d\n", 6.02e23); printf("'microchip' as string (s): %s\n", "Microchip"); printf("'microchip' as decimal (d): %d\n", "Microchip"); } while(1); 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 108
3.3 MPLAB C30 컴파일러 10. MPLAB SIM 설정 3 Menu Debugger Select Tool MPLAB SIM 클릭 4 Menu Debugger Settings 클릭 5 Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All 6 Menu Project Build All 클릭 (Ctrl+F10) 7 Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 1 Menu Debugger Run(F9) 클릭 2 Output Window SIM Uart1 탭에서메시지확인 109
MicroChip bit MicroController 3.3.4.4 연산자 (Operators) 3.3.4.4.1 산술연산자 C30 컴파일러의산술연산자는다음표와같으며, 산술연산자사용시피연산자의데이터형에따라그결과값이결정되므로주의를필요로한다. 다음예를살펴보자. 다음예에서보는바와같이동일한값으로나누기연산을하지만그결과값은다르게되는것을알수있다. 즉, c = a / b; 연산을수행할때우측항부터연산을한후그결과값을좌측항의변수에저장하게되는데두개의피연산자가정수형데이터일때는그결과값이정수형이되고, 하나또는두개의피연산자가실수형일때는그결과값이실수형이되기때문이다. 따라서이러한연산을사용할때는데이터형에주의해서사용하도록해야한다. 3.3.4.4.2 대입연산자대입연산자는특정값을특정저장공간에저장또는대입하는연산자이다. 즉, x += 5; 는 x = x + 5; 와같은표현이되며, 연산순서는우측항을먼저계산한후그결과값을좌측항에대입하게된다. 110
3.3 MPLAB C30 컴파일러 3.3.4.4.3 증감연산자 증감연산자는다음예에서보는바와같이전치 (Postfix) 및후치 (Prefix) 연산자로사용함에따라서그결과값이달라질수있으므로주의해서사용해야한다. 3.3.4.4.4 관계연산자 관계연산자는두개의피연산자를비교하여그결과값이참 (TRUE) 이면 1, 거짓 (FALSE) 이면 0 을발생하게된다. 111
MicroChip bit MicroController C 프로그래밍에익숙하지않은엔지니어들이흔히범하는오류중한가지가대입연산자 (=) 와관계연산자 (==) 사용에있다. 참고로, 조건문에서 0이아닌값은항상참 (TRUE), 0 은거짓 (FALSE) 으로해석된다. 다음예를통해한번살펴보자. x = 2; if ( x == 5 ) // x가 5와같은지테스트를한후 False 이므로 printf() 미실행 { printf( OK! x is equal to 5 ); } x = 2; if ( x = 5 ) // x에 5를대입한후 x는 0이아니므로, True 발생, 따라서 printf() 실행 { printf( Oops! ); } 이미설명했듯이조건문에서대입연산자를쓸때는위와같은오류를범하기쉬우며, 수천라인이상되는코딩에서이와같은오류를찾는것은상당히어려운일이아닐수없다. 3.3.4.4.5 논리연산자다음과같이논리연산자에는논리곱 (AND) 및논리합 (OR) 연산자가있으며, 단항연산자로써논리부정 (NOT) 연산자가있다. 이들연산자의결과값은참일때 1(TRUE), 거짓일때 0(FALSE) 를발생시킨다. 112
3.3 MPLAB C30 컴파일러 3.3.4.4.6 2 진논리연산자 2진논리연산자는각각의비트와비트가대응하여연산된결과값을발생하는연산자이다. 3.3.4.4.7 쉬프트연산자 쉬프트연산자는왼쪽및오른쪽으로쉬프트하기위한연산자가있다. 왼쪽쉬프트연산자의경우, 왼쪽으로쉬프트되어밀려난왼쪽최상위비트 (MSB) 는사라지게되며, 오른쪽최하위비트 (LSB) 는 0 로채워진다. 113
MicroChip bit MicroController 오른쪽쉬프트연산자의경우, 데이터형에따라서그결과값이달라질수있으므로주의를요한다. 최하위비트 (LSB) 는사라지게되고 unsigned로선언된데이터의경우최상위비트는 0 로채워지게되고, sign으로선언된경우는부호 (0/1) 에따라서결정된다. 3.3.4.4.8 메모리어드레싱연산자 메모리연산자는다음표와같이포인터, 배열, 구조체및공용체사용을위한어드레싱연산자가지원된다. 3.3.4.4.9 기타연산자 지금까지설명한연산자외에함수호출, 형변환연산자, 삼항연산자, 콤머연산자등이지원되고있다. 114
3.3 MPLAB C30 컴파일러 다음예에서보는바와같이특정연산에있어서형변환연산자는유용하게사용될수있는연산자이다. 3.3.4.4.10 연산자우선순위연산자를여러개사용하였을경우괄호가가장최우선하므로, 아래우선순위를암기하는것보다는괄호연산자를적절히사용하여오류를방지하는것이최선의방법이라할수있다. 115
MicroChip bit MicroController 1
3.3 MPLAB C30 컴파일러 다음의예는일부연산에대한컴파일러의연산우선순위에의해결정된실제연산순위를보여주고있다. 3.3.4.4.11 연산자실습 앞절에서수행했던것과동일한방법으로 Demo4 라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo4 입력 - Project Directory : C:\Temp\Demo4 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 117
MicroChip bit MicroController 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo4.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo4\Demo4.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo4.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int main(void) { int x = 10; int y, z; float a, b, c, d; int i = 1, j = 0, k = 5; char m, n = 255; a = x + 5; b = x / 4; c = (float)x / 4; d = x + 0.55; y = a + b; z = a + 0.55; j = i++; k += i; m = n + 2; } while(1); 118
9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 3.3 MPLAB C30 컴파일러 10. MPLAB SIM 설정 H. Menu Debugger Select Tool MPLAB SIM 클릭 I. Menu Debugger Settings 클릭 J. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All K. Menu Project Build All 클릭 (Ctrl + F10) L. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. Watch Window 설정 - Menu View Watch Window 클릭 - Symbol Name에변수추가하기 : 아래그림을참조하여 x, y, z, a, b, c, d, i, j, k, m, n 각각의변수를추가 - 변수들의해당값들은컴파일후에디스플레이되므로, 화면과다를수있음 119
MicroChip bit MicroController 13. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 14. Watch Window 변수값확인 - 각각의변수값확인 3.3.4.5 제어문 (Control Statement) 제어문은흔히알고있는 if~else 문과같이실행순서를제어하기위한문을말한다. 3.3.4.5.1 if 문 조건문이참 (True) 면다음문즉, 중괄호 ({}) 안의문을수행하고, 거짓 (False) 이면실행하지않는다. 3.3.4.5.2 if~else 문 이중조건문을이용하여두가지실행문을선택적으로실행할수있는제어문이다. 120
3.3.4.5.3 if~else if~else 문 다중 if 문을이용하여실행문을선택적으로실행할수있는제어문이다. 3.3 MPLAB C30 컴파일러 3.3.4.5.4 switch case 문 다중 if 문과유사한효율적인제어문이다. 3.3.4.5.5 for 문 특정회수동안블록안의코드를반복하기위한제어문이다. 121
MicroChip bit MicroController 3.3.4.5.6 while 문 조건문이참 (True) 인동안블록안의코드를반복하기위한제어문이며, 조건문에따라서단한번도블록안의코드를실행하지않을수있다. 3.3.4.5.7 do while 문블록안의코드를수행한후조건문이참 (True) 인지판단하여반복을수행하는제어문이다. 다만, while 문과는달리블록안의코드를무조건한번은실행하고조건문에따라서단한번도블록안의코드를실행하지않을수있다. 3.3.4.5.8 break 문 break문은루프 (Loop) 문에서즉시빠져나오기위한명령어로사용이되며, break 를만나게되면현재의카운팅을중지하고, 루프문을탈출하게된다. 또한앞에서설명한 switch case 에서사용되기도한다. 아래예에서는변수 i는 0~5까지만카운팅을하고, while 문을빠져나가게된다. 122
3.3 MPLAB C30 컴파일러 3.3.4.5.9 continue 문 continue문은현재의블록안의나머지부분실행을생략하고, break와는달리카운팅을계속적으로수행하기위해다시루프 (loop) 문으로돌아간다. 3.3.4.5.10 조건문및루프문실습 앞절에서수행했던것과동일한방법으로 Demo5 라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo5 입력 123
MicroChip bit MicroController - Project Directory : C:\Temp\Demo5 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo5.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo5\Demo5.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력 이제에디터윈도우의 Demo5.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int i; int main(void) 124
3.3 MPLAB C30 컴파일러 { for (i=0; i < 5; i++) { printf("for loop iteration #%d\n", i); } i = 0; //Try i = 0 and i = 5 while(i < 5) { printf("while loop iteration #%d\n", i++); } i = 0; //Try i = 0 and i = 5 do { printf("do loop iteration #%d\n", i++); } while(i < 5); } //Loop forever while(1); 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 A. Menu Debugger Select Tool MPLAB SIM 클릭 B. Menu Debugger Settings 클릭 C. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 125
MicroChip bit MicroController 11. Build All D. Menu Project Build All 클릭 (Ctrl + F10) E. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 3.3.4.5.11 switch 문실습 앞절에서수행했던것과동일한방법으로 Demo6 라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 126
3.3 MPLAB C30 컴파일러 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo6 입력 - Project Directory : C:\Temp\Demo6 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo6.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo6\Demo6.c 선택후열기 (Open) 버튼클릭 127
MicroChip bit MicroController 8. C 소스코드입력 이제에디터윈도우의 Demo6.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int channel; int main(void) { channel = 7; switch(channel) { case 2: printf("wbbm Chicago\n"); break; case 3: printf("dvd Player\n"); break; case 4: printf("wtmj Milwaukee\n"); break; case 5: printf("wmaq Chicago\n"); break; case 6: printf("witi Milwaukee\n"); break; case 7: printf("wls Chicago\n"); break; case 9: printf("wgn Chicago\n"); break; case 10: printf("wmvs Milwaukee\n"); break; case 11: printf("wttw Chicago\n"); break; case 12: printf("wisn Milwaukee\n"); break; case 8: case 13: printf("weak signals from South Bend\n"); break; case 14... 69: printf("uhf Station\n"); break; default: printf("no Signal Available\n"); } } while(1); // NOTE: case values must be of an integer type (char, int, short, long) 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib 128
- Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 3.3 MPLAB C30 컴파일러 10. MPLAB SIM 설정 F. Menu Debugger Select Tool MPLAB SIM 클릭 G. Menu Debugger Settings 클릭 H. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All I. Menu Project Build All 클릭 (Ctrl + F10) J. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 129
MicroChip bit MicroController 3.3.4.6 함수모든 C 프로그램은하나이상의함수들로구성되어있다. 가장흔히볼수있는프로그램의시작부분인 main() 함수를그예로들수있다. 프로그래밍에서코딩을하다보면반복적으로사용되는연산또는명령어들을만나게되는데, 이와같은부분을모듈화하여필요할때마다불러서사용할수있도록지원해주는기능을함수라말할수있다. 이들함수는프로그래밍업무를효율적으로관리할수있도록지원할뿐만아니라모듈화된이들함수를재사용할수있기때문에불필요한시간을경감시켜주기도한다. 일례로우리가실습에서자주사용한표준 C 라이브러리함수인 printf() 함수는컴파일러제조사에의해이미만들어졌기때문에쉽게사용할수있었다. 만약이러한함수가없었다면사용자가직접이함수의기능을프로그래밍해야하는번거로움이있었을것이다. 3.3.4.6.1 함수의선언문함수의선언은변수선언문과매우흡사하다. 함수는데이터반환수행시반환될데이터의형과동일한데이터형을갖고있어야하며, 변수와마찬가지로함수의이름을갖고있어야한다. 끝으로호출시함수에전달될파라미터를갖고있어야한다. 또한함수내부에추가적인변수를선언할수있는데이를지역변수라부르며이들지역변수들은함수의내부에서만액세스가가능하며, 함수의블록을벗어나는순간소멸된다. 끝으로함수사용시주의할사항은함수의내부에서는함수를선언할수없다는것이다. 130
3.3 MPLAB C30 컴파일러 3.3.4.6.2 함수의반환형함수이름의앞에붙이는함수반환형은함수내의 return문에사용되는반환되는데이터의형과동일하게사용하여야한다. 만약함수에의해반환되는값이없다면, 함수의반환형은 void가된다. 131
MicroChip bit MicroController 3.3.4.6.3 함수의파라미터함수의헤더에서선언된파라미터의이름은함수에서만사용가능한파라미터이다. 따라서이들이름은메인프로그램및다른함수에서사용되는변수와동일한이름의사용이가능하다. 만약함수가파라미터를필요로하지않는경우, void 키워드로대체되어야한다. 3.3.4.6.4 함수선언및호출예 다음예는두수중큰수를반환하는사용자함수로써함수의반환형은반환값인변수 z 의데이터형인 int와동일하게사용하였음에주목하자. 이제사용자함수를호출하기위해서는다음그림과같이함수명과함께함수의인자인파라미터값을지정해주면된다. 3.3.4.6.5 함수의저장클래스 (Storage Class) C30에서모든함수는기본적으로전역함수로처리된다. 따라서프로젝트의모든파일에서참조가능한전역함수는키워드 extern 이불필요하며해당파일에서만참조할수있는지역함수로사용할때는키워드 static을사용해야한다. 132
3.3.4.6.6 함수실습 앞절에서수행했던것과동일한방법으로 Demo7 라는프로젝트를만들어보자. 3.3 MPLAB C30 컴파일러 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo7 입력 - Project Directory : C:\Temp\Demo7 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo7.c 입력후저장버튼클릭 133
MicroChip bit MicroController 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo7\Demo7.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력 이제에디터윈도우의 Demo7.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> typedef struct { float re; float im; } complex; // Real part // Imaginary part complex a, b, c; int i, j; complex ComplexAdd(complex x, complex y); int IntegerAdd(int v, int w); int main(void) { a.re = 2.5; a.im = 5.0; b.re = 1.5; b.im = 2.0; i = 3; j = 2; c = ComplexAdd(a,b); printf("c = %f + j%f\n", c.re, c.im); printf("k = %d\n", i + j); 134
3.3 MPLAB C30 컴파일러 } while(1); complex ComplexAdd(complex x, complex y) { complex z; z.re = x.re + y.re; z.im = x.im + y.im; return z; } int IntegerAdd(int v, int w) { return (v + w); } 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 K. Menu Debugger Select Tool MPLAB SIM 클릭 L. Menu Debugger Settings 클릭 M. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All N. Menu Project Build All 클릭 (Ctrl + F10) O. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 135
MicroChip bit MicroController 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 3.3.4.7 배열 (Array) 배열은동일한데이터형으로된다중데이터의저장소를말한다. 이들다중데이터는배열의인덱스라불리는순차적으로매겨진번호에의해순차적으로저장되며, 배열의인덱스는 0부터매겨진다. 136