C 2015. 허경용 All Rights Reserved. 초판 1 쇄발행 2015 년 7 월 29 일 지은이허경용 펴낸이장성두 펴낸곳제이펍 출판신고 2009 년 11 월 10 일제 406 2009 000087 호 주소경기도파주시문발로 141 뮤즈빌딩 403 호 전화 070 8201 9010 / 팩스 02 6280 0405 홈페이지 www.jpub.kr / 이메일 jeipub@gmail.com 편집부이민숙, 이슬, 이주원 / 소통 기획팀민지환, 현지환 표지디자인미디어픽스 용지신승지류유통 / 인쇄한승인쇄 / 제본광우제책사 ISBN 979 11 85890 25 8 (93560) 값 30,000 원 이책은저작권법에따라보호를받는저작물이므로무단전재와무단복제를금지하며, 이책내용의전부또는일부를이용하려면반드시저작권자와제이펍의서면동의를받아야합니다. 잘못된책은구입하신서점에서바꾸어드립니다. jeipub@gmail com
02 TECH LEARNING 시리즈는대학이나학원에서의강의에알맞은구성과적절한난이도의내용으로이루어져있습니다. 이는여러분의학습여정에분명한이정표가되어줄것입니다. 이 책에 기재된 내용을 기반으로 한 운용 결과에 대해 저자, 소프트웨어 개발자 및 제공자, 제이펍 출판사는 일체의 책임을 지지 않으므로 양해 바랍니다. TM 이 책에 등장하는 회사명, 제품명은 일반적으로 각 회사의 등록 상표 ( 또는 상표 ) 이며, 본문 중에는, C, R 마크 등을 생략하고 있습니다. 이 책에서 사용하고 있는 제품 버전은 독자의 학습 시점에 따라 책의 내용과 다를 수 있습니다. 이 책에 사용한 그림은 대부분 저자가 직접 촬영하였으며, 그 외의 그림은 소유자의 허락하에 싣거나 출처를 표시하였습니다. 연습문제 해답과 예제 소스코드는 제이펍 홈페이지 (www.jpub.kr) 의 해당 도서 소개 글에서 다운로드할 수 있습니다. 단, 연습문제 번호에 아이콘이 있는 문제에 한해서 해답을 제공합니다. 이 책을 교재로 선정하신 강의자 분께는 강의교안 (ppt 파일 ) 과 이미지 파일을 제공합니다. 책의 내용과 관련된 문의사항은 저자 (hgycap@deu.ac.kr) 혹은 제이펍 출판사 (jeipub@gmail.com) 로 연락주시기 바랍니다.
강의 계획표 (두 학기용) 1 학기 1 주차 2 학기 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러! 리뷰 1 CHAPTER 2 메모리 이야기 2 주차 CHAPTER 3 ATmega328 마이크로컨트롤러 3 주차 CHAPTER 4 ATmega328 프로그래밍 준비 CHAPTER 16 SPI 4 주차 CHAPTER 5 아두이노 프로그래밍 CHAPTER 17 I2C 5 주차 리뷰 2 CHAPTER 6 아트멜 스튜디오 설치 CHAPTER 18 컴퓨터와의 시리얼 연결 CHAPTER 7 Hello Blink 6 주차 CHAPTER 8 프로그램의 기본 구조 CHAPTER 19 7 세그먼트 표시장치 7 주차 CHAPTER 9 비트 연산자 CHAPTER 20 LED 매트릭스 8 주차 중간고사 9 주차 CHAPTER 10 시리얼 통신 CHAPTER 21 텍스트 LCD 10 주차 CHAPTER 11 버튼 입력 CHAPTER 22 키 매트릭스 11 주차 CHAPTER 12 아날로그-디지털 변환 CHAPTER 23 DC 모터와 서보 모터 12 주차 CHAPTER 13 인터럽트 13 주차 CHAPTER 14 타이머/카운터 14 주차 CHAPTER 15 PWM 15 주차 CHAPTER 24 직렬 입력 병렬 출력 레지스터 - 74595 CHAPTER 25 센서 CHAPTER 26 블루투스 CHAPTER 27 EEPROM 기말고사 회색으로 표현된 2장과 27장은 설명에 많은 시간을 할애하지 않아도 될 것으로 생각되는 장 이며, 28장과 29장의 내용은 마이크로컨트롤러 강의에서 흔히 다루지는 않는 내용이므로 강 의에서는 생략할 수 있다. 한 학기 강의를 위한 강의 계획의 예는 다음과 같다. vi 강의를 위한 안내
강의 계획표 (한 학기용) 주제 해당 장 1 주차 마이크로컨트롤러 소개 CHAPTER 1 CHAPTER 2 2 주차 ATmega328 CHAPTER 3 CHAPTER 4 CHAPTER 5 3 주차 프로그램의 기본 구조 CHAPTER 7 CHAPTER 8 4 주차 시리얼 통신 I CHAPTER 10 5 주차 디지털 데이터 입출력 CHAPTER 9 CHAPTER 11 6 주차 아날로그 데이터 입출력 CHAPTER 12 CHAPTER 15 7 주차 시리얼 통신 II CHAPTER 16 CHAPTER 17 CHAPTER 18 8 주차 중간고사 9 주차 7 세그먼트 표시장치 CHAPTER 19 10 주차 LED 매트릭스 CHAPTER 20 11 주차 텍스트 LCD CHAPTER 21 12 주차 DC 모터와 서보 모터 CHAPTER 23 13 주차 센서 CHAPTER 25 14 주차 블루투스 CHAPTER 26 15 주차 기말고사 강의 보조자료 제이펍 홈페이지 www.jpub.kr 의 해당 도서 소개 글에서 다음과 같은 강의 보조자료를 다운로드할 수 있습니다. 강의노트 소스코드 저자가 작성한 pptx 형태의 강의자료 및 이미지 파일* 예제 소스코드 연습문제 해답 기호로 표시된 연습문제의 해답 이외에 강의에 참고할 만한, 혹은 혼자 공부하는 독자들을 위한 웹사이트를 소개합니다. 네이버 카페 아두이노 상상을 스케치하다(저자 운영) http://cafe.naver.com/sketchurimagination * 표시의 보조자료는 교수 및 강사에게만 별도로 제공됩니다. 강의 보조자료를 제공받길 원하는 분께서는 제이펍 출판사 (jeipub@gmail.com)로 연락주시길 바랍니다. 강의를 위한 안내 vii
강의를위한안내머리말장별안내베타리더후기 v xiv xvi xxii I. ATmega328 프로그래밍준비하기 CHAPTER 1 CHAPTER 2 CHAPTER 3 3 1.1 마이크로컨트롤러란무엇인가? 3 1.2 마이크로프로세서? 마이크로컨트롤러? 6 1.3 마이크로컨트롤러는어디에사용할수있을까? 8 1.4 마이크로컨트롤러를어떻게공부해야할까? 11 1.5 주변장치와어떻게데이터를교환하나? 14 1.6 프로그램은어떻게만들어지나? 18 1.7 마이크로컨트롤러가꼭필요한가? 19 1.8 요약 21 22 23 2.1 ATmega328 의메모리 23 2.2 ROM과 RAM 25 2.3 ROM은정말읽을수만있나? 26 2.4 플래시메모리 27 2.5 SD 카드 28 2.6 emmc 29 2.7 SSD 30 2.8 DRAM과 SRAM 30 2.9 요약 32 33 ATmega328 34 3.1 AVR 34 3.2 ATmega328 소개 35 3.3 ATmega328 의핀배치 37 3.4 레지스터 41 3.5 ATmega328 의메모리 45 3.6 요약 52 52 viii 차 례
CHAPTER 4 CHAPTER 5 CHAPTER 6 CHAPTER 7 CHAPTER 8 CHAPTER 9 ATmega328 53 4.1 왜 ATmega328 인가? 53 4.2 ATmega328 프로그래밍을위한하드웨어 54 4.3 ATmega328 프로그래밍을위한소프트웨어 59 4.4 요약 61 62 63 5.1 아두이노통합개발환경설치 63 5.2 아두이노우노에시리얼방식으로업로드하기 66 5.3 아두이노우노에 ISP 방식으로업로드하기 69 5.4 부트로더굽기 72 5.5 브레드보드기본회로에부트로더굽기 74 5.6 요약 76 77 78 6.1 아트멜스튜디오 78 6.2 아트멜스튜디오설치 79 6.3 요약 87 88 Hello Blink 89 7.1 C 스타일 89 7.2 아두이노스타일 97 7.3 C 스타일대아두이노스타일 107 7.4 요약 109 109 111 8.1 C 스타일프로그램의구조 112 8.2 아두이노스타일프로그램의구조 117 8.3 C 스타일과아두이노스타일 120 8.4 요약 122 123 124 9.1 포트? 핀? 124 9.2 8개의 LED 제어하기 126 9.3 비트연산자 130 9.4 비트패턴만들기 141 9.5 요약 143 143 차 례 ix
II. ATmega328 프로그래밍시작하기 CHAPTER 10 CHAPTER 11 CHAPTER 12 CHAPTER 13 CHAPTER 14 147 10.1 UART 148 10.2 UART 통신을위한레지스터 151 10.3 아두이노의시리얼통신 163 10.4 UART 라이브러리만들기 167 10.5 문자열수신및처리 173 10.6 printf 함수사용하기 177 10.7 요약 179 180 181 11.1 풀업저항과풀다운저항 182 11.2 버튼입력 184 11.3 디바운스 188 11.4 디바운스회로 193 11.5 요약 195 196 197 12.1 ATmega328 의 ADC 197 12.2 가변저항값읽기 199 12.3 AD 변환을위한레지스터 202 12.4 아두이노의 AD 변환 208 12.5 가변저항으로 LED 제어하기 209 12.6 VCC는 5V인가? 212 12.7 난수생성 216 12.8 요약 219 220 221 13.1 폴링대인터럽트 221 13.2 인터럽트 223 13.3 인터럽트처리 225 13.4 인터럽트사용에서의주의사항 230 13.5 외부인터럽트 232 13.6 핀변화인터럽트 238 13.7 요약 242 242 243 14.1 타이머 / 카운터 243 14.2 오버플로인터럽트 245 x 차 례
14.3 비교일치인터럽트 248 14.4 파형출력 252 14.5 아두이노의타이머 255 14.6 요약 259 260 CHAPTER 15 CHAPTER 16 CHAPTER 17 CHAPTER 18 PWM 262 15.1 PWM 262 15.2 PWM 모드 268 15.3 PWM을이용한 LED 밝기제어하기 273 15.4 아두이노의 PWM 279 15.5 요약 281 282 SPI 283 16.1 SPI 283 16.2 SPI 방식의 EEPROM 288 16.3 아두이노에서 25LC010A 사용하기 300 16.4 요약 303 304 I2C 307 17.1 I2C 307 17.2 DS1307, RTC 칩 311 17.3 아두이노 Wire 라이브러리 323 17.4 아두이노 RTClib 라이브러리 327 17.5 요약 329 330 331 18.1 ATmega328 의 UART 통신 331 18.2 RS232-UART 변환기 335 18.3 USB-UART 변환기 339 18.4 컴퓨터의시리얼포트 340 18.5 요약 344 345 III. ATmega328 활용하기 CHAPTER 19 7 349 19.1 한자리 7 세그먼트표시장치 349 19.2 한자리 7 세그먼트표시장치 아두이노스타일 356 19.3 네자리 7 세그먼트모듈 358 차 례 xi
19.4 네자리 7 세그먼트표시장치 아두이노스타일 365 19.5 요약 366 367 CHAPTER 20 CHAPTER 21 CHAPTER 22 CHAPTER 23 CHAPTER 24 LED 368 20.1 LED 매트릭스 368 20.2 LED 매트릭스제어 374 20.3 LED 매트릭스제어 아두이노스타일 381 20.4 요약 382 383 LCD 384 21.1 텍스트 LCD 384 21.2 8비트모드텍스트 LCD 제어 388 21.3 4비트모드텍스트 LCD 제어 394 21.4 텍스트 LCD 제어 - 아두이노스타일 401 21.5 요약 405 406 408 22.1 키매트릭스 409 22.2 4 4 키매트릭스 413 22.3 키매트릭스 아두이노스타일 418 22.4 키패드라이브러리 419 22.5 고스트현상이없는키매트릭스 422 22.6 요약 427 428 DC 429 23.1 모터 429 23.2 DC 모터 430 23.3 모터제어 434 23.4 서보모터 437 23.5 서보모터제어 440 23.6 아두이노의서보모터제어 444 23.7 요약 447 447 74595 448 24.1 74595 449 24.2 아두이노에서 74595 사용하기 456 24.3 요약 458 458 xii 차 례
CHAPTER 25 CHAPTER 26 CHAPTER 27 CHAPTER 28 CHAPTER 29 459 25.1 온도센서 460 25.2 초음파거리센서 465 25.3 요약 471 471 472 26.1 블루투스모듈설정 473 26.2 스마트폰설정 476 26.3 블루투스통신 480 26.4 아두이노의블루투스통신 481 26.5 요약 485 485 EEPROM 486 27.1 EEPROM 레지스터 487 27.2 EEPROM 라이브러리 GNU 라이브러리 490 27.3 EEPROM 라이브러리 아두이노스타일 495 27.4 요약 496 497 499 28.1 워치독타이머를위한레지스터 500 28.2 워치독타이머사용하기 503 28.3 워치독타이머사용하기 아두이노스타일 507 28.4 요약 509 509 511 29.1 하이퓨즈 512 29.2 로퓨즈 514 29.3 확장퓨즈 518 29.4 퓨즈프로그래밍 519 29.5 요약 522 522 ATmega328 523 미주 531 찾아보기 534 필요부품리스트 543 차 례 xiii
아두이노가첫선을보인후 10여년의시간이지나면서아두이노는비전공자들도사용할수있는마이크로컨트롤러보드로그자리를확고히하고있다. 아두이노의공개된하드웨어는손쉽게다양한기능을사용해볼수있는확장보드와쉴드의출시를이끌어냈다. 또한이해하고기억하기어려운이름들을숨긴간단한소프트웨어개발환경을제공함으로써잠깐의검색만으로도상상할수있는대부분의것들이이미아두이노를통해만들어지고있음을확인할수있으며, 상상이상의것들이아두이노를통해진행되고있음을발견하게될지도모른다. 이처럼아두이노가어른들을위한장난감으로자리잡게된이유는, 한마디로아두이노가쉽기때문이다. 아두이노를처음접할때만들어보게되는 Blink의경우전자회로에대한지식이없다하더라도 30분이면 LED가깜빡거리는것을확인할수있다. 하지만쉽다는것에는함정이있다. 아두이노가쉽고빠르게마이크로컨트롤러를사용하여상상하는것들을만들어볼수있다는장점만있다면모두가아두이노를사용해야겠지만실상은그렇지않다. 이유가무엇일까? 여러가지이유가있지만, 첫번째이유는아두이노로마이크로컨트롤러의모든기능을사용할수없다는점이다. 아두이노소프트웨어는추상화된함수를특징으로하고있지만여러이유로마이크로컨트롤러의모든기능을추상화해서제공하지는않는다. 마이크로컨트롤러에서흔히사용되지만아두이노에서는제공하지않는인터럽트와타이머 / 카운터등이그예에속한다. 물론검색을통해이들기능을사용할수있도록해주는라이브러리를찾을수있긴하나여전히모든기능을사용할수는없다. 또다른이유는아두이노의장점인추상화된함수들에서연유한다. 추상화된함수들은비전공자도쉽게마이크로컨트롤러의세계로끌어들이는일등공신인것은사실이지만, 추상화된함수들만을사용하다보면그이면에서벌어지고있는실제마이크로컨트롤러의동작 xiv 머리말
을이해할수있는기회를잃어버릴수있다. 물론모든사람이마이크로컨트롤러의세세한동작을이해할필요는없다. 하지만마이크로컨트롤러에관심이있다면마이크로컨트롤러의구조와동작원리를이해하여야만마이크로컨트롤러의모든기능을사용해볼수있다. 마지막으로한가지더언급하자면아두이노개발환경의기능이너무제한적이라는점이다. 아두이노개발환경은한두번의클릭만으로스케치를업로드해서실행시켜볼수있는간단한구조에그장점이있다. 하지만불편한편집기와 C/C++ 와는다른소스코드관리방식등프로그래밍에경험이있는독자라면누구나아두이노개발환경에토로할불만이한두가지는있을것이다. 게다가아두이노는디버깅기능을지원하지않는다. 간단한스케치라면모르겠지만, 스케치의크기가조금만커진다면디버깅기능없이버그를찾아내는것이쉽지만은않다. 이책은아두이노방식의추상화된스케치작성방법과 C/C++ 언어를사용한전통적인프로그램작성방법을비교함으로써아두이노를넘어마이크로컨트롤러에대한이해를높이고다양한기능을활용할수있는연결고리를제공하기위해쓰였다. 이를위해이책에서는 ATmega328 마이크로컨트롤러의모든기능을사용할수있는아트멜스튜디오를사용하였으며, ATmega328 마이크로컨트롤러의기본적인동작방식과흔히사용되는주변장치를제어하는방법을전통적인 C 스타일과아두이노스타일을비교하여다루었다. 단점만을이야기해서아두이노에좋지않은인상을가졌을지도모르겠지만, 이책을쓰면서아두이노가여러가지단점에도불구하고얼마나좋은개발환경인지새삼느낄수있었다. 하지만아두이노는마이크로컨트롤러의세계로이끌어줄수는있지만, 그깊은곳을탐색할수있는도구를제공해주지는않는다는점또한사실이므로이책을통해아두이노를넘어서고자하는독자들에게칼한자루를권하려한다. 하지만아직칼은무디다. 이책에서다루는마이크로컨트롤러의기능들은실제사용할수있는기능의절반에미치지못한다. 아직탐험해야할미지의영역은무궁무진하다. 이책을통해전가의보도로벼릴수있는, 작지만의미있는한발을내디딜수있기를소망한다. 지은이 머리말 xv
I. ATmega328 프로그래밍준비하기 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러! 마이크로컨트롤러란중앙처리장치에주변장치들을하나의칩으로집적하여만든특수목적용소형컴퓨터를말한다. 이장에서는마이크로컨트롤러와일반적으로컴퓨터에서사용되는마이크로프로세서의차이점을살펴보고, 마이크로컨트롤러로할수있는것과할수없는것을살펴본다. 또한마이크로컨트롤러를위한프로그램개발방법을살펴본다. CHAPTER 2 메모리이야기마이크로컨트롤러는디지털컴퓨터의일종이므로프로그램을실행시키기위해서는메모리가반드시필요하다. 이장에서는컴퓨터와마이크로컨트롤러에서사용되는메모리의종류와특징을살펴보고, 다양한메모리의관계를살펴본다. 또한 ATmega328 마이크로컨트롤러에포함되어있는메모리의종류와특성을살펴본다. CHAPTER 3 ATmega328 마이크로컨트롤러 ATmega328 은아두이노보드중기본이되는아두이노우노에사용된마이크로컨트롤러이다. 이장에서는 ATmega328 의핀및기능, 메모리구조와주소체계등프로그램작성을위해필요한 ATmega328 마이크로컨트롤러의기본구조를살펴본다. CHAPTER 4 ATmega328 프로그래밍준비 ATmega328 은아두이노우노에사용된마이크로컨트롤러로서전원만주어지면컴퓨터와마찬가지로동작한다. 이장에서는 ATmega328 을동작시키기위한기본적인회로를구성하여마이크로컨트롤러의동작을살펴본다. 또한 ATmega328 을위한프로그램을작성하기위해사용할수있는개발환경을살펴본다. xvi 장별 안내
CHAPTER 5 아두이노프로그래밍 ATmega328 은아두이노환경에서프로그래밍이가능하다. 이장에서는아두이노개발환경을설치하는방법을살펴보고, 아두이노환경에서프로그램을업로드하는두가지방법인 ISP 방식과시리얼방식을비교하여살펴본다. 또한시리얼방식의프로그램업로드를위해아두이노에서사용하는부트로더를굽는방법을살펴본다. CHAPTER 6 아트멜스튜디오설치아트멜스튜디오는아트멜에서자사의마이크로컨트롤러를위한프로그램을작성할수있도록무료로제공하는통합개발환경이다. 이장에서는아트멜스튜디오를설치하는방법과아트멜스튜디오의사용자인터페이스에대해살펴본다. 또한아트멜스튜디오를최신상태로유지하기위한아트멜스튜디오의업데이트방법을살펴본다. CHAPTER 7 Hello Blink 아트멜스튜디오는 C 스타일의프로그램뿐만아니라애드온설치를통해아두이노스타일의프로그램도작성할수있다. 이장에서는 C 스타일과아두이노스타일의프로젝트를생성하는방법과생성된프로젝트를컴파일하여마이크로컨트롤러에업로드하는방법을살펴본다. 또한디버깅기능이없는아두이노를위해디버깅용도로사용할수있는시리얼모니터의사용방법을살펴본다. CHAPTER 8 프로그램의기본구조아두이노는 C/C++ 를기본으로하지만, 프로그래밍을직관적으로할수있도록 main 함수를제거하고 setup 과 loop 함수를기본으로하고있다. 이장에서는 C 스타일과아두이노스타일프로그램의기본구조를비교하여살펴본다. 또한마이크로컨트롤러프로그램의기본이되는데이터입출력을위한 C 스타일의기본레지스터인 DDRx, PORTx, PINx 레지스터와아두이노스타일에서이에대응하는기본함수인 pinmode, digitalwrite, digitalread 함수를살펴본다. CHAPTER 9 비트연산자 ATmega328 에서데이터입출력은 8비트크기의포트단위로이루어지지만, 비트단위로그의미가정의되고비트단위로제어되어야하는경우를흔히볼수있다. 이장에서는비트단위로데이터를조작하기위한 C 언어의비트연산자를살펴보고, 비트연산자를사용하는기본연산방법을살펴본다. 장별 안내 xvii
II. ATmega328 프로그래밍시작하기 CHAPTER 10 시리얼통신마이크로컨트롤러는입출력핀의개수가제한되어있어병렬통신보다는시리얼통신이선호된다. 이장에서는시리얼통신방법중에서가장오래된역사를가지고있는 UART 시리얼통신방법을살펴본다. 또한 UART 시리얼통신을위한함수들을재사용이가능하도록라이브러리형태로만드는방법을살펴본다. CHAPTER 11 버튼입력마이크로컨트롤러는디지털데이터입출력을기본으로한다. 이장에서는디지털입출력을위한기본레지스터인 DDRx, PINx, PORTx 레지스터를살펴본다. 또한디지털데이터를입력하기위해버튼을사용하는경우오픈된회로를방지하기위한풀업및풀다운저항사용방법과버튼의기계적특성으로발생하는채터링현상을제거하기위한방법을살펴본다. CHAPTER 12 아날로그 -디지털변환마이크로컨트롤러가디지털데이터를기본으로하지만아날로그데이터의경우아날로그 -디지털변환기 (ADC) 를통해디지털데이터로변환하여읽어들일수있다. 이장에서는 ATmega328 의 ADC 구조를살펴보고, ADC를통해아날로그데이터를처리하는방법을살펴본다. 또한아두이노에서제공하는 analogread 함수를통해 ADC를사용하는방법을살펴본다. CHAPTER 13 인터럽트일정시간간격으로처리가필요한작업을진행하기위해마이크로컨트롤러에서는폴링방식과인터럽트방식을사용할수있다. 이장에서는두가지방식중정확한타이밍조절이가능한인터럽트방식을폴링방식과비교하여살펴보고인터럽트처리를위한인터럽트벡터테이블의구조를살펴본다. 또한아두이노에서인터럽트처리를위해제공하는함수들을살펴본다. CHAPTER 14 타이머 / 카운터타이머 / 카운터는펄스의개수를세는장치로, 마이크로컨트롤러에공급되는클록의개수를통해시간측정역시가능하다. 이장에서는타이머 / 카운터의구조에대해살펴보고타이머 / 카운터를통해인터럽트를사용하는방법을살펴본다. 또한아두이노에서타이머 / 카운터를사용하는확장라이브러리중하나인 MsTimer2 라이브러리의사용방법을살펴본다. xviii 장별 안내
CHAPTER 15 PWM ATmega328 로아날로그신호출력은불가능하지만아날로그신호와유사한효과를내는펄스폭변조 (PWM) 신호출력은가능하다. 이장에서는타이머 / 카운터를이용하여 PWM 신호를생성하는방법과 PWM 신호의특성을살펴본다. 또한아두이노에서제공하는 PWM 신호생성함수인 analogwrite 함수를살펴본다. CHAPTER 16 SPI SPI(Serial Peripheral Interface) 는마이크로컨트롤러에서흔히사용되는시리얼통신방법중하나로, 고속의데이터전송에주로사용된다. 이장에서는 SPI 통신을통해시리얼통신을수행하는방법과 SPI 통신을사용하는외장 EEPROM 을제어하는방법을살펴본다. 또한아두이노에서 SPI 통신을위해제공하는 SPI 라이브러리와외장 EEPROM 제어를위한확장라이브러리의사용방법을살펴본다. CHAPTER 17 I2C I2C(Inter Integrated Circuit) 는마이크로컨트롤러에서흔히사용되는시리얼통신방법중하나로저속의데이터전송에주로사용된다. 이장에서는 I2C 통신을통해시리얼통신을수행하는방법과 I2C 통신을사용하는 RTC(Real Time Clock) 칩을제어하는방법을살펴본다. 또한아두이노에서 I2C 통신을위해제공하는 Wire 라이브러리와 RTC 제어를위한확장라이브러리의사용방법을살펴본다. CHAPTER 18 컴퓨터와의시리얼연결 ATmega328 은다양한방법으로컴퓨터와연결하여시리얼통신을수행할수있다. 이장에서는마이크로컨트롤러와컴퓨터를 RS232, UART, USB 등으로연결하고시리얼통신을수행하는방법을살펴본다. 마이크로컨트롤러와컴퓨터는여러가지방법으로연결될수있지만실제통신방식에서는약간의차이가있으므로시리얼통신을위해필요한변환장치들을살펴본다. III. ATmega328 활용하기 CHAPTER 19 7 세그먼트표시장치 7 세그먼트표시장치는 8개의 LED를숫자나간단한문자를표시할수있도록배치하여만들어진표시장치의일종이다. 이장에서는공통양극및공통음극방식 7 세그먼트표시장치의구조와제어방법을비교하여살펴본다. 또한네자리 7 세그먼트표시장치를제어하기위해잔상효과를이용하는방법과다양한정보를표시하는방법을살펴본다. 장별 안내 xix
CHAPTER 20 LED 매트릭스 LED 매트릭스는 LED를행렬형태로배열한표시장치로도트단위의제어가가능하여다양한내용을표시할수있다. LED 매트릭스는네자리 7 세그먼트표시장치와마찬가지로잔상효과를이용하여제어한다. 이장에서는 LED 매트릭스에서 LED의배열에따른양극방식과음극방식의차이를살펴보고, 행단위또는열단위스캔을통해 LED 매트릭스를제어하는방법을살펴본다. CHAPTER 21 텍스트 LCD 텍스트 LCD는문자단위의정보를표시하기위해사용되는출력장치의일종으로문자열표시를위해흔히사용된다. 이장에서는텍스트 LCD의구조및제어방법과다양한정보를텍스트 LCD에표시하는방법을살펴본다. 또한아두이노의기본라이브러리중하나로텍스트 LCD를제어하기위해사용되는 LiquidCrystal 라이브러리의사용방법을살펴본다. CHAPTER 22 키매트릭스키매트릭스는적은수의디지털핀을사용하여많은수의핀입력을받아들일수있는방법중하나로, LED 매트릭스의행또는열단위스캔과기본적으로동일한방식이사용된다. 이장에서는키매트릭스를구성하는방법과키매트릭스사용에서발생하는문제점및이를해결하는방법을살펴본다. 또한아두이노에서키매트릭스를제어하기위해사용할수있는확장라이브러리의사용방법을살펴본다. CHAPTER 23 DC 모터와서보모터모터는움직이는장치를구현하기위해필수적인부품중하나로, 360 를회전하는 DC 모터와일정각도범위에서만움직이는서보모터가마이크로컨트롤러와흔히사용된다. 이장에서는모터드라이버를사용하여 DC 모터를제어하는방법과 PWM 신호를사용하여서보모터를제어하는방법을살펴본다. 또한아두이노의기본라이브러리중하나로서보모터제어에사용되는 Servo 라이브러리의사용방법을살펴본다. CHAPTER 24 직렬입력병렬출력레지스터 74595 74595 직렬입력병렬출력레지스터는적은수의디지털핀으로많은수의디지털출력을사용하기위해흔히사용된다. 이장에서는 74595 칩의구조와제어방법을살펴보고, 74595 칩을통해많은수의 LED를제어하는방법을살펴본다. 또한여러개의 74595 칩을사용하여출력을확장하는방법을살펴본다. xx 장별 안내
CHAPTER 25 센서센서는다양한물리량을전기적인신호로변환하는장치로주변환경과상호작용하기위해마이크로컨트롤러의입력장치로흔히사용된다. 이장에서는아날로그데이터를출력하는온도센서와디지털데이터를출력하는초음파거리센서를통해데이터를획득하고이를처리하여처리결과에따라주변환경과상호작용하는시스템구축방법을살펴본다. CHAPTER 26 블루투스블루투스는 RS232 의유선연결을대체하기위해만들어진근거리무선통신표준중하나로최근스마트폰의보급에힘입어사용이증가하고있다. 이장에서는블루투스모듈을마이크로컨트롤러에연결하여설정하는방법과스마트폰에서마이크로컨트롤러와통신하기위한블루투스설정방법을살펴본다. 또한마이크로컨트롤러와스마트폰사이에무선통신을통한원격제어방법을살펴본다. CHAPTER 27 EEPROM 마이크로컨트롤러에는작은크기의비휘발성메모리인 EEPROM 이포함되어있다. EEPROM 은쓰기속도가느린단점이있지만, 비휘발성이라는특징으로프로그램의설정등을기록하기위해흔히사용된다. 이장에서는 ATmega328 에포함되어있는 EEPROM 을제어하는방법과아두이노에서내장 EEPROM 을제어하기위해제공하는 EEPROM 라이브러리의사용방법을살펴본다. CHAPTER 28 워치독타이머워치독타이머는다양한원인으로시스템에오류가발생하거나무한루프에빠지는등시스템이정상적으로동작하지않을때시스템을리셋시켜다시시작하도록하는기능을담당한다. 이장에서는 WinAVR 에서제공하는 WDT(WatchDog Timer) 라이브러리를이용하여워치독타이머를설정하고사용하는방법을살펴본다. CHAPTER 29 퓨즈비트 ATmega328 에는마이크로컨트롤러의동작환경을설정하기위해 3 바이트의메모리가존재하며, 이를퓨즈라고한다. 퓨즈는세가지, 즉확장퓨즈, 하이퓨즈, 로퓨즈로나뉘며, 퓨즈의각비트들은마이크로컨트롤러의특정기능을제어한다. 이장에서는퓨즈비트의의미와설정방법을살펴보고, 퓨즈설정과관련된하드웨어및소프트웨어도구들의사용방법을살펴본다. 장별 안내 xxi
Atmel Studio 6에대한설명이 Atmel Studio 6 유저가이드 라고연상될만큼자세하고꼼꼼하게기록된책입니다. 그뿐만아니라아두이노사용법모두가들어있다고해도과언이아니네요. ATmega128 을통해마이크로컨트롤러에입문한학생으로서 ISP 방식과시리얼방식을비교하는방식은 AVR 복습을하면서아두이노코드를자연스럽게이해할수있어서많은도움이되었습니다. 전공자나비전공자할것없이 ATmega328 프로그래밍에관심이있거나공부하고싶은사람이처음접하기에좋은책으로보입니다. 하지만어느정도어려움이있을수밖에없는주제라설명을제대로이해하기위해노력해야할것입니다. 주제별로개념과코드등에대한설명이자세하게되어있어서이해하기가쉬웠고, 연습문제를통하여배운내용을복습하고응용력을키울수있었습니다. 책의두께를보고두려워하지말고독자여러분도아두이노와아트멜스튜디오에과감히빠져보기를바랍니다. 새로나온 Atmel Studio 6의사용법과그문법에관하여자세히나와있고, 이를아두이노코딩과비교하여설명하고있어서쉽게이해할수있었습니다. 아두이노와 AVR 코딩을더욱심화하여학습할수있는좋은기회였던것같습니다. xxii 베타리더 후기
ATmega328 컨트롤러를이용하여아두이노스타일과 C 스타일의코딩방법을비교하면서서로의장단점을파악할수있었습니다. C 스타일코딩방식을통해레지스터를다루는방법이상세히설명되어있어서어려움없이이해할수있었고, 레지스터를조작하여제어하는방법을보면서는컨트롤러가어떻게동작하는지를알게되었습니다. 또한, 기본적인회로구성및설명이포함되어있어서하드웨어적인부분에서도적잖은도움이되었습니다. 아두이노를이제막접하시는분들은 아두이노상상을스케치하다 라는도서를먼저읽어보기를추천합니다. 그러고나서이책을보시면더쉽고재미있게아두이노프로그래밍을배울수있을겁니다. 아트멜스튜디오를설치하는것을시작으로누구나따라할수있도록설명이잘되어있습니다. 특히주변장치들을연결하는회로도가이해하기쉽게잘그려져있어서비전공자라도쉽게따라해볼수있을것같고, 마이크로컨트롤러의동작원리가자세하게설명되어있어서이책만제대로공부한다면마이크로컨트롤러를능숙하게다룰수있으리라봅니다. ( 이책의베타리더는동의대학교학부생과대학원생으로구성되었음을알려드립니다.) 제이펍은책에대한애정과기술에대한열정이뜨거운베타리더들로하여금출간되는모든서적에사전검증을시행하고있습니다. 베타리더 후기 xxiii
P A R T I ATmega328 프로그래밍준비하기
CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러! 학습목표 } } } } } } 마이크로컨트롤러의개념이해하기마이크로프로세서와마이크로컨트롤러의차이이해하기마이크로프로세서의장단점이해하기마이크로프로세서의용도이해하기시리얼통신방법과종류이해하기마이크로컨트롤러를위한프로그램개발방법이해하기 1.1 이책을읽고있다면마이크로컨트롤러에관심이있는독자임에틀림없으리라생각한다. 우선마이크로컨트롤러가무엇인지이야기하기전에마이크로컨트롤러가무엇이라고생각하는지스스로에게질문을던져보자. 무엇이가장먼저머리에떠오르는가? 실험시간에사용하던실험보드가생각날수도있고, 보드위에자리잡고있는칩이떠오를수도있다. 또는최근오픈소스하드웨어로주목을받고있는아두이노가생각날지도모르겠다. 마이크로컨트롤러 칩 - ATmega328 아두이노 우노 1 1 1 마이크로컨트롤러 마이크로컨트롤러를 이용한 학습 보드 2 3
마이크로컨트롤러 (microcontroller) 를한마디로표현하면 칩위의컴퓨터 라고말할수있다. 그림 1-1 에서첫번째그림이바로마이크로컨트롤러이다. 그림 1-1(b) 와 1-1(c) 의마이크로컨트롤러를이용하여만들어진보드역시마이크로컨트롤러라고부르는경우가있지만정확히이야기하자면이들은마이크로컨트롤러라기보다는 마이크로컨트롤러보드 에해당한다. 마이크로컨트롤러를어렵다고생각하는이유중하나는마이크로컨트롤러를처음접하는사람들에게주어지는, 부품이빼곡하게늘어서있는보드가큰이유중하나이다. 마이크로컨트롤러보드를마이크로컨트롤러로오해하기때문이다. 수십개의부품이늘어서있고수십개의연결핀이있는보드를처음받게되면무엇부터어떻게시작해야할지모르는것이당연하다. 하지만실제마이크로컨트롤러를사용하기위해필요한부품들은그리많지않다. 가장간단하게는마이크로컨트롤러에전원만연결하면동작한다. 컴퓨터본체에전원을연결하면컴퓨터가동작하는것과마찬가지로 ATmega328 의경우 5V 전원만연결해주면마이크로컨트롤러에설치된프로그램이실행된다. 간단하지않은가? 아두이노? AVR? ATmega328? 아두이노는 AVR을 이용하여 만든 마이크로컨트롤러 보드의 한 종류이다. AVR은 아트멜 (Atmel) 에서 제작하여 판매하는 마이크로컨트롤러 시리즈 중 하나를 가리키는 말로, 아두이노 우노 (Arduino UNO) 에 사용된 ATmega328 은 AVR 에 속하는 마이크로컨트롤러이다. 마이크로컨트롤러는 컨트롤 기능에 특화된 중앙 처리 장치 (CPU) 의 일종으로 칩 하나를 지칭하는 말이다. 아두이노 우노 보드가 옆에 있다면 보드 위에 있는 가장 큰 IC 칩을 살펴보자. Atmel 이라는 글자가 보이고 그 아래에는 ATMEGA328P-PU 라는 글자가 보인다. Atmel 은 ATMEGA328P-PU 마이크로컨트롤러를 만든 회사의 이름이며, ATMEGA328P-PU 는 아두이노 우노 보드에서 핵심적인 역할을 하는 마이크로컨트롤러이다. 아두이노 우노 보드에는 ATMEGA328P-PU 마이크로컨트롤러 이외에도 전원 연결 잭, USB 연결 잭, 버튼, 핀 연결을 위한 헤더 등 여러 가지 부품들이 있다. 아두이노 (Arduino) 란 마이크로컨트롤러뿐만 아니라 사용 편이를 위해 추가된 부품을 합한 보드 전체를 가리키는 말이다. 물론 아두이노는 하드웨어뿐만 아니라 소프트웨어 개발 환경까지도 함께 가리키는 말이지만 하드웨어 측면에서만 볼 때 아두이노는 마이크로컨트롤러가 아니라 마이크로컨트롤러 보드 라고 이야기하는 것이 옳다. 이처럼 아두이노와 AVR 그리고 ATmega328 은 정확히 이야기하자면 비교의 대상은 아니다. 아두이노는 AVR 시리즈의 마이크로컨트롤러를 사용하므로 AVR을 프로그래밍하는 것과 아두이노를 프로그래밍하는 것은 기본적으로 동일하다. AVR 을 위한 프로그램을 작성하는 환경에서 아두이노 프로그램을 작성할 수 있다. 예를 들어 AVR 프로그램을 작성하기 위해 흔히 사용되는 AVR 스튜디오 ( 또는 아트멜 스튜디오 ) 에서 아두이노에서 실행될 프로그램을 작성하고 이를 아두이노 보드에 업로드하여 실행시키는 것이 가능하다. 반대로 아두이노에서 제공하는 소프트웨어 개발 환경에서 AVR을 위한 프로그램을 작성하는 것도 역시 가능하다. 하지만 전자의 경우 모든 AVR 시리즈 마이크로컨트롤러를 지원하지만, 후자의 경우에는 모든 AVR 4 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
시리즈 마이크로컨트롤러를 지원하지는 않으며, 아두이노 보드에 사용된 마이크로컨트롤러, 예를 들어 아두이노 우노에 사용된 ATmega328, 아두이노 메가에 사용된 ATmega2560 등의 마이크로컨트롤러만을 지원한다. 따라서 학교에서 흔히 사용하는 AVR 시리즈 마이크로컨트롤러 중 하나인 ATmega128 을 아두이노 환경에서 프로그래밍하고자 한다면 번거로운 작업이 될 수 있다는 점을 염두에 두어야 한다. 아두이노 ( 마이크로컨트롤러 보드 ) ATmega328P-PU (AVR 시리즈 마이크로컨트롤러 ) 아두이노, AVR 그리고 ATmega328 3 마이크로컨트롤러는 하나의칩으로구현한컴퓨터 이다. 그다지컴퓨터와닮아보이지않겠지만컴퓨터와동일한구성으로컴퓨터와동일한동작을한다. 먼저친숙한컴퓨터부터살펴보자. 어디서나쉽게컴퓨터를찾아볼수있는이유도있겠지만컴퓨터는컴퓨터와대화할수있도록키보드, 마우스, 모니터등과연결되어있고멋진케이스속에들어가있어생소한전자부품들이눈에띄지않으므로편안하게느껴질수있다. 하지만컴퓨터에서키보드와마우스그리고모니터를제거해보자. 컴퓨터로무엇을할수있을까? 전원을연결하면컴퓨터가켜지는것은전원표시등으로유추해볼수있지만컴퓨터내부에서무슨일이벌어지고있는지는짐작하기어렵다. 멋진케이스도벗겨보자. 컴퓨터내부에는어떤것들이들어있나? 메인보드가보일것이고그위에장착된 CPU와메모리가보일것이다. CPU 위에올라와있는선풍기로사용해도무방할정도의팬이보이는가? 한쪽에는하드디스크와 DVD 드라이버가고정되어있다. 이외에전원공급장치, 비디오카드등이눈에들어온다. 어쩌면이모든것들을확인하기위해서는케이스내부의선들을먼저치워야할지도모른다. 마이크로컨트롤러에는멋진케이스가없다. 원한다면멋진케이스를만들어넣어줄수도있겠지만마이크로컨트롤러는대부분다른시스템의일부로포함되기때문에 [ 다른시스템의일부로포함되는것을임베디드 (embedded) 라이야기한다 ] 별도로케이스를만드는경우는흔하지않다. 마이크로컨트롤러에는모니터도, 마우스도, 키보드도없으므로내부에서무슨일이벌어 1.1 마이크로컨트롤러란 무엇인가? 5
지고있는지알수없다. 앞에서똑같은이야기를한것이기억나지않는가? 마이크로컨트롤러는주변장치를떼어내고케이스를벗겨버린컴퓨터와동일하다. 마이크로컨트롤러는컴퓨터이다. 다만주변장치가연결되어있지않으므로내부에서무슨일이벌어지고있는지알아내기위해서는 ( 키보드, 마우스에해당하는 ) 입력장치와 ( 모니터에해당하는 ) 출력장치를연결해주어야한다. 컴퓨터는이미입출력장치가포함된형태인반면마이크로컨트롤러는직접입출력장치를선택하여연결해주어야하고필요에따라서는새로운입출력장치들을만들어야하는경우도있다. 더어려운점이있다. 컴퓨터의입출력장치는완제품형태로판매되며동일한인터페이스로동작하므로컴퓨터에연결하는것만으로사용하는데크게어려움이없다. 대부분의키보드는 USB 포트에연결하는것만으로동작하며대부분의모니터는 HDMI 포트에연결하는것만으로동작한다. 하지만마이크로컨트롤러의입출력장치는여러가지방법으로연결할수있다. 간단한정보를표시해줄수있는 LCD 장치의경우만하더라도종류에따라다양한방법을사용하므로컴퓨터에모니터를연결하는것과같이커넥터를연결하는것만으로간단히동작시킬수는없다. 어렵게들리겠지만마이크로컨트롤러에서사용하는입출력방식의종류가그리많지않으므로익숙해지고나면그리어렵지않다. 더욱이마이크로컨트롤러에서사용하는대부분의주변장치들은몇개의입출력방식중하나를사용하므로서로다른종류의장치들도동일한방식으로제어가가능한경우도있다. 컴퓨터에서모니터와키보드는서로다른입출력방식을사용하지만마이크로컨트롤러에서는동일한방식으로데이터를주고받을수도있다. 마이크로컨트롤러는컴퓨터이다. 컴퓨터에비해연결방법이복잡하고귀찮아보이기는하지만입출력장치를연결함으로써마이크로컨트롤러는컴퓨터와동일한동작을수행할수있으며, 동일한방식을사용하는입출력장치들을연결함으로써컴퓨터보다더쉽게작은컴퓨터로서의기능을수행할수있도록할수도있다. 1.2 마이크로컨트롤러는주변장치를제거하고케이스를벗겨낸컴퓨터와동일하다. 먼저컴퓨터의구조를살펴보자. 컴퓨터는연산의핵심이되는연산장치와연산을제어하는제어장치로이루어지는중앙처리장치 (Central Processing Unit, CPU), 데이터입출력을위한입출력장치, 데이터저장을위한주기억장치및보조기억장치등으로구성된다. 6 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
메인 보드 중앙 처리 장치 연산 장치 입력 장치 제어 장치 출력 장치 주기억 장치 보조 기억 장치 1 2 컴퓨터의구성요소 집적회로기술의발달에힘입어컴퓨터의소형화및경량화가이루어졌고특히중앙처리장치는하나의칩으로구현이가능하게되었다. 이처럼컴퓨터의중앙처리장치를하나의 IC(Integrated Circuit) 칩으로집적시켜만든반도체소자를마이크로프로세서 (microprocessor) 라고부른다. 마이크로프로세서는 1969 년인텔 (Intel) 에서발표한 4비트마이크로프로세서인 4004에서부터시작되었다. 이후마이크로프로세서는비약적인발전을거듭하여 4004의경우 2,300 여개의트랜지스터를사용하여만들어진반면, 최신 Intel Core i7 마이크로프로세서는약 22억개의트랜지스터가사용되어 4004와비교할때약 100만배의트랜지스터가사용되는등하드웨어는기하급수적으로발전하고있으며, 이를설명하는법칙의하나가무어의법칙 (Moore s Law) 이다. 현재사용되고있는컴퓨터의대부분의중앙처리장치는마이크로프로세서로구현되고있다. 하지만마이크로프로세서는중앙처리장치의여러형태중한가지로모든마이크로프로세서는중앙처리장치이지만, 모든중앙처리장치가마이크로프로세서인것은아니다. 마이크로프로세서중하나의칩에중앙처리장치의기능뿐만아니라일정용량의메모리와입출력인터페이스까지내장한것을마이크로프로세서와구별하여마이크로컨트롤러라고부른다. 마이크로컨트롤러는그림 1-2 에서메인보드에해당하는기능과일부하드디스크의기능을하나의칩으로구현한것으로볼수있다. 마이크로컨트롤러는하나의칩에컴퓨터가가져야할대부분의기능을갖추고있으므로단일칩마이크로컴퓨터또는마이컴이라고도부른다. 마이크로프로세서가컴퓨터로동작하기위해서무엇이더필요할까? ( 입력장치인 ) 키보 1.2 마이크로프로세서? 마이크로컨트롤러? 7
드와마우스그리고 ( 출력장치인 ) 모니터만있다면컴퓨터로동작하기에아무런문제가없다. 하지만마이크로컨트롤러에키보드나모니터를연결하여사용하지는않는다. 불가능하지는않지만굳이연결하려고하지않는이유는마이크로컨트롤러는컴퓨터와는그사용목적이다르기때문이다. 키보드와모니터가필요하다면마이크로프로세서를사용하면된다. 마이크로컨트롤러 라는단어는 마이크로 + 컨트롤러 로이루어져있다. 마이크로 는작다는의미로하나의칩으로만들어져있어작고가벼움을의미한다. 컨트롤러 는제어기를뜻하며마이크로컨트롤러의주용도, 즉제어장치를만들기위한핵심부품으로마이크로컨트롤러가사용됨을의미한다. 마이크로컨트롤러는작고간단한제어장치를만들기위한목적으로특화된마이크로프로세서의한종류이다. 1.3 컴퓨터로무엇을할수있나? 웹브라우저를실행시켜온라인뉴스를읽고, 음악을듣고, 문서를작성하고, 가끔은게임도한다. 이러한작업을위해필요한입출력장치들이바로키보드, 마우스, 그리고모니터이다. 마이크로컨트롤러는컴퓨터이기는하지만우리가컴퓨터에서하는작업들을대신하기위해만들어진것은아니다. 컴퓨터로처리하는작업들을처리하기에마이크로컨트롤러는너무느리고용량도충분하지않다. 이책에서다룰마이크로컨트롤러인 ATmega328 을사용한아두이노우노와이글을작성하고있는컴퓨터와비교해보면메모리는약 25만분의 1, 속도는약 850분의 1에지나지않는다. 1 1 항목 아두이노우노 데스크톱컴퓨터 CPU ATmega328 Intel Core i7 비트 8 64 메모리 32Kbyte 8Gbyte 클록 16MHz 3.4GHz(Quad Core) 마이크로컨트롤러는일상생활에서흔히사용하는환경이아닌특수한환경에서사용할목적으로만들어진작고간단한컴퓨터이다. 마이크로컨트롤러를일반컴퓨터와비교했을때가지는장점중하나는저렴한가격에있다. Intel Core i7과비교했을때 ATmega328 은약 100분의 1 가격이면구입할수있다. 현관에사람이들어오면자동으로불이켜지는전등을만들기위해 100 8 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
만원에달하는컴퓨터를사용할필요는없지않은가? 작고값싼마이크로컨트롤러로도자동으로현관에불을켜는일은충분하다. 마이크로컨트롤러의성능이나쁘다고이야기하였지만이는컴퓨터와비교하였을때의이야기이지결코성능이나쁜것은아니다. ATmega328 의최대클록주파수는 20MHz 이다. 물론 Intel Core i7과비교한다면느린것이사실이지만하드디스크가대중화되기시작한시점에서소개된, 흔히 286 컴퓨터 라고불리던 AT(Advanced Technology) 컴퓨터의 80286 CPU 클록주파수가 20MHz 임을감안하면컴퓨터라고불러도손색이없을정도임을짐작할수있다. ATmega328 로도자동으로불이켜지는전등을만들기에는충분하다. 오히려 ATmega328 은지나치게성능이좋으며원한다면 1,000 원전후의더싼가격의마이크로컨트롤러를사용하여도가능하다. 마이크로컨트롤러는컴퓨터이다. 작고간단하고저렴한컴퓨터이긴하지만 1,000 원짜리컴퓨터에키보드와모니터를연결하여슈팅게임을즐기고자하는사람은없으리라생각한다. 물론마이크로컨트롤러중에는다양한기능과기가헤르츠 (GHz) 에달하는클록주파수를가진것도존재한다. 이러한고성능의마이크로컨트롤러는여전히 Intel Core i7보다는저렴하지만 1,000 원에구입할수는없다. 마이크로컨트롤러를어디에사용할수있을까? 작고간단한제어장치 를만들기위해사용할수있다. 마이크로컨트롤러에케이스를만들지않는이유는다른시스템의일부로포함되는경우가대부분이기때문이라고이야기하였다. 자동점등조명역시조명장치의일부분으로마이크로컨트롤러가들어간다. 이처럼다른시스템의일부로포함되는마이크로컨트롤러를 임베디드 (embedded) 되었다고이야기하며, 마이크로컨트롤러는임베디드영역에서중요한한부분을차지하고있다. 임베디드시스템에서또다른한부분을차지하는것은마이크로프로세서로, 마이크로프로세서로만들어지는임베디드시스템은크기만데스크톱컴퓨터와다를뿐데스크톱과완전히동일한컴퓨터에해당한다. 최근라즈베리파이 (Raspberry Pi) 4 를필두로주목받고있는싱글보드컴퓨터역시마이크로프로세서를사용한보드로임베디드시스템에서의응용이점차늘어나고있는추세이다. 마이크로컨트롤러의또다른장점중하나는다양한제품이존재한다는점이다. 마이크로컨트롤러에는 1,000 원이면구입할수있는제품이있는가하면그수십배가격에달하는것도있다. 이처럼다양한제품군은용도와목적에맞게필요로하는기능과성능을선택할수있는유연성을제공해준다. 1.3 마이크로컨트롤러는 어디에 사용할 수 있을까? 9
10 애초서로다른목적으로만들어진만큼마이크로컨트롤러를컴퓨터 ( 또는마이크로프로세서 ) 와 비교하는것은무의미할수도있다. 하지만마이크로컨트롤러와마이크로프로세서가차지하고 있는자리를이해하는것은필요하다. 마이크로컨트롤러는마이크로프로세서에비해다음과 같은장점또는특징이있다. 제품의소형화및경량화 : 마이크로컨트롤러는마이크로프로세서를사용하는컴퓨터의 메인보드에포함된대부분의기능을하나의칩에구현하고있어작고가벼운제어장치 를만들기위해사용할수있다. 저렴한가격 : 마이크로컨트롤러는집적도가낮고설계가간단하여마이크로프로세서에 비해가격이저렴하다. 또한마이크로컨트롤러는제어목적에필요한대부분의기능을 포함하고있어제어장치설계및제작과정이단순해지므로개발에필요한비용및시 간을줄일수있어완성된제품의가격경쟁력을높일수있다. 신뢰성향상 : 마이크로컨트롤러는제어장치구현에필요한대부분의기능을내장하고 있어시스템을구성할때필요로하는부품의수가적으므로고장이적고유지보수가 용이하다. 융통성 : 마이크로컨트롤러는전통적으로제어장치에서제어를위해필요한기능들을 하드웨어로구현하는것과달리제어기능들을소프트웨어적으로처리할수있도록해 줌으로써기능의변경이나확장에보다유연하게대응할수있다. 하지만마이크로컨트롤러가마이크로프로세서에비해가지는단점도분명존재한다. 처리능력 : 마이크로컨트롤러는단순화된저사양의마이크로프로세서에주변장치를통 합한형태로특수목적용으로만들어졌으므로일반적으로처리능력은마이크로프로 세서에비해떨어진다. 따라서마이크로컨트롤러는높은처리능력을필요로하는작업 에는적합하지않다. 많은데이터를빨리처리해야할필요가있다면마이크로프로세서 를사용하는것이바람직하다. 범용성 : 마이크로프로세서의경우일반적으로운영체제를통해다수의프로그램들을설 치하고실행시킬수있다. 하지만마이크로컨트롤러는특정작업을위한하나의프로그 램만을설치하고실행시킬수있다. 마이크로컨트롤러는전용의간단한제어장치를만들기위해사용할수있다. 1,000 원짜리마 이크로컨트롤러에서 100 만원짜리컴퓨터의성능을기대하지않는다면마이크로컨트롤러를사 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
용할수있는곳은많으며실제마이크로컨트롤러가사용된예를어렵지않게찾아볼수있다. 앞에서도이야기하였지만마이크로컨트롤러는임베디드시스템의일부로포함되어있어눈에띄지않아사용되고있다는사실을알아차리지못했을뿐이다. 표 1-2 는마이크로컨트롤러가실생활에서사용되고있는예를나타낸것으로이보다훨씬많은예들을어렵지않게주변에서찾아볼수있다. 1 2 분야의료교통감시가전음향사무자동차기타 예의료기 제어, 자동 심박계신호등 제어, 주차장 관리출입자 / 침입자 감시, 산불 감시에어컨, 세탁기, 전자레인지 CD 플레이어, 전자 타이머복사기, 무선 전화기엔진 제어, 충돌 방지게임기, 차고 개폐 장치 1.4 마이크로컨트롤러는하나의칩일뿐이다. 이책에서다루게될 ATmega328 마이크로컨트롤러의경우 28개의핀을가진약 3.5cm 1cm 크기의칩에불과하다. 사용의편이를위해보드위에빼곡히들여놓은부가장치들에지레겁을먹지만않는다면마이크로컨트롤러는 보기보다 어렵지않다. 인터넷에서아두이노우노보드의회로도를찾아보자. 그림 1-3 은공개된아두이노우노보드의회로도에서동작에필수적인부분들만표시한것으로, 실선으로표시된외부클록을위한회로와전원안정화를위한회로를제외하면나머지회로들은제거하여도마이크로컨트롤러가동작하는데지장이없다. 물론전원은 5V가주어진다고가정한경우이다. 다른회로들은컴퓨터와의연결을간편하게하고프로그램을다운로드할수있도록 USB 연결을지원하는회로, 어댑터에서전원을공급받기위한회로등이다. 컴퓨터에서프로그램을다운로드하기위해서는그림 1-3 에서점선으로표시된부분역시필요하며이는 ATmega328 의핀과커넥터를직접연결하여구성할수있다. 1.4 마이크로컨트롤러를 어떻게 공부해야 할까? 11
1 3 아두이노우노회로도 5 12 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
이책에서다루고자하는 ATmega328 을공부하기위해서는그림 1-3 에표시한기본회로만으로도가능하다. 기본회로를바탕으로여기에필요한입출력장치를하나씩추가해나가면서제어장치를구성해본다면보기보다마이크로컨트롤러가그리어렵지않다는것을알수있다. 한가지더필요한것이있다면컴퓨터에서프로그램을업로드하기위한 ISP(In System Programming) 장치로, ISP 장치는아두이노우노보드에도포함되어있지않으므로별도로구입하여야한다. 아두이노환경에서프로그램을다운로드하기위해서는일반적으로마이크로컨트롤러에서는사용하지않는 USB- 시리얼변환장치를사용해야한다. 그림 1-3 에서기본회로에포함되지않으면서거의절반을차지하는회로가 USB- 시리얼변환기능을위한것으로아두이노우노보드를사용한다면별도로구입할필요는없다. 하지만기본회로에서시작하고아두이노스타일로프로그램을다운로드해보고싶다면 USB- 시리얼변환장치역시필요하다. ISP 장치 1 4 프로그램업로드장치 USB- 시리얼 변환 장치 ATmega328 이마이크로컨트롤러중에서도간단한마이크로컨트롤러인것은사실이다. 학교에서교육용으로흔히사용되는 ATmega128 만하여도 64개의핀을가지고있어 ATmega328 에비해 2배이상핀의수가많다. 하지만 ATmega128 의속도와기능은 ATmega328 과거의동일하며단지동일한기능을가진핀의개수만늘어났을뿐이다. 다른마이크로컨트롤러의경우에도기본기능은 ATmega328 과크게차이가없으므로 28핀의소형마이크로컨트롤러로도마이크로컨트롤러의공부를시작하기에부족함이전혀없다. 1.4 마이크로컨트롤러를 어떻게 공부해야 할까? 13
1.5 마이크로컨트롤러는입출력장치가제거되고케이스가벗겨진컴퓨터이다. 이상태로는할수있는일이많지않지만, 주변장치와데이터를주고받음으로써작고느리기는하지만완전한컴퓨터로서동작시킬수있다. 먼저마이크로컨트롤러가데이터를주고받는방식에대해알아보자. 마이크로컨트롤러는디지털데이터를처리한다. 디지털데이터는영 (0) 과일 (1) 의값만을가지며주변장치와데이터를주고받는경우에도마찬가지이다. 주변장치와의데이터교환은마이크로컨트롤러의핀을통해이루어지며 ATmega328 의경우 28개의핀중 23개의핀을데이터교환을위해사용할수있으므로동시에최대 23비트의데이터를주변장치와교환할수있다. 즉, 핀하나는한번에 1비트의데이터교환이가능하다. 데이터를교환하는방식은 ATmega328 과주변장치사이에상호합의된방식으로행해져야하며이를프로토콜 (protocol) 이라고한다. 프로토콜에관해서는이책에서자세히다루지않을것이지만전송속도에관해서는주의하여야한다. 마이크로컨트롤러는대부분핀의개수가그리많지않으므로데이터교환을위한핀의개수가제한되어있다. ATmega328 의데이터핀 23개가많아보이지만작은크기의 LCD 화면을제어하기위해 10개이상의데이터핀이필요한경우도있으므로, LCD 화면하나만을연결하여도절반이상의입출력핀을사용하게되고사용가능한핀이부족하여원하는주변장치를연결할수없는경우가발생할수있다. 따라서마이크로컨트롤러에서는여러핀을동시에사용하여데이터를교환하는병렬방식보다는하나의핀을통해여러번에걸쳐데이터를교환하는시리얼방식이선호된다. ATmega328 의내부에서는데이터를고속으로전달하기위해한번에 8비트의데이터를병렬로전달한다. 하지만 CPU를벗어나면일반적으로데이터는직렬로 8번에나누어전달된다. 병렬과시리얼방식에서모두데이터는동기화가중요하며여기에전송속도가관련된다. CPU 내부에서데이터전달은메인클록에의해제어되고보내는쪽과받는쪽이동일한클록을공유하고있어문제가될경우는많지않다. 하지만주변장치와데이터교환이필요한경우보내는쪽과받는쪽이동일한속도로데이터를검사하지않으면잘못된정보가전달될수있다. 그림 1-5 는데이터핀으로디지털데이터를전달하는예를나타낸것이다. 14 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
1 0 1 초 2 초 송신 : 초당 1 비트 전송 01 0 1 수신 1 : 초당 1 비트 검사 01 0 0 1 1 1 5 시리얼데이터전송 수신 2 : 초당 2 비트 검사 0011 그림 1-5 에서송신장치는초당 1비트의데이터를보낸다, 즉, 데이터의전송속도가 1bps(bit per second) 이다. 수신장치역시 1bps 의속도로데이터를검사한다면수신되는데이터는 01 의 2비트가되겠지만, 1초에두번 (2bps 의속도로 ) 데이터를검사한다면수신되는데이터는 0011 로전혀다른데이터가된다. 따라서주변장치와정보를교환하고자한다면보내는속도와받는속도를일치시켜주어야하며이는동기화 (synchronization) 에서중요한부분을차지한다. 주변장치와정보를교환하는 약속 에도여러가지가있다. 대부분의마이크로컨트롤러가지원하며 ATmega328 에서도사용할수있는방식에는 UART, SPI, I2C 등이있다. UART(Universal Asynchronous Receiver/Transmitter) 는컴퓨터나기타주변장치의시리얼포트를이용하는시리얼통신방식이다. UART 시리얼통신에서는정보교환을위해송신과수신 2개의데이터핀연결을필요로하며송신과수신은동시에진행될수있는전이중 (full-duplex) 방식이다. UART 는동기화를위해별도의클록을전송하지않으므로통신이전에전송속도를동일하게설정하여야한다. UART 는한번에하나의장치만연결이가능한 1:1 통신방식으로마이크로컨트롤러에 UART 방식의주변장치를 2개연결하고자한다면 2개의 UART 포트가필요하다. 따라서여러개의주변장치를연결하기위해서는많은수의데이터핀이필요하다는등다른방식에비해단점이많지만간단하면서도오랫동안사용된방식으로많은주변장치들이지원한다는장점이있다. 1.5 주변장치와 어떻게 데이터를 교환하나? 15
SPI(Serial Peripheral Interface) 는짧은거리에서주변장치와고속으로정보를교환하기위해주로사용되며, 3개의데이터핀연결과 1개의제어핀연결, 즉총 4개의핀연결이필요하다. 3개의데이터연결핀중 2개는 UART 에서와마찬가지로데이터송수신을위해사용되며나머지하나는동기화를위한클록신호를보내기위해사용된다. SPI가 UART 와다른또한가지는동일한 SPI 포트를통해여러개의장치를연결하는 1:n 통신이가능하다는점이다. 이때하나의장치는마스터 (master) 로통신과정을책임지며다른장치들은슬레이브 (slave) 로동작한다. 동일한통신포트를통해여러개의슬레이브가연결되면특정장치를선택할수있는방법이필요하며 SPI에서는제어연결핀을통한하드웨어적인방식을사용한다. SPI는고속의데이터를안정적으로전달하고여러개의장치들이포트를공유할수있는장점은있지만제어핀의수가연결된장치의수에비례하여증가하는단점도있다. I2C(Inter-Integrated Circuit) 는짧은거리에서주변장치와저속으로정보를교환하기위해주로사용되며, 2개의데이터핀연결만을필요로한다. I2C는 SPI와마찬가지로 1:n 으로연결된마스터-슬레이브구조의통신방식이지만 SPI와몇가지다른점이있다. I2C에서사용하는데이터연결핀중실제로데이터전송에사용되는핀은하나이며, 다른하나는동기화를위한클록신호를위해사용된다. 따라서 I2C는위의두가지방법들과다르게송수신이동시에이루어질수없는반이중방식이다. 또한가지다른점은 1:n 연결에서장치구별을위해소프트웨어적인주소를사용하므로별도의제어핀연결은필요하지않다는점이다. 따라서 SPI와달리 I2C 장치의수가증가하여도필요로하는핀의개수는증가하지않는다. 1 3 UART SPI I2C 연결 방법 1:1 1:n 1:n 전송 방법 전이중 전이중 반이중 데이터 2개 2개 1개 동기 신호 - 1개 1개 연결선 제어 - 1 개 - 총 2 개 4 개 2 개 n 개 슬레이브 연결 2n 개 (3 + n) 개 2 개 16 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
마이크로컨트롤러 송신 1 수신 1 주변장치 1 수신 2 송신 2 UART 주변장치 2 마이크로컨트롤러 송신 수신 동기화 클록 주변장치 1 제어선 1 주변장치 2 제어선 2 SPI 마이크로컨트롤러 송수신 동기화 클록 주변장치 1 주변장치 2 I2C 1 6 통신방식 이러한데이터교환방식을통해마이크로컨트롤러는다양한주변장치와데이터를주고받음으로써완전한컴퓨터로동작할수있다. 마이크로컨트롤러가컴퓨터와같이키보드나모니터를입출력장치로사용하는경우는거의없다. 일반적으로마이크로컨트롤러는입력장치로다양한센서를사용하여주변데이터를수집하고이를처리하여또다른주변장치제어를위한신호를출력하는형태로구성된다. 또는수집된데이터를컴퓨터로전달하여컴퓨터에서전체적으로데이터를처리하고관리할수있도록도와주는역할을수행하게된다. 1.5 주변장치와 어떻게 데이터를 교환하나? 17
1.6 컴퓨터에서프로그램을작성하는경우를생각해보자. 먼저프로그램을작성하기위해컴파일러를설치해야하며, 코드를입력하고컴파일하여실행파일을만들어내야한다. 물론디버깅을위해서는모니터도필요할것이다. 마이크로컨트롤러의경우에키보드와모니터는없다는것을이미알고있다. 컴파일러의경우는어떠한가? ATmega328 에프로그램을저장할수있는메모리는 32Kbyte 에불과하다. 윈도우에서가장간단한프로그램중하나인메모장만하더라도그크기가수백킬로바이트에달하므로 ATmega328 에서실행하는것은불가능하다. 하물며프로그램을개발하기위해많이사용되는비주얼스튜디오 (Visual Studio) 의경우에는수백메가바이트의공간을필요로한다. 한마디로 ATmega328 에서프로그램을개발하는것은불가능하다. 따라서마이크로컨트롤러를위한프로그램은컴퓨터에서개발하고실행파일만마이크로컨트롤러에업로드하여설치하는과정을거친다. 이처럼프로그램이개발되는환경 ( 개발시스템, 컴퓨터 ) 과프로그램이실행되는환경 ( 목적시스템, 마이크로컨트롤러 ) 이서로다른경우를일컬어교차개발환경 (cross development environment) 이라한다. 개발된 기계어 파일을 업로드 교차 컴파일러가 설치된개발 시스템 1 7 교차개발환경 개발된 프로그램이 실행될목적 시스템 교차개발이가능하기위해서는개발시스템에서동작하면서목적시스템에서실행가능한기계어파일을생성할수있는교차컴파일러 (cross compiler) 가필요하며생성된기계어파일을목적시스템에설치할수있는방법이필요하다. ATmega328 을위한교차컴파일러에는아두이노 6 에서제공하는프로그램과아트멜 7 에서제공하는아트멜스튜디오등이있으며, 이책에서는이들두가지모두를사용해볼것이다. 이외에도몇가지다른교차컴파일러를사용할수있지만이책에서는다루지않는다. 교차컴파일러는 ATmega328 마이크로컨트롤러에서실행가능한실행파일, 즉기계어파일을생성해준다. 윈도우에서실행가능한기계어파일은확장자가 EXE 또는 DLL 인반면, ATmega328 에서실행가능한기계어파일은확장자가 HEX라는차이가있다. 18 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
기계어파일이생성되면이를마이크로컨트롤러에설치하는과정이필요하며, 이는시리얼통신을통해개발시스템에서마이크로컨트롤러로기계어파일을전송함으로써이루어진다. 이처럼실행가능한기계어파일을개발시스템에서목적시스템으로전송하여설치하는과정을 다운로드 또는 업로드 라한다. 다운로드는마이크로컨트롤러의입장에서개발시스템으로부터프로그램을가져오는것을, 업로드는개발시스템에서마이크로컨트롤러로프로그램을보내는것을중심으로이야기한다. 이처럼다운로드와업로드는정반대의의미이지만동일한방향의데이터흐름을가리키므로일반적으로동일한의미로사용되고있다. 업로드된프로그램은마이크로컨트롤러의메모리에설치되며마이크로컨트롤러에는일반적으로하나의프로그램만이설치될수있으므로마이크로컨트롤러에전원을인가하면간단한부팅과정을거쳐현재설치된프로그램이자동으로실행된다. 프로그램을업로드하기위해서는 UART 와 SPI 방식을사용할수있다. 아두이노에서는별도의추가장치없이프로그램을업로드하기위해 UART 방식을사용한다. 반면일반적으로마이크로컨트롤러프로그래밍에서는 SPI를통해프로그램을업로드하는 ISP(In System Programming) 또는 ICSP(In Circuit Serial Programming) 방식을사용한다. 이책에서는두가지방식모두를사용하여프로그램을업로드해볼것이다. 교차개발환경은스마트폰을위한어플리케이션개발에서도볼수있다. 스마트폰은마이크로프로세서 ( 또는어플리케이션프로세서 ) 를사용하지만스마트폰용운영체제에서는비주얼스튜디오와같은개발도구를제공하지않으므로컴퓨터에서어플리케이션을개발한후개발컴퓨터나장터에서어플리케이션을다운로드하고스마트폰에설치한다. 마이크로컨트롤러의경우와동일하지않은가? 물론스마트폰에는운영체제가있어여러개의프로그램을설치하고실행할수있다는점에서마이크로컨트롤러와는차이가있다. 1.7 어두워지면자동으로불이켜지는전등을만들고싶다고가정해보자. 마이크로컨트롤러가필요할까? 요구사항에따라달라지겠지만단순히어두워지면불이켜지는동작은마이크로컨트롤러없이도가능하다. 빛의양에따라저항이변하는조도센서를이용하면그림 1-8 의회로를통해어두워지면자동으로불이켜지게할수있다. 저항의값을조절하면불이켜지는시점의광량도조절할수있다. 1.7 마이크로컨트롤러가 꼭 필요한가? 19
1 8 스위칭회로를이용한자동점등회로 마이크로컨트롤러를이용해서도동일한동작을수행하도록구성할수있으며, 그림 1-9 는 ATmega328 마이크로컨트롤러를이용하여구성된회로의예이다. 1 9 마이크로컨트롤러를이용한자동점등회로 트랜지스터와저항만으로구성된그림 1-8 의회로에비해그림 1-9 의회로는마이크로컨트롤러를사용하므로가격이비싸고배선도복잡해보인다. 게다가프로그램을작성해서업로드해야하는등번거롭고아무런이점도없어보인다. 실제로이경우마이크로컨트롤러를사용하는경우의이점은없다. 그렇다면마이크로컨트롤러를사용할필요가없지않은가? 어두워지면불이켜지는간단한동작의경우마이크로컨트롤러를사용함으로써얻을수있는이점은거의없지만, 기능을변경하거나추가하고자한다면마이크로컨트롤러를사용하는장점을발견할수있다. 20 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
그림 1-8 의회로에서불이켜지기위한기준광량을바꾸고싶다면어떻게해야할까? 회로에서저항을다른크기의저항으로교체하면된다. 이를위해서는저항을떼어내고다른크기의저항으로교체하는등의작업이필요하다. 마이크로컨트롤러를사용한경우는어떨까? 프로그램에서임계치를조절하여프로그램을다시업로드하면된다. 마이크로컨트롤러를사용하는경우가간단하지않은가? 별반차이가없어보이는가? 기능을추가하는경우라면마이크로컨트롤러를사용하는이점이보다명확히나타난다. 그림 1-8 의회로에한번불이켜지면최소 10초는불이켜져있도록하고싶다면어떻게해야할까? 불이켜진시간을알아내기위해서는시간을알려주는부품이필요하고, 불이켜진시간을저장해놓기위해메모리가필요하고, 현재시간과저장된시간을비교하기위해비교기가필요하다. 이들부품을모두그림 1-8 의회로에추가하는것이가능하기는하지만이경우회로를완전히다시그려야할지도모르며완성된회로는그림 1-9 보다더복잡해질수있다. 이에비해마이크로컨트롤러를사용한회로는최소 10초동안불이켜져있도록하기위해변경이필요하지않다. 불이켜지는기준광량을바꾸는경우와마찬가지로프로그램수정만으로기능을추가할수있다. 바로여기에마이크로컨트롤러를사용하는이점이있다. 동일한입력 ( 광센서 ) 과동일한출력 (LED) 을가지는회로에서마이크로컨트롤러를사용하는경우프로그램수정만으로서로다른동작 (1 광량에따라점멸하는동작과 2 광량에따라점멸하면서불이켜졌을때최소 10초동안켜져있는동작 ) 을구현하는것이가능하다. 마이크로컨트롤러를사용함으로써얻을수있는장점을알수있겠는가? 1.8 마이크로컨트롤러는작고간단한컴퓨터이다. 컴퓨터에프로그램을설치하여다양한작업을수행할수있는것과마찬가지로마이크로컨트롤러에도프로그램을설치하여동일한하드웨어를이용하여서로다른작업을수행할수있다. 특히마이크로컨트롤러는제어장치를구성하기위한목적으로특화된컴퓨터로, 다양한제어장치를구성하기위해사용할수있다. 마이크로컨트롤러는컴퓨터이기는하지만흔히접하는데스크톱컴퓨터나노트북컴퓨터와는다르다. 마이크로컨트롤러로할수있는것과할수없는것을명확히구별하고, 하고자하는일에맞는마이크로컨트롤러를선택할수만있다면시작이반이라는말처럼이미문제의절반은해결된것이라하겠다. 1.8 요약 21
최근의사물인터넷붐은마이크로컨트롤러의활용가능성을더욱넓혀주고있으며, 아트멜이외의마이크로컨트롤러제조사들도사물인터넷을위한마이크로컨트롤러생태계구축에박차를가하고있다. 이책에서다룰 ATmega328 은아두이노우노에사용된마이크로컨트롤러로이미수많은아두이노우노가사용되고서로연결되고있어다른어느마이크로컨트롤러에비해서쉽게접근할수있다. 무엇을할지먼저결정하자. 하고자하는일이 ATmega328 로충분하다면이책을통해간단하게제어장치를만들고나아가다른기기들과연결될수있는방법을찾아낼수있을것으로기대한다. 연습문제 1 2 3 마이크로컨트롤러가 사용된 예는 표 1-2 에서 나열한 경우 이외에도 많다. 일상생활에서 사용하는 제품들 중에서 마이크로컨트롤러가 사용된 예를 찾아보자. 이 책에서 다루는 ATmega328 은 아트멜에서 제작한 8비트의 마이크로컨트롤러이다. 최근 마이크로컨트롤러의 사용 범위가 넓어지면서 16비트 또는 32비트의 고성능 마이크로컨트롤러의 사용 역시 증가하고 있으며, ARM에서 설계한 Cortex M3 가 32비트 마이크로컨트롤러를 위한 대표적인 아키텍처 중 하나이다. ATmega328 과 STM32F103(ARM 의 Cortex M3 아키텍처를 사용하여 STMicroelectronics 에서 제작한 마이크로컨트롤러 ) 마이크로컨트롤러의 장단점을 비교해 보자. 싱글 칩 컴퓨터 (single chip computer) 라고 불리는 마이크로컨트롤러는 컴퓨터이기는 하지만 성능이 낮으며, 하나의 프로그램만을 설치할 수 있다는 점에서 일반적인 데스크톱 컴퓨터와 다르다. 데스크톱 컴퓨터에는 미치지 못하지만 마이크로컨트롤러보다 높은 성능을 가지며 데스크톱 컴퓨터와 같이 운영체제를 바탕으로 동작하는 또 다른 종류의 컴퓨터인 싱글 보드 컴퓨터 (single board computer) 가 최근 임베디드 시스템 영역에서 마이크로컨트롤러와는 다른 영역에서 주목을 받고 있다. 싱글 칩 컴퓨터의 대표적인 예 중 하나라고 할 수 있는 아두이노와 싱글 보드 컴퓨터 중 가장 많이 판매된 라즈베리 파이 (raspberry pi) 8 를 비교해 보자. 22 CHAPTER 1 마이크로컨트롤러? 마이크로컨트롤러!
CHAPTER 2 메모리이야기 학습목표 } } } } } ATmega328 의메모리종류이해하기 ROM과 RAM의차이이해하기 ROM의종류와특성이해하기 EEPROM 과플래시메모리특성이해하기 DRAM과 SRAM의특성이해하기 메모리는컴퓨터에서프로그램이나데이터를저장하고실행시키기위해필요한핵심적인요소중하나이다. 메모리는저장장치 (storage) 의하나로컴퓨터에서는일반적으로칩형태로존재하며 내부저장장치 (internal storage) 라고도부른다. 반면 저장장치 는일반적으로디스크형태의외부저장장치를가리키며 외부메모리 (external memory) 라고도부른다. 이처럼메모리와저장장치는거의동일한의미로사용되지만일반적으로칩형태는메모리, 기계적인장치가필요한형태는저장장치라고구분하여사용된다. 마이크로컨트롤러에서는기계적인장치가필요한저장장치를사용하는경우는거의없으므로, 이장에서는마이크로컨트롤러에서흔히사용되는메모리를중심으로다양한메모리의종류와용도에대해알아본다. 2.1 ATmega328 컴퓨터가동작하기위해서는세가지메모리, 즉메인보드에추가로장착되는하드디스크와메인메모리, 그리고중앙처리장치 (CPU) 내에서연산을수행하기위해사용되는레지스터가필요하다. 이중레지스터는 CPU 내에포함되어있는메모리로 C/C++ 언어로프로그램을작성하는경우프로그래머가직접제어하는경우는흔하지않으므로제외하고하드디스크와메인메모리에대해서만이야기하도록하자. 23
마이크로컨트롤러는컴퓨터의메인보드에해당하는기능을하나의칩으로집약시켜놓은싱글칩컴퓨터 (single chip computer) 이므로 ATmega328 에도컴퓨터의하드디스크와메인메모리에해당하는메모리가필요하며, ATmega328 에는세종류의메모리, 즉플래시메모리, SRAM, EEPROM 이포함되어있어하드디스크와메인메모리의기능을담당하고있다. 하지만개수의차이에서도알수있듯이 ATmega328 의세종류메모리와컴퓨터의두종류메모리는 1:1 로대응하지는않는다. 이러한차이는일반적으로컴퓨터는폰노이만구조를따르는반면, 마이크로컨트롤러특히 ATmega328 은하버드구조를따르기때문이다. 그림 2-1 은폰노이만구조와하버드구조를비교한것이다. 컴퓨터의메모리에저장되는내용은크게두가지, 즉프로그램과데이터로나눌수있다. 프로그램과데이터는수학연산에서연산자와피연산자에해당한다. 1 + 2 라는명령을컴퓨터로실행하는경우연산자인 더하기 (+) 는프로그램에해당하며, 피연산자인 1 과 2 는데이터에해당한다. 폰노이만구조에서는프로그램과데이터가동일하게취급되므로동일한메모리에저장되고처리되는반면, 하버드구조는프로그램과데이터가서로다르게취급되므로서로다른메모리에저장되는차이가있다. 하버드구조는두종류의메모리를별도로관리해야하므로구조가복잡해지는단점이있지만동시에두곳에서자료를읽어올수있으므로폰노이만구조에비해속도가빠른장점이있다. 주소 버스 Memory CPU 데이터 버스 ( 명령어와 데이터 ) 폰 노이만 구조 Program Memory (PM) 주소 버스 데이터 버스 ( 명령어 ) CPU 하버드 구조 주소 버스 데이터 버스 ( 데이터 ) 2 1 폰노이만구조와하버드구조 Data Memory (DM) 표 2-1 은컴퓨터와마이크로컨트롤러에서의메모리를기능에따라요약한것이다. 폰노이만구조를따르는컴퓨터의경우메모리는전원이주어지지않는경우기록된내용이사라지는휘발성메인메모리와, 전원이주어지지않아도기록된내용이보존되는비휘발성메모리인하드디스크로나눌수있다. 반면하버드구조를따르는 ATmega328 의경우휘발성 / 비휘발성이외에도프로그램과데이터저장을위한메모리로나뉘는것을알수있다. 24 CHAPTER 2 메모리 이야기
2 1 ATmega328 메모리종류데스크톱컴퓨터의메모리 ATmega328 의메모리 프로그램 메모리 데이터 메모리 프로그램이 설치되는 메모리 하드디스크 플래시 메모리 프로그램이 실행되는 메모리 메인 메모리 (DRAM) 플래시 메모리 연산 결과 데이터가 임시 저장되는 메모리 메인 메모리 (DRAM) SRAM 연산 결과 데이터가 영구 저장되는 메모리 하드디스크 EEPROM 2.2 ROM RAM 메모리는크게두종류, 즉 ROM과 RAM로나눌수있다. ROM은 Read Only Memory 의약어로, 이미기록된내용을읽기만할수있고쓰거나지울수는없는메모리를말한다. 컴퓨터의부팅과정에서사용되는정보를저장하고있는 BIOS 칩이 ROM에해당되며, 그크기는수메가바이트정도이다. BIOS 는기본입출력시스템 (Basic Input/Output System) 의약어로컴퓨터의하드웨어요소들을검사하고운영체제를시작하는역할을담당한다. BIOS 의내용은컴퓨터생산과정에서결정되며제조사에서 ROM의형태로만들어메인보드에장착한다. 하지만최근의 BIOS 는제한된횟수의지우고쓰기가가능한형태로제작되어수정이가능하다. 컴퓨터뿐만아니라휴대용 MP3 플레이어와같은장치에서도기기의초기구동과정과동작을담당하는프로그램을 ROM으로만들고 펌웨어업그레이드 를통해 ROM의내용을수정하여기능을개선할수있도록하고있다. 이처럼 ROM은더이상읽을수만있는메모리가아니며, ROM이 RAM 과다른점은전원공급이중단되어도내용이사라지지않는비휘발성메모리라는점이다. 물론 ROM의내용을바꾸는것이가능하기는하지만 RAM에비해많은시간과비용이들며수정할수있는횟수도제한되어있다. RAM은 Random Access Memory 의약어로단어의미를그대로번역하면 임의접근방식메모리 정도가되겠지만실제로는자유롭게읽고쓸수있는메모리를말한다. 임의접근방식은순차접근방식 (sequential access) 과비교되는방법으로카세트테이프와같이기록된순서로만데이터를읽는메모리와비교하기위해처음사용된용어이다. 하지만현재는 RAM이고유명사로정착되어 ROM과대비되는메모리를지칭하는단어로사용되고있다. 앞서도언급한바와같이 ROM 역시 RAM에비해제약이있기는하지만자유롭게읽고쓸수있으므로 RAM이 ROM과다른점은휘발성에서찾아야한다. RAM은전원공급이중단되면저장된내용은사라진다. 따라서 RAM은컴퓨터가동작하고있는동안변하는값들을기록하기위한메인메모리로사용 2.2 ROM 과 RAM 25
되며, CPU 내부의레지스터역시 RAM 의한종류에해당된다. 표 2-2 는 ROM 과 RAM 의일반 적인특징을비교한것이다. 2 2 ROM RAM ( 쓰기가능한 ) ROM RAM 읽기 속도 빠름 빠름 쓰기 속도 느림 빠름 휘발성 수명 제한적 반영구적 2.3 ROM 초기에 ROM은위에서설명한것처럼제조사에서미리내용을기록시켜놓고변경할수없도록만들어졌으며이를마스크롬 (Mask ROM) 이라한다. ROM 제작에사용된데이터에오류가있다고생각해보자. 오류를수정하기위해서는칩자체를교환하여야하며, 칩을다시생산하기위해서는생산라인을수정해야하는등비용이많이든다. 이러한단점으로인해마스크롬은더이상제조되지않으며내용을지우고다시쓸수있는 ROM으로대체되었다. 내용을지우고다시쓸수있다면 ROM의정의와는달라지지만비휘발성메모리라는점은동일하므로아직도 ROM으로불리고있다. ROM의특징중하나는쓰기횟수에제한이있다는점이다. 전원이공급되지않아도 ROM에저장된내용을유지하기위해서는물리적인변형을가해야하며이러한변형은기록된내용을지운다고해서원상태로복구되지는않는다. 따라서일정횟수이상 ROM의내용을지우고다시쓰면 ROM은더이상사용할수없다. 지우개에글씨를새겼다가평평하게깎은후다시글씨를새기는과정을반복하면결국지우개는모두없어지고더이상글씨를새길수없는것과비교해볼수있다. 내용을기록할수있는 ROM 중처음소개된 ROM은 PROM(Programmable ROM) 이다. PROM 은내용이기록되지않은상태로생산되고, 전용장치인롬라이터를통해내용을 1회기록할수있다. PROM 에비트를기록하는각셀에는퓨즈가포함되어있고일정수준이상의전류를흘려퓨즈를끊는방식으로정보를기록한다. 26 CHAPTER 2 메모리 이야기
PROM을개선하여여러번지우고쓰기가가능한 ROM이 EPROM(Erasable PROM) 이다. EPROM 의윗면에는자외선을잘통과시키는석영유리창이나있고, 이창을통해자외선을쐬면기록된내용을지울수있다. 내용을지우기위해서는전용장치인롬이레이저를사용하지만, 태양빛에도자외선이포함되어있어오래방치해두면자연적으로기록된내용이사라질수있다. 따라서 EPROM 에내용을기록한후에는창을검정색테이프로막아자연상태에서내용이지워지지않도록한후사용하였다. EPROM 이전용장치를필요로하는단점을개선하여만들어진 ROM이 EEPROM(Electrically EPROM) 으로전기신호를이용하여내용을지우거나기록할수있다. EEPROM 의읽기동작은메모리중가장빠른속도를보이는 SRAM과거의비슷하지만, 쓰기동작은밀리초단위의시간이필요하므로쓰기동작이빈번한메인메모리용도로는적합하지않다. EEPROM 은내용을한번저장하면오랜시간동안이를기억하고읽기용도로만사용하는경우에주로사용된다. 플래시메모리가출시된이후사용빈도가줄어들고는있지만플래시메모리에비해적은용량의메모리는가격이싸고제어가간단하기때문에가전제품, 컴퓨터의 BIOS 칩등에아직도사용되고있다. ATmega328 에도 1Kbyte 의 EEPROM 이포함되어있어프로그램의실행옵션이나상태등을저장할수있다. 2.4 플래시메모리 (flash memory) 는 EEPROM 의변형으로 1984년도시바에서처음만들어졌다. EEPROM 은바이트단위로데이터를읽거나쓸수있다. 플래시메모리역시바이트단위읽기가가능하다는점에서는 EEPROM 과동일하지만, 블록단위의쓰기만가능하다는점에서 EEPROM 과차이가있다. 블록의크기는제조사나메모리용량에따라다르지만일반적으로 64byte 에서 128Kbyte 사이의크기가사용된다. 플래시메모리는블록단위의쓰기만가능하다는단점이있지만 EEPROM 에비해구조가간단하므로대용량메모리를만들기에적합하고, 블록전체를쓰는시간은 EEPROM 에서한바이트의데이터를쓰는시간과유사한수밀리초정도가소요되므로대용량의데이터를기록할때에는 EEPROM 보다빠른장점이있다. 이러한장점으로인해 1988 년상업용플래시메모리가처음소개된이후사용량이증가하여 USB 메모리를포함하여대부분의휴대용장치에서는플래시메모리가사용되고있다. 하지만플래시메모리는블록단위의쓰기를시행하므로일반적으로 EEPROM 에비해쓰기가능한횟수가적다. 2.4 플래시 메모리 27
ATmega328 에포함되어있는 EEPROM 의경우 100,000 회쓰기를보장하는반면, 플래시메모리는그 1/10 인 10,000 회쓰기만을보장한다. 플래시메모리는내부구조에따라크게두가지, 즉 NOR 형과 NAND 형이있다. NOR 형은메모리에서직접코드를실행하는어플리케이션에서 EEPROM 을대체하기위해설계되었다. 따라서 NOR 형플래시메모리는임의접근방식에서읽기시간을최소화하는구조로만들어졌다. 반면 NAND 형플래시메모리는대용량데이터를저장하기위해설계되어읽기속도는 NOR 형에비해느리지만지우고쓰는속도는 NOR 형보다빠르다. 또한 NAND 형플래시는집적도가높아 NOR 형플래시에비해가격이약 40% 저렴하여대용량저장장치에주로사용된다. 최근하드디스크의대안으로떠오르고있는 SSD(Solid State Disk) 역시 NAND 형플래시메모리로만들어진다. ATmega328 에서프로그램을저장하기사용되는메모리역시 32Kbyte 크기의플래시메모리이다. 2.5 SD SD(Secure Digital) 카드는플래시메모리를사용하여만들어진외부저장장치표준의하나이다. SD 카드는 NAND 플래시메모리와메모리에데이터를읽고쓰는과정을제어하는컨트롤러로구성되며, 스마트폰, 디지털카메라, 태블릿컴퓨터등휴대용장치에널리사용되고있다. 2005 년발표된 SD 카드는 1997 년발표된 MMC(Multi Media Card) 의데이터핀수와동작클록을보완하여만들어졌다. MMC의규격이개정되면서 SD 카드의기능상의장점을찾기는어렵지만, MMC를사용하는기기를찾아보기도어렵다. 하지만칩형태로제작된 emmc(embedded MMC) 는휴대용기기에서탈부착이불가능한저장용메모리로널리사용되고있다. MMC와 SD 카드의표준은거의흡사해서일부 SD 카드리더기에서는 MMC도읽을수있다. 하지만 MMC 리더기에서 SD 카드를읽을수는없다. MMC와 SD 카드가 NAND 형플래시메모리를기반으로만들어진저장장치의표준이라면, CF(Compact Flash) 는 NOR 형플래시메모리를기반으로만들어진저장장치표준의하나로아직도일부디지털카메라에서사용되고있다. SD 카드는최대 2Tbyte의용량을가질수있으며 2Gbyte 이하의용량을표준 SD 또는 SDSC(Standard Capacity), 4Gbyte 에서 32Gbyte 까지의용량을 SDHC(High Capacity), 그이상을 SDXC(eXtended Capacity) 로구별하여부르고있다. SD 카드는그크기별로세가지종류, 즉 SD, 미니 SD, 마이크로 SD가있으며, 휴대용기기에서는마이크로 SD 카드가주로사용되고있다. 28 CHAPTER 2 메모리 이야기
SD 미니 SD 마이크로 SD 2 2 SD 카드 9 아두이노에는 SD 카드를사용하기위한하드웨어를기본으로포함하고있지는않지만 SD 카드를사용하기위한 SD 라이브러리는기본으로제공하고있어대용량데이터를저장해야할경우사용할수있다. SD 라이브러리는 FAT16 과 FAT32 파일시스템을지원하며, 사용할수있는카드의용량은최대 32Gbyte 로표준 SD 카드와 SDHC 카드를사용할수있다. 2.6 emmc 아두이노의경우외부저장장치를포함하고있지않지만최근발매되고있는싱글보드컴퓨터의경우외부저장장치로 emmc를포함하고있는경우를종종볼수있다. emmc는 embedded Multi Media Card의약자로 SD 카드와마찬가지로메모리컨트롤러와플래시메모리로구성되며, 하나의칩으로만들어보드에장착하여사용한다. 스마트폰등모바일기기에서탈착이불가능한저장용메모리에 emmc가사용되며, 싱글보드컴퓨터중하나인비글본블랙 (BeagleBone Black) 에도 4Gbyte 의 emmc가저장장치로포함되어있다. emmc 2 3 비글본블랙 10 2.6 emmc 29
2.7 SSD emmc가임베디드시스템에서상대적으로적은용량의저장장치로사용된다면, SSD(Solid State Drive) 는대용량의고속저장장치로하드디스크를대체하기위해사용된다. 전통적인기계식동작을기반으로하는하드디스크에비해 SSD는기계적인장치없이동작하므로빠른속도와높은안정성을가지고있으며, 소음, 발열, 전력소모등이적고소형화, 경량화가가능하다는등여러면에서장점이있다. SSD는크게세부분, 즉데이터저장을위한플래시메모리, 데이터교환을제어하는컨트롤러, 캐시메모리역할을하는 DRAM으로구성되어있다. SSD는플래시메모리를바탕으로하므로쓰기횟수에제한이있다. 일반적으로 SSD는일상적인사용에서 10년이상의수명을보장하는것으로알려져있으므로빈번한쓰기작업이발생하는환경이아닌경우에는수명걱정을할필요는없다. 또한동일한위치의반복적인쓰기를감소시키는균등분배기술 (wear leveling), 비트오류의복구가가능한오류정정알고리듬의채택등으로수명은더늘어나고있다. 2.8 DRAM SRAM 지금까지살펴본메모리들은비휘발성메모리인 ROM으로쓰기에비해읽기가빈번한경우에적합하다. 하지만 CPU에서연산이수행되는경우잦은쓰기는피할수없으며이때사용되는메모리가컴퓨터에서흔히메인메모리라고불리는 RAM이다. RAM은크게동적 RAM(Dynamic RAM, DRAM) 과정적 RAM(Static RAM, SRAM) 두가지로나눌수있다. 동적과정적의차이는전원이공급되고있는동안기록된데이터가보존되는지여부에있다. SRAM은플립플롭을바탕으로만들어진메모리로한번기록된데이터는전원이공급되는동안계속남아있다. 반면 DRAM은커패시터에전하를저장하는방식으로데이터를기록하므로일정시간이지나면방전으로인해데이터가사라진다. 따라서 DRAM은일정시간간격으로커패시터를재충전하여야하며, 이를리프레시 (refresh) 라고한다. SRAM은 DRAM에비해최대 20배이상의속도로동작할수있지만집적도가낮고가격이비싸대용량의메모리를만들기에는적합하지않다. 따라서 CPU 내의레지스터나캐시메모리등작은크기의고속메모리에주로사용된다. 반면 DRAM은구조가간단하여집적도를높이기가용이하고소비전력이적어메인메모리로주로사용된다. ATmega328 에는 SRAM이포함되어있으며 DRAM은사용되지않는다. 30 CHAPTER 2 메모리 이야기
2 3 SRAM DRAM SRAM DRAM 읽기 / 쓰기 속도 빠름 느림 리프레시 집적도 낮음 높음 가격 비쌈 쌈 최근사용되고있는메모리의대부분은 DDR SDRAM 이다. SDRAM 은 Synchronous DRAM의약자로클록에동기화하여동작하는동기식 DRAM을말한다. SDRAM 은인텔의펜티엄 CPU 발표당시 CPU 클록과메모리동작을동기화시켜 DRAM의성능을개선하기위해만들어졌다. 하지만이후더높은클록의 CPU가발표되었지만메모리의속도는이를따라가지못하게되어 CPU와메모리의속도차이는증가하게되었고이를해결하기위한방법으로도입된것이 DDR(Double Data Rate) 이다. DDR 은 SDR(Single Data Rate) 과대비되는개념으로, SDR은각클록펄스의상승또는하강시점에서한번만정보를전송하는것을의미한다. 이에비해 DDR 은상승및하강시점에서정보를두번전송함으로써동작주파수의증가없이전송속도를 2배까지상승시킬수있는방법이다. DDR 의동작주파수를높이고소비전력을줄이는등의개선을통해 DDR2, DDR3 등이발표되었으며, 이들은이전방법에비해최대 2배의전송속도를얻을수있다. 하지만하위호환성이없으므로함께사용할수는없다. 현재시중에서판매되는메모리는 DDR3 가주종을이루고있으며, DDR2 와 240 핀으로핀수가동일하지만홈의위치가달라쉽게구별할수있다. DDR 메모리역시그크기는 DDR2 나 DDR3 와동일하지만핀수가 184핀으로적고홈의위치도다르다. DDR 메모리는현재거의사용되지않는다. DDR DDR2 DDR3 cm 0 5 7 10 2 4 DDR 메모리비교 2.8 DRAM 과 SRAM 31
DDR SDRAM은메모리의동작특성을나타내는것으로그림 2-4에나타낸크기와홀의위치등은 DIMM(Dual In-line Memory Module) 규격에의해정의된다. DIMM은여러개의 DRAM 칩을기판위에탑재하여메모리모듈을제작하는방법에관한규격또는그규격에따라제작된메모리모듈을가리킨다. 메인보드에 DIMM 메모리를장착할수있도록만들어진슬롯은 DIMM 소켓또는 DIMM 슬롯이라고불린다. 노트북이나소형컴퓨터등의경우에는일반적인 DIMM보다작은크기인 SO(Small Outline) DIMM 메모리가사용된다. SO DIMM의크기는 DIMM의절반정도이며, 핀의수역시 DDR 과 DDR2는 200핀, DDR3 은 204핀으로 DIMM과차이가있다. SO DIMM DDR SO DIMM DDR2 SO DIMM DDR3 cm 0 2 5 6.76 2 5 SO DIMM 메모리비교 2.9 폰노이만에의해메모리저장방식의범용컴퓨터가제안되면서메모리는현대컴퓨터의기본구조로자리잡게되고중앙처리장치와더불어컴퓨터의핵심적인요소중하나가되었다. 메모리는데이터를기록하고보존하는방식에따라 ROM과 RAM으로나뉜다. 이중 ROM은기술발전에힘입어쓰기가가능하게됨으로써다양한형태의메모리가개발되어사용되고있다. 그림 2-6은현재널리사용중인메모리의종류와관계를요약한것이다. 32 CHAPTER 2 메모리 이야기
마스크 ROM 메모리 ROM PROM EPROM EEPROM 플래시 메모리 NAND 형 NOR 형 RAM DRAM SRAM 2 6 메모리의종류 ATmega328 의경우데스크톱컴퓨터와는다른구조를채택하고있으므로사용되는메모리의종류와용도가데스크톱컴퓨터와는차이가있다. 하지만 ATmega328 이채택하고있는하버드구조역시데스크톱컴퓨터에서채택하고있는폰노이만구조의변형에해당하므로이들구조사이의관계역시이해하고있어야할것이다. 연습문제 1 2 3 중앙 처리 장치에서 사용하는 명령어의 구성에 따라 중앙 처리 장치는 CISC(Complex Instruction Set Computer) 와 RISC(Reduced Instruction Set Computer) 로 나뉜다. CISC/RISC 와 폰 노이만 / 하버드 구조는 서로 다른 관점에서 중앙 처리 장치를 나누는 기준이지만 RISC 는 하버드 구조와 함께 사용되는 경우를 흔히 볼 수 있다. RISC 와 하버드 구조가 함께 사용되는 이유는 무엇인지 알아보자. ATmega328 에는 두 종류의 ROM, 즉 플래시 메모리와 EEPROM 이 포함되어 있으며, 이들은 각각 프로그램과 데이터 저장을 위한 용도로 사용된다. 플래시 메모리는 프로그램을 저장하기 위해, EEPROM 은 데이터를 저장하기 위해 사용되는 이유는 무엇인지 알아보자. SD 카드, emmc, SSD 등은 모두 플래시 메모리를 바탕으로 만들어진 메모리 장치이다. 이들은 모두 동일한 형태의 메모리에서 출발하여 응용 분야에 맞게 발전된 형태로 볼 수 있다. 최근 다양한 플래시 메모리 기반의 메모리 장치들을 표준화하기 위한 새로운 포맷으로 UFS(Universal Flash Storage) 가 주목을 받고 있다. UFS 가 다른 메모리 장치와 다른 점은 무엇인지 알아보자. 연습문제 33