이미 소장하고 있다면 판매해 보세요.
|
제1부 AVR ATmega128 마이크로컨트롤러
CHAPTER 01 개요··································································································· 3 CHAPTER 02 미리 알아두어야 할 일반적 사항····················································· 7 2.1 이진수(Binary Number), 16진수(Hexadecimal Number) ···································· 7 2.2 데이터의 단위····································································································· 9 2.3 데이터의 표시··································································································· 10 2.4 보수를 사용한 음수의 표시·············································································· 11 2.5 오버플로와 언더플로························································································· 14 2.6 마이크로컴퓨터의 구조····················································································· 16 2.7 메모리················································································································ 18 2.8 CPU와 메모리의 데이터 교환·········································································· 21 2.9 CPU와 입출력 장치의 데이터 교환································································· 22 2.10 메모리 액세스의 구조····················································································· 22 2.11 프로그램의 수행 및 프로그램 언어······························································· 24 CHAPTER 03 AVR ATmega128 마이크로컨트롤러········································ 29 3.1 ATmega128의 특징··························································································· 29 3.2 핀의 기능·········································································································· 32 3.3 레지스터············································································································ 34 3.4 메모리················································································································ 36 3.4.1 In-system Reprogrammable FLASH 프로그램 메모리························· 36 3.4.2 데이터 메모리························································································ 37 3.4.3 EEPROM 메모리··················································································· 39 CHAPTER 04 ATmega128 보드········································································ 43 4.1 실습 보드·········································································································· 43 4.2 AVR Programmer ······························································································ 47 CHAPTER 05 개발 환경························································································ 49 5.1 개발에 필요한 소프트웨어················································································ 49 5.2 Atmel Studio 7 설치························································································ 51 5.3 프로그램 개발 과정·························································································· 52 5.4 WinAVR 컴파일러···························································································· 53 5.4.1 데이터 형······························································································· 53 5.4.2 I/O 레지스터 읽기/쓰기········································································· 54 5.5 Atmel Studio 7 사용하기················································································· 55 5.5.1 프로젝트 만들기···················································································· 55 5.5.2 프로젝트에 파일 추가/삭제/수정하기···················································· 60 5.5.3 프로젝트 컴파일/빌드하기····································································· 63 5.5.4 타깃 보드에 프로그램 다운로드··························································· 64 5.5.5 타깃 보드의 Fuse 세팅········································································· 66 5.6 타깃 보드 설치 및 실습 회로 구성································································· 67 제2부 C-언어를 사용한 마이크로컨트롤러 활용 기초 CHAPTER 06 입출력 포트(I/O Ports) ······························································· 71 6.1 LED 점등 회로 및 스위치 입력 회로····························································· 71 6.1.1 LED 점등 회로······················································································ 71 6.1.2 스위치 입력 회로·················································································· 72 6.2 입출력 포트 관련 레지스터·············································································· 73 6.3 단순 LED 점등 실습························································································ 77 6.4 패턴을 변경해 가면서 LED 점등···································································· 81 6.5 라이브러리 함수를 사용한 시간 지연 함수 구성············································ 89 x 6.6 스위치 입력 실습······························································································ 93 6.7 도트 매트릭스에 글자 표시하기····································································· 100 CHAPTER 07 인터럽트(Interrupt) ·································································· 103 7.1 인터럽트 메커니즘·························································································· 103 7.2 ATmega128의 인터럽트·················································································· 105 7.2.1 인터럽트 벡터······················································································ 105 7.2.2 인터럽트의 허용/금지·········································································· 107 7.2.3 인터럽트 처리 과정과 인터럽트 플래그(flag) ···································· 107 7.3 WinAVR에서 인터럽트 사용·········································································· 108 7.4 외부 인터럽트································································································· 109 7.5 인터럽트를 사용한 LED 패턴 이동······························································· 112 7.5.1 스위치 인터럽트를 사용한 LED 패턴 이동(I) ··································· 112 7.5.2 스위치 인터럽트를 사용한 LED 패턴 이동(II) ·································· 123 CHAPTER 08 타이머/카운터(I) : 8비트 타이머/카운터···································· 129 8.1 ATmega128의 타이머/카운터·········································································· 129 8.2 Pulse Width Modulation(PWM) 신호····························································· 129 8.3 8비트 타이머/카운터 0과 타이머/카운터 2 ···················································· 131 8.3.1 8비트 타이머/카운터 0, 2의 개략도··················································· 131 8.3.2 관련 레지스터······················································································ 133 8.3.3 동작 모드····························································································· 138 8.4 8비트 타이머/카운터 실습·············································································· 143 8.4.1 주기적으로 LED 패턴 이동하기························································· 143 8.4.2 PWM 신호로 LED 밝기 조절하기····················································· 151 CHAPTER 09 7-세그먼트의 동적 표시····························································· 155 9.1 동작 원리········································································································· 155 9.2 쌍극 트랜지스터를 사용한 스위칭································································· 157 9.3 7-세그먼트의 동적 표시·················································································· 158 9.4 동적 표시 프로그램 I ····················································································· 161 9.5 동적 표시 프로그램 II-타이머/카운터 인터럽트 사용··································· 171 xi CHAPTER 10 스위치 조작 및 키패드 입력························································ 179 10.1 푸시 버튼 조작······························································································ 179 10.1.1 버튼 조작 프로그램(I) ····································································· 179 10.1.2 버튼 조작 프로그램(II) ···································································· 189 10.2 키패드 입력받기···························································································· 194 10.3 엔코더 스위치 입력받기··············································································· 203 10.3.1 증분형 로터리 엔코더(Incremental Rotary Encoder) ························ 203 10.3.2 엔코더 스위치 입력 받기·································································· 204 CHAPTER 11 Liquid Crystal Display(LCD) 장치···································· 213 11.1 개요················································································································ 213 11.2 HD44780 LCD 드라이버·············································································· 214 11.2.1 내부구조··························································································· 214 11.2.2 LCD 명령························································································· 218 11.2.3 LCD 인터페이스·············································································· 218 11.2.4 초기화······························································································· 220 11.3 LCD 제어 프로그램······················································································ 221 11.3.1 모듈화 프로그래밍··········································································· 221 11.3.2 프로그램 설계·················································································· 222 11.3.3 내부 함수 작성················································································ 223 11.3.4 LCD 모듈 함수 작성······································································· 228 11.3.5 파일 작성························································································· 235 11.4 실습················································································································ 241 CHAPTER 12 타이머/카운터(II) : 16비트 타이머/카운터································· 247 12.1 16비트 타이머/카운터 1과 타이머/카운터 3 ················································ 247 12.1.1 16비트 타이머/카운터의 개략도······················································ 248 12.1.2 관련 레지스터·················································································· 248 12.1.3 16비트 레지스터 조작····································································· 255 12.1.4 동작 모드························································································· 257 12.2 16비트 타이머/카운터 실습··········································································· 263 12.2.1 주기적으로 LED 패턴 이동하기····················································· 263 xii 12.2.2 간단한 시계 만들기········································································· 271 12.2.3 PWM 신호로 2색 LED 색상 조절하기·········································· 274 12.3 출력 비교 변조기(Output Compare Modulator) ··········································· 278 CHAPTER 13 타이머/카운터(III) :주파수 측정················································ 283 13.1 개요················································································································ 283 13.2 555 타이머를 사용하여 펄스 만들기··························································· 283 13.2.1 단안정 동작(Monostable Operation) ················································ 283 13.2.2 비안정 동작(Astable Operation) ······················································ 284 13.3 펄스 주파수 측정-방법 1 ·············································································· 285 13.3.1 측정 방법························································································· 285 13.3.2 프로그램··························································································· 286 13.3.3 실습·································································································· 290 13.4 입력 캡처를 사용한 펄스 주파수 측정-방법 2 ············································ 291 13.4.1 입력 캡처 유닛················································································ 291 13.4.2 측정 방법 및 프로그램···································································· 292 13.4.3 측정 정확도 향상을 위한 프로그램 수정······································· 296 13.5 입력 캡처를 사용한 펄스폭 및 듀티비 측정··············································· 299 CHAPTER 14 RC 서보모터 구동······································································· 303 14.1 RC 서보모터·································································································· 303 14.2 PWM 채널을 사용한 RC 서보 구동 실습··················································· 304 14.3 타이머 1 비교일치 인터럽트를 사용하여 하나의 RC 서보 구동··············· 313 14.4 타이머 1 비교일치 인터럽트를 사용하여 다수의 RC 서보 구동··············· 319 CHAPTER 15 아날로그 디지털 변환기······························································· 327 15.1 아날로그 디지털 변환기(Analog-to-Digital Converter) ································· 327 15.2 싱글엔드(Single-ended) 입력과 차동(Differential) 입력······························· 329 15.3 ATmega128의 ADC 채널············································································· 330 15.3.1 ATmega128의 ADC 사양································································ 330 15.3.2 관련 레지스터·················································································· 331 xiii 15.4 ATmega128의 ADC 사용············································································· 335 15.4.1 ADC 클록 설정 및 변환 속도························································ 335 15.4.2 입력 채널 설정 및 기준 전압 선택················································ 336 15.4.3 AD 변환 값과 데이터 정렬···························································· 336 15.5 실습················································································································ 340 CHAPTER 16 아날로그 비교기(Analog Comparator) ······························· 345 16.1 ATmega128의 아날로그 비교기 기능·························································· 345 16.2 관련 레지스터······························································································· 346 16.3 아날로그 비교기 멀티플렉서 입력 설정······················································ 348 CHAPTER 17 범용 동기/비동기 직렬 송수신기(USART) ································ 349 17.1 USART를 이용한 직렬 통신········································································ 349 17.2 ATmega128의 USART ·················································································· 353 17.2.1 USART 사양···················································································· 353 17.2.2 관련 레지스터·················································································· 354 17.2.3 USART의 데이터 전송률 설정······················································· 360 17.3 USART 사용 실습························································································ 361 17.3.1 보드 연결························································································· 361 17.3.2 통신 프로그램 작성········································································· 362 17.3.3 응용 프로그램 작성 및 실습··························································· 367 17.4 PC와 통신····································································································· 370 17.4.1 RS-232C 규격·················································································· 370 17.4.2 PC의 하이퍼터미널을 이용한 직렬 통신········································ 371 17.5 WinAVR의 표준 입출력 라이브러리 함수 사용하기·································· 375 17.5.1 표준 입출력 라이브러리 함수 printf()와 scanf() 활용··················· 375 17.5.2 부동소수점 입출력을 위한 printf, scanf 라이브러리 선택············· 382 CHAPTER 18 스텝모터 구동··············································································· 387 18.1 스텝모터········································································································· 387 18.1.1 구동 방식························································································· 387 xiv 18.1.2 동특성······························································································· 389 18.1.3 구동 회로························································································· 391 18.2 스텝모터 구동 프로그램··············································································· 393 18.2.1 펄스 출력 순서················································································ 393 18.2.2 프로그램··························································································· 393 18.2.3 모듈화 프로그램··············································································· 395 18.3 위치 이동 실습······························································································ 403 18.4 회전 속도 변환 실습····················································································· 406 CHAPTER 19 DC 모터 구동··············································································· 413 19.1 포토 인터럽터(Photo-interrupter)를 사용한 회전 속도 측정························ 413 19.2 모터의 정회전/역회전 구동··········································································· 415 19.3 실습················································································································ 417 CHAPTER 20 마이크로컨트롤러의 공압 응용···················································· 419 20.1 스탬핑 자동 기계·························································································· 419 20.2 구동 시퀀스··································································································· 420 20.3 솔레노이드 구동···························································································· 421 20.4 전압 레벨이 다른 신호를 입력받기····························································· 424 20.5 공압 회로 구성을 위한 인터페이스 회로···················································· 426 20.6 프로그램········································································································· 427 제3부 ATmega128 고급 활용 CHAPTER 21 Serial Peripheral Interface(SPI) ···································· 441 21.1 개요················································································································ 441 21.2 ATmega128의 SPI ························································································· 443 21.2.1 특징·································································································· 443 21.2.2 관련 레지스터·················································································· 444 21.2.3 동작·································································································· 446 21.3 SPI 구동 모듈······························································································· 450 21.4 일대일 SPI 통신 실습··················································································· 462 xv 21.5 MPU-9250 9축 모션 센서 사용 예······························································ 466 21.5.1 MPU-9250 모션 센서 및 장치 연결··············································· 466 21.5.2 MPU-9250 레지스터 맵··································································· 468 21.5.3 MPU-9250의 SPI 통신···································································· 470 21.5.4 MPU-9250 구동 모듈······································································ 471 21.5.5 MPU-9250 구동 실습······································································ 480 CHAPTER 22 TWI/I2 C······················································································ 483 22.1 Two-wire Serial Interface(TWI) ···································································· 483 22.1.1 장치 연결························································································· 483 22.1.2 데이터 전송 및 프레임 형식··························································· 484 22.2 ATmega128의 Two-wire Serial Interface ····················································· 487 22.2.1 TWI 사양························································································· 487 22.2.2 관련 레지스터·················································································· 488 22.2.3 전송 모드························································································· 491 22.2.4 전송율······························································································· 496 22.3 TWI(I2 C) 구동 모듈······················································································ 496 22.4 MPU-9250 6축 관성센서·············································································· 504 22.4.1 MPU-9250의 TWI(I2 C) 통신··························································· 504 22.4.2 MPU-9250 구동 모듈······································································ 504 22.4.3 MPU-9250 구동 실습······································································ 514 CHAPTER 23 내부 EEPROM············································································· 517 23.1 EEPROM(Electrically Erasable Programmable ROM) ································· 517 23.2 WinAVR에서 내부 EEPROM 사용······························································ 517 23.3 Brownout Detection을 사용한 EEPROM 데이터의 손상 방지··················· 521 CHAPTER 24 프로그램 메모리(플래시 메모리) ················································· 523 24.1 WinAVR에서 프로그램 메모리 사용··························································· 523 24.2 프로그램 메모리를 사용한 데이터 메모리 절약 예제································· 526 xvi CHAPTER 25 외부 메모리·················································································· 529 25.1 외부 메모리··································································································· 529 25.2 관련 레지스터······························································································· 530 25.3 외부 메모리 연결·························································································· 533 25.3.1 액세스 타이밍·················································································· 533 25.3.2 주소와 데이터의 분리······································································ 534 25.3.3 실습 보드에서 CPU와 외부 데이터 메모리의 연결······················· 534 25.3.4 외부 메모리의 주소 영역 할당······················································· 537 25.3.5 Memory-mapped I/O 방식으로 입출력 장치 연결························· 538 25.4 외부 메모리 사용을 위한 레지스터 설정···················································· 540 25.5 WinAVR에서 외부 메모리 사용·································································· 542 25.5.1 메모리 섹션······················································································ 542 25.5.2 스타트업(Startup) 코드····································································· 544 25.5.3 링커 옵션 설정················································································ 545 25.5.4 사용자 데이터 메모리 섹션····························································· 545 25.6 외부 메모리 영역에 장착된 LCD 구동······················································· 548 CHAPTER 26 외부 메모리 버스를 사용한 장치연결············································· 557 26.1 주소 디코더··································································································· 557 26.2 입출력 포트 확장·························································································· 559 26.3 메모리를 사용한 입출력 포트 사용하기······················································ 562 CHAPTER 27 Watchdog Timer ······································································· 571 27.1 Watchdog Timer ···························································································· 571 27.2 ATmega128의 Watchdog Timer ··································································· 572 27.2.1 와치독 타이머·················································································· 572 27.2.2 관련 레지스터·················································································· 573 27.2.3 와치독 타이머 설정 변경을 위한 순서··········································· 575 27.3 WinAVR에서 와치독 사용··········································································· 576 27.3.1 WinAVR 제공 함수········································································· 576 27.3.2 와치독 타이머 사용 예···································································· 576 27.3.3 와치독 타이머를 사용한 소프트웨어 리셋 구현···························· 578 27.3.4 시스템에 리셋이 걸렸을 때 리셋 원인 나타내기·························· 579 xvii CHAPTER 28 실행 코드 최적화············································································· 583 28.1 WinAVR에서 코드 최적화··········································································· 583 28.2 코드 최적화와 volatile 키워드······································································ 586 CHAPTER 29 인터럽트 고급 활용········································································· 589 29.1 상호 배제에 의한 데이터 손상 방지 및 원자 단위 연산··························· 589 29.2 인터럽트의 우선순위 조정하기····································································· 593 자주 묻는 질문········································································································ 599 실습재료 목록·········································································································· 603 찾아보기··················································································································· 605 |