1. 마이콤 기초와 응용 강의노트마이콤 기초와 응용 강의노트마이콤 기초와 응용 강의노트마이콤 기초와 응용 강의노트
시스템시스템시스템시스템(ATmega128 )(ATmega128 )(ATmega128 )(ATmega128 )
최한호
서울시 중구 필동 가 번지 동국대학교 전기공학과3 26
TEL: 2260-3777, FAX:2275-6013
e-mail : hhchoi@dongguk.edu, WWW: //home.dongguk.edu/user/hhchoi
하늘 아래 새로운 것이 있을까 학문은 모방을 통해 발전하고 정보공유를 통해 세상에 대한 이해는 빨라지* ?
고 지식의 지평선은 넓어진다고 생각합니다 이 자료는 출처를 밝히지 않고 자유로이 사용하셔도 됩니다 많. .
이 사용하셔야 제가 쓰레기를 만들어 낸 것이 아니라는 위안을 받을 수 있으니까요.
2.
3. - i -
제목 차례제목 차례제목 차례제목 차례제목 차례제목 차례제목 차례제목 차례제목 차례제목 차례제목 차례제목 차례
개요개요개요개요1. AVR1. AVR1. AVR1. AVR ························································································································································································································································································································································································································································································································································································································································································································ 1111
의 일반적 특징1.1. AVR ··················································································································································· 1
의 종류1.2. AVR ································································································································································· 1
의 특징1.3. ATmega128 ·················································································································································· 3
외형과 핀 기능1.4. ··························································································································································· 4
의 메모리1.5. ATmega128 ·············································································································································· 7
프로그램 메모리1.5.1. ·············································································································································· 7
데이터메모리 범용레지스터1.5.2. : ························································································································· 8
레지스터1.5.2.1. X,Y,Z ······································································································································· 8
데이터 메모리 레지스터1.5.3. : I/O ······················································································································· 8
상태레지스터1.5.3.1. (SREG) ··························································································································· 9
스택 포인터1.5.3.2. (SP) ·································································································································· 10
레지스터1.5.3.3. RAMPZ(RAM Page Z select) ······················································································· 10
데이터 메모리 확장 레지스터1.5.4. : I/O ·········································································································· 10
데이터 메모리 내부1.5.5. : SRAM ······················································································································ 10
데이터 메모리1.5.6. : EEPROM ··························································································································· 11
레지스터1.5.6.1. EEAR ······································································································································ 12
레지스터1.5.6.2. EEDR ······································································································································ 12
레지스터1.5.6.3. EECR ······································································································································ 12
쓰기과정1.5.6.4. EEPROM ······························································································································· 12
읽기과정1.5.6.5. EEPROM ······························································································································· 12
외부 데이터 메모리1.5.7. ········································································································································ 13
외부 메모리 인터페이스1.5.7.1. ······················································································································· 13
레지스터1.5.7.2. MCUCR ···································································································································· 14
레지스터1.5.7.3. XMCRA ···································································································································· 14
레지스터1.5.7.4. XMCRB ···································································································································· 14
메모리 비트1.5.8. lock ············································································································································ 15
퓨즈 비트1.5.9. ·························································································································································· 16
1.5.9.1. Extended Fuse Byte ·························································································································· 16
1.5.9.2. Fuse High Byte ···································································································································· 16
1.5.9.3. Fuse Low Byte ···································································································································· 16
시스템 클록과 슬립 모드1.6. ······································································································································· 17
클록 분배1.6.1. ·························································································································································· 17
클록 발생과 선택1.6.2. ············································································································································ 17
내부 디폴트 클록 발진기1.6.2.1. RC( ) ············································································································ 17
외부 발진기1.6.2.2. RC ····································································································································· 18
외부 수정발진기1.6.2.3. ····································································································································· 19
저주파 수정 발진기1.6.2.4. ······························································································································· 19
외부 클록1.6.2.5. ················································································································································· 20
레지스터를 이용한 클럭 주파수 조정1.6.2.6. XDIV ····················································································· 20
슬립모드1.6.3. ···························································································································································· 20
레지스터를 이용한 모드 설정1.6.3.1. MCUCR ······························································································ 21
4. - ii -
아이들 모드1.6.3.2. ············································································································································· 21
모드1.6.3.3. ADC noise reduction ················································································································ 21
모드1.6.3.4. Power-down ································································································································ 21
모드1.6.3.5. Power-save ································································································································· 21
모드1.6.3.6. Standby ········································································································································· 21
모드1.6.3.7. Extended Standby ····················································································································· 21
슬립모드의 동작 요약1.6.3.8. ··························································································································· 22
과 워치독 타이머1.7. Reset ·········································································································································· 22
리셋1.7.1. ···································································································································································· 22
파워온 리셋1.7.1.1. (POR) ································································································································· 23
외부 리셋1.7.1.2. ················································································································································· 23
리셋1.7.1.3. Brown-out ···································································································································· 24
워치독 리셋1.7.1.4. ············································································································································· 24
레지스터1.7.1.5. MCUCSR ······························································································································· 25
워치독 타이머1.7.2. ·················································································································································· 25
워치독 타이머의 구성1.7.2.1. ··························································································································· 25
레지스터1.7.2.2. WDTCR ································································································································· 25
워치독의 설정1.7.2.3. ········································································································································· 26
시스템 개발 기초시스템 개발 기초시스템 개발 기초시스템 개발 기초2. ATmega1282. ATmega1282. ATmega1282. ATmega128 ···················································································································································································································································································································································································································································································································································· 27272727
명령어 분류와 주소지정 방식2.1. ······························································································································· 27
명령어 요약2.2. ······························································································································································· 28
어셈블리어의 일반형태2.2.1. ·································································································································· 30
지시어 의사 명령2.2.2. ( ) ·········································································································································· 30
숫자 문자 연산자2.2.3. , , ········································································································································· 32
함수2.2.4. ···································································································································································· 32
2.3. AVR Studio4 ···························································································································································· 33
새 프로젝트 등록과 실행 파일 만들기2.3.1. ······································································································ 33
디버깅과 시뮬레이션2.3.2. ······································································································································ 37
의2.4. AVR ISP ································································································································································ 40
마이컴 시스템 개발 방법2.4.1. ······························································································································ 40
를 이용하는 법2.4.1.1. ICE(In Cricuit Emulator) ······················································································· 40
를 이용하는 법2.4.1.2. ROM Emulator ·········································································································· 40
를 이용하는 법2.4.1.3. ROM Writer ··············································································································· 41
외부 을 이용하는 법2.4.1.4. RAM ··················································································································· 41
를 이용하는 법2.4.1.5. ISP ································································································································ 41
용 다운로더2.4.2. AVR ISP ···································································································································· 42
와2.4.2.1. AVR Studio ATAVRISP ················································································································· 42
프로그래머2.4.2.2. Atmel AVR ISP ·············································································································· 42
2.4.2.3. PonyProg2000 ······································································································································ 42
2.4.2.4. Codevisin AVR ····································································································································· 43
컴파일러2.5. Codevision AVR C ······························································································································· 43
새 프로젝트 등록하기와 옵션 설정하기2.5.1. ···································································································· 43
새 소스 파일 만들기2.5.2. ······································································································································ 46
프로젝트에 소스파일 등록하고 실행파일 만들기2.5.3. ···················································································· 47
디버깅2.5.4. ································································································································································ 51
5. - iii -
플래쉬롬 프로그래밍하기2.5.5. ISP ····················································································································· 54
프로그래밍하기2.5.6. EEPROM ISP ···················································································································· 56
프로그래밍에서 유의할 점2.6. C ································································································································ 56
프로그램의 구성 요소2.6.1. C ······························································································································· 56
프로그램의 일반적 형식2.6.2. C ··························································································································· 56
전처리2.6.2.1. ······················································································································································· 57
선언문2.6.2.2. ······················································································································································· 57
주석2.6.2.3. ··························································································································································· 57
함수와 함수 부분2.6.2.4. main ························································································································ 57
기본 데이터형2.6.3. ·················································································································································· 57
문자형2.6.3.1. ······················································································································································· 58
정수형2.6.3.2. ······················································································································································· 58
실수형2.6.3.3. ······················································································································································· 58
변수나 상수 이름 짓는 법2.6.3.4. ··················································································································· 58
상수 정의2.6.3.5. ················································································································································· 59
변수 선언과 초기화2.6.3.6. ······························································································································· 59
확장 데이터형2.6.4. ·················································································································································· 59
데이터형2.6.4.1. bit ············································································································································ 59
데이터형2.6.4.2. eeprom ·································································································································· 59
데이터형2.6.4.3. flash ······································································································································· 59
데이터형2.6.4.4. sfrb, sfrw ····························································································································· 59
연산자2.6.5. ································································································································································ 59
조건 연산자2.6.5.1. ············································································································································· 59
데이터 형변환 연산자2.6.5.2. ··························································································································· 59
콤마 연산자2.6.5.3. ············································································································································· 60
산술 연산자2.6.5.4. ············································································································································· 60
논리와 비교 연산자2.6.5.5. ······························································································································· 60
비트 연산자2.6.5.6. ············································································································································· 60
대입 연산자2.6.5.7. ············································································································································· 61
제어문2.6.6. ································································································································································ 61
문2.6.6.1. if ·························································································································································· 61
문2.6.6.2. switch-case ····································································································································· 61
문2.6.6.3. for ······················································································································································· 62
문2.6.6.4. while ·················································································································································· 62
문2.6.6.5. do-while ··········································································································································· 62
문2.6.6.6. break ·················································································································································· 62
문2.6.6.7. continue ············································································································································ 62
문2.6.6.8. goto ···················································································································································· 62
함수와 변수2.6.7. ······················································································································································ 62
프로토타입 선언2.6.7.1. ····································································································································· 62
일반 함수의 정의2.6.7.2. ··································································································································· 62
라이브러리 함수2.6.7.3. ····································································································································· 63
인터럽트 함수의 정의2.6.7.4. ··························································································································· 63
변수2.6.7.5. ··························································································································································· 63
어셈블리어와 결합2.6.7.6. ································································································································· 64
6. - iv -
포인터와 배열2.6.8. ·················································································································································· 64
배열 선언 방법2.6.8.1. ······································································································································· 64
배열 초기화2.6.8.2. ············································································································································· 64
포인터 선언 방법2.6.8.3. ··································································································································· 65
포인터 초기화 및 참조 방법2.6.8.4. ··············································································································· 65
포인터의 연산2.6.8.5. ········································································································································· 65
함수 포인터2.6.8.6. ············································································································································· 65
배열과 포인터의 차이점2.6.8.7. ······················································································································· 66
2.6.9. typedef, structure, union, enum ············································································································· 66
를 사용한 새로운 데이터형 정의법2.6.9.1. typedef ···················································································· 66
구조체의 개념과 필요성2.6.9.2. ······················································································································· 66
구조체 선언법과 초기화2.6.9.3. ······················································································································· 66
구조체 사용법2.6.9.4. ········································································································································· 67
공용체2.6.9.5. (union) ········································································································································· 67
열거형 상수2.6.9.6. ············································································································································· 67
기본 프로그래밍과 입출력 실험기본 프로그래밍과 입출력 실험기본 프로그래밍과 입출력 실험기본 프로그래밍과 입출력 실험3.3.3.3. ················································································································································································································································································································································································································································································································································ 68686868
기본 프로그래밍 연습3.1. ············································································································································· 68
실험 내부램에 데이터 쓰기3.1.1. 1 : 1 ················································································································· 68
실험 내부램에 데이터 쓰기3.1.2. 2 : 2 ················································································································· 68
실험 에 데이터 쓰기와 읽기3.1.3. 3 : EEPROM ································································································· 68
실험 롬 데이터 읽기3.1.4. 4 : ································································································································ 69
실험 롬데이터 검색3.1.5. 5 : 1 ······························································································································· 70
실험 롬데이터 검색3.1.6. 6 : 2 ······························································································································· 70
실험 비트 진수의 변환3.1.7. 7 : 8 2 BCD ············································································································ 70
실험 비트 진수의 변환3.1.8. 8 : 16 2 BCD ·········································································································· 71
실험 아스키 문자의 진수 변환3.1.9. 9 : 16 ········································································································· 72
실험 숫자의 아스키코드 변환3.1.10. 10 : ··········································································································· 72
실험 지연 루틴3.1.11. 11 : ····································································································································· 73
3.2. I/O Port ····································································································································································· 74
관련 레지스터3.2.1. ·················································································································································· 74
레지스터3.2.1.1. DDRx ······································································································································ 74
레지스터3.2.1.2. PORTx ··································································································································· 74
레지스터3.2.1.3. PINx ······································································································································· 74
레지스터3.2.1.4. SFIOR ····································································································································· 74
구조 및 동작3.2.2. ···················································································································································· 74
단순 출력 연습3.3. ························································································································································· 75
실험 점멸3.3.1. 12 : LED 1 ····································································································································· 75
실험 점멸3.3.2. 13 : LED 2 ····································································································································· 77
실험 점멸3.3.3. 14 : LED 3 ····································································································································· 77
실험 점멸3.3.4. 15 : LED 4 ····································································································································· 78
단순 입출력 연습3.4. ····················································································································································· 78
실험 키 누름수 세기3.4.1. 16 : ····························································································································· 78
실험 파일럿 램프3.4.2. 17 : 1 ································································································································· 80
실험 파일럿 램프3.4.3. 18 : 2 ································································································································· 80
실험 입출력함수 구현3.4.4. 19 : ··························································································································· 81
7. - v -
실험 입력값에 따른 점멸속도 조절3.4.5. 20 : LED ························································································· 81
인터럽트와 타이머 실험인터럽트와 타이머 실험인터럽트와 타이머 실험인터럽트와 타이머 실험4.4.4.4. ········································································································································································································································································································································································································································································································································································································ 82828282
외부 인터럽트 실험4.1. ················································································································································· 82
인터럽트의 개념과 종류4.1.1. ································································································································ 82
의 인터럽트 처리과정4.1.2. ATmega128 ············································································································ 82
인터럽트 처리 시간4.1.3. ········································································································································ 82
인터럽트 제어4.1.4. ················································································································································ 83
벡터 배치4.1.4.1. ················································································································································· 83
레지스터4.1.4.2. MCUCR ·································································································································· 83
허용과 우선순위4.1.4.3. ··································································································································· 83
외부 인터럽트 트리거4.1.4.4. ··························································································································· 83
레지스터4.1.4.5. EICRA ···································································································································· 85
레지스터4.1.4.6. EICRB ···································································································································· 85
레지스터4.1.4.7. EIMSK ···································································································································· 85
레지스터4.1.4.8. EIFR ······································································································································· 85
실험 점멸4.1.5. 21 : LED 1 ····································································································································· 85
실험 점멸4.1.6. 22 : LED 2 ····································································································································· 86
실험 카운터4.1.7. 23 : ············································································································································· 87
타이머 실험4.2. ······························································································································································· 88
타이머 카운터4.2.1. 0, 2 ·········································································································································· 88
구성4.2.1.1. ··························································································································································· 89
레지스터4.2.1.2. TCCRn ··································································································································· 89
레지스터4.2.1.3. TIMSK ··································································································································· 90
레지스터4.2.1.4. TIFR ······································································································································· 90
레지스터4.2.1.5. ASSR ······································································································································ 90
레지스터4.2.1.6. SFIOR ····································································································································· 91
타이머 의 일반 모드4.2.1.7. 0,2 ························································································································· 91
타이머 의 모드4.2.1.8. 0,2 CTC ·························································································································· 91
타이머 의 고속 모드4.2.1.9. 0, 2 PWM ········································································································· 92
타이머 의 모드4.2.1.10. 0, 2 Phase Correct PWM ·················································································· 93
타이머 카운터4.2.2. 1, 3 ·········································································································································· 93
구성4.2.2.1. ··························································································································································· 94
레지스터4.2.2.2. TCCRxA ································································································································ 95
레지스터4.2.2.3. TCCRxB ································································································································ 95
레지스터4.2.2.4. TCCRxC ································································································································ 96
레지스터4.2.2.5. TIMSK ··································································································································· 96
레지스터4.2.2.6. ETIMSK ································································································································· 96
레지스터4.2.2.7. TIFR ······································································································································· 97
레지스터4.2.2.8. ETIFR ···································································································································· 97
타이머 의 일반 모드4.2.2.9. 1, 3 ······················································································································· 97
타이머 의 모드4.2.2.10. 1, 3 CTC ······················································································································ 98
타이머 의 고속 모드4.2.2.11. 1, 3 PWM ······································································································ 98
타이머 의 모드4.2.2.12. 1, 3 Phase Correct PWM ·················································································· 98
타이머 의 모드4.2.2.13. 1, 3 Phase and Frequency Correct PWM ··················································· 99
출력비교 변조4.2.2.14. ······································································································································ 99
8. - vi -
실험 타이머를 이용한 점멸4.2.3. 24 : LED 1 ·································································································· 100
실험 타이머를 이용한 점멸4.2.4. 25 : LED 2 ·································································································· 100
실험 타이머를 이용한 점멸4.2.5. 26 : LED 3 ·································································································· 101
실험 타이머를 이용한 점멸4.2.6. 27 : LED 4 ·································································································· 102
실험 타이머를 이용한 점멸4.2.7. 28 : LED 5 ·································································································· 102
실험 워치독 타이머4.2.8. 29 : ····························································································································· 103
실험 타이머를 이용한 카운터4.2.9. 30 : ··········································································································· 104
실험 펄스 폭 측정4.2.10. 31 : ····························································································································· 104
인터럽트와 타이머 복합 실험4.3. ····························································································································· 105
실험 점멸 속도 조절4.3.1. 32 : LED ················································································································· 105
실험 스톱 워치4.3.2. 33 : ····································································································································· 105
실험 신호 발생4.3.3. 34 : PWM 1 ······················································································································· 106
실험 신호 발생4.3.4. 35 : PWM 2 ······················································································································· 107
응용 실험응용 실험응용 실험응용 실험5.5.5.5. ········································································································································································································································································································································································································································································································································································································································································································ 109109109109
5.1. FND(Flexible Numeric Display) ····················································································································· 109
의 개요5.1.1. FND ·················································································································································· 109
실험 디코더 없는 구동5.1.2. 36 : FND ············································································································ 109
실험 디코더를 사용한 구동5.1.3. 37 : FND ······································································································ 110
실험 동적 구동5.1.4. 38 : FND ·························································································································· 110
실험 시계5.1.5. 39 : ··············································································································································· 111
실험 스톱워치5.1.6. 40 : ······································································································································· 112
실험 시간 조정이 가능한 시계5.1.7. 41 : ········································································································· 113
키보드 스캐닝5.2. ························································································································································· 115
실험 단순 키보드 스캔5.2.1. 42 : ······················································································································· 115
실험 키 매트릭스 스캔5.2.2. 43 : ······················································································································· 116
음향 발생5.3. ································································································································································· 117
음향 발생 개요5.3.1. ············································································································································· 117
실험 사이렌 소리내기5.3.2. 44 : ························································································································· 118
실험 전화벨 소리내기5.3.3. 45 : ························································································································· 119
실험 동요 재생하기5.3.4. 46 : ····························································································································· 120
실험 전자 오르간5.3.5. 47 : ································································································································· 121
문자5.4. 16x2 LCD ····················································································································································· 122
문자 모듈 개요5.4.1. 16x2 LCD ······················································································································· 122
제어기의 내부 구성5.4.2. LCD ··························································································································· 123
명령어5.4.3. ····························································································································································· 123
초기화 방법 비트 인터페이스 경우5.4.4. (4 ) ······································································································ 124
실험 초기화5.4.5. 48 : LCD ································································································································· 124
실험 점멸하며 문자표시하기5.4.6. 49 : ············································································································· 127
실험 사용자 폰트 이용하기5.4.7. 50 : ··············································································································· 127
실험 시간 조정이 가능한 시계5.4.8. 51 : ········································································································· 128
모터 제어5.5. ································································································································································· 129
스텝모터 개요5.5.1. ··············································································································································· 129
특징5.5.1.1. ························································································································································ 129
종류5.5.1.2. ···················································································································································· 130
특성과 사양5.5.1.3. ·········································································································································· 130
9. - vii -
상 스텝 모터의 결선 확인법5.5.1.4. 4 ········································································································ 130
상 스텝 모터의 구동원리5.5.2. 4 ························································································································· 131
상 여자 방법5.5.2.1. 1 ······································································································································ 131
상 여자 방법5.5.2.2. 2 ······································································································································ 131
상 여자 방법5.5.2.3. 1-2 ································································································································· 131
스텝 모터의 위치 제어법5.5.3. ··························································································································· 132
스텝 모터의 속도 제어법5.5.4. ··························································································································· 132
스텝 모터의 가감속 제어시 펄스레이트 결정법5.5.5. ··················································································· 133
모터 구동용 브리지 회로5.5.6. H ························································································································ 133
모터 구동용 의 개요5.5.7. IC L298 ··················································································································· 134
실험 스텝 모터 정속 제어5.5.8. 52 : ················································································································· 135
실험 스텝 모터 속도 제어5.5.9. 53 : ················································································································· 136
실험 스텝 모터 가감속 제어5.5.10. 54 : ··········································································································· 137
직류모터 개요5.5.11. ············································································································································· 137
특징5.5.11.1. ······················································································································································ 137
직류모터 구동원리5.5.11.2. ···························································································································· 138
직류모터 구조5.5.11.3. ···································································································································· 138
실험 직류모터 속도 제어5.5.12. 55 : 1 ·············································································································· 138
실험 직류모터 속도 제어5.5.13. 56 : 2 ·············································································································· 139
변환5.6. D/A ······························································································································································· 140
변환기의 종류5.6.1. D/A ······································································································································ 140
소개5.6.2. DAC 0800 ············································································································································· 141
실험 톱니파 발생5.6.3. 57 : ································································································································· 141
실험 사인파 발생5.6.4. 58 : ································································································································· 141
변환5.7. A/D ································································································································································· 142
변환과정5.7.1. A/D ·················································································································································· 142
변환기의 종류5.7.2. A/D ········································································································································ 143
의5.7.3. ATmega128 ADC ··································································································································· 143
특징5.7.3.1. ························································································································································ 143
레지스터5.7.3.2. ADCH, ADCL ···················································································································· 144
레지스터5.7.3.3. ADMUX ······························································································································· 144
레지스터5.7.3.4. ADCSRA ····························································································································· 144
동작5.7.3.5. ························································································································································ 144
잡음 제거 방법5.7.3.6. ···································································································································· 145
실험 조도 변화 측정5.7.4. 59 : ··························································································································· 146
아날로그 비교기5.8. ····················································································································································· 147
구성5.8.1. ································································································································································· 147
제어5.8.2. ································································································································································· 148
레지스터5.8.2.1. ACSR ··································································································································· 148
레지스터5.8.2.2. SFIOR ·································································································································· 148
실험 아날로그 비교기 실험5.8.3. 60 : ··············································································································· 149
직렬 통신5.9. ································································································································································· 150
포트 제어5.9.1. SPI ··············································································································································· 150
의 동작5.9.1.1. SPI ············································································································································ 150
레지스터5.9.1.2. SPCR ···································································································································· 151