책 이미지

책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 컴퓨터 공학 > 마이크로프로세서
· ISBN : 9791156006398
· 쪽수 : 529쪽
· 출판일 : 2019-03-06
책 소개
목차
제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