CHAPTER 2 마이크로컨트롤러구조이해하기 가. ATmega128 기능 나. CRX10 구조
가. ATmega128 기능 1) 기능 고성능저전력 AVR 8비트마이크로컨트롤러 고급 RISC 구조 - 133개의강력한명령어 - 최대단일주기클록수행 - 32 8 범용레지스터 + 주변기기제어레지스터 - 완전한정적동작 - 16 MHz에서 16 MIPS(Million Instruction Per Second) 의처리율 - 2 사이클에서실행되는내장곱셈장치 높은내구성의비휘발성메모리구조 - ISP가지원되는 128K바이트의플래시메모리 - 4K바이트 EEPROM - 4K바이트의내부 SRAM - 플래시 : 10,000번의쓰기 / 지우기횟수, EEPROM : 100,000번의쓰기 / 지우기횟수 - 데이터보존 : 섭씨 85도에서 20년 / 섭씨 25도에서 100년 - 소프트웨어에의한 LOCK 동작 * On Chip Boot 프로그램에의한 ISP * 실질적으로읽어오는동안쓰기동작 - 최대 64K바이트선택적인외장메모리공간 - 소프트웨어보안을위한프로그래밍잠금 - ISP를위한 SPI(Serial Peripheral Interface Bus) 인터페이스 JTAG(IEEE std. 1149.1 호환 ) 인터페이스 - JTAG를통한 Boundary Scan 방법
- On Chip 디버그지원 - JTAG 인터페이스를통한 Flash, EEPROM, 퓨즈, Lock 비트설정 주변기능 - 별도로동작하는 Pre-scaler 와출력비교장치로구성된 2개의 8비트타이머 / 카운터 - Pre-scaler, 출력비교장치와입력캡처로구성된 2개의 16비트타이머 / 카운터 - 별도의오실레이터와실시간카운터 - 2개의 8비트 PWM 채널 - 2비트에서 16비트까지조절이가능한 6개 PWM (Pulse Width Modulation) 채널 - 출력비교변조기 - 8 채낼, 10 비트 ADC * 8개의싱글입력채널 * 7개의차동입력채널 * 1x, 10x, 200x 이득으로이루어진 2개의차동입력채널 - 바이트중심의 Tow-Wired Interface ( 동기 2선식통신 ) - 2개의 USART (Universal Synchronous & Asynchronous Receiver/Transmitter, 범용동기 / 비동기통신 ) - Master/Slave SPI (Serial Peripheral Interface, 동기 3선식통신 ) - 별도의오실레이터로이루어진 Watchdog Timer - On Chip의아날로그비교기 특수마이크로컨트롤러기능 - Power-on Reset, Brown-out 검출기 - 내부조정 RC 발진기 - 외부및내부인터럽트소스 - 6개의 Sleep mode (Idle mode, ADC Noise Reduction mode, Power-save mode,
Power-down mode, Standby mode, Extended Standby mode) - 소프트웨어에서선택가능클록주파수 - 전체의풀업비활성화 - 퓨즈 (Fuse) 를사용하여 ATmega103과호환모드로동작 I/O 및패키지 - 53개의범용입출력포트 - 64-lead TQFP 및 64-pad QFN/MLF 동작전압 - 2.7 ~ 5.5V ATmega128L - 4.5 ~ 5.5V ATmega128 속도등급 - 0 ~ 8 MHz ATmega128L - 0 ~ 16 MHz ATmega128 ATmega128(Atmega 시리즈 ) 는고성능대비저전력으로 ATmel사의마이크로컨트롤러로진보된 RISC 구조이다. 133개의막강한명령어를가지고있으며모든명령어는한클록사이클에의한동작이수행된다. 최고동작속도는 16MHz로이때초당 1천6백만개의명령어를처리한다. 내부에 128Kbytes의자가프로그래밍기능을가진내부메모리가있고, 4Kbytes의 EEPROM과 4Kbytes의 SRAM을가지고있다. 포트에는다양한기능을가지고있으며, 이러한기능은레지스터설정을통한기능사용유무를설정 / 해제할수있다. w w w w w w 독립적인분주기와비교기를가진두개의 8비트타이머 / 카운터독립적인분주기, 비교기, 캡처기능을가진두개의 16비트타이머 / 카운터독립적인발진을가지는리얼타임카운터, 두개의 8비트펄스폭가변출력장치 2에서 16비트사이의해상도를가지는 6개의펄스폭가변출력장치 10비트아날로그디지털컨버터 8개두선통신, 두개의프로그램가능한두개의비동기통신
w 마스터 / 슬래이브기능을가진 SPI 통신, 프로그램기능과내부클록을이용한와치독 그림 2.1 은 ATmega128 핀구성을나타낸다. [ 그림 2.1] ATmega128 의 Pin 구조 다른기능으로는전원인가시리셋타이밍을결정하는브라운-아웃리셋을설정할수있다. 내부에변경가능한 RC발진회로를가지고있어외부에발진회로를추가하지않아도최대 8MHz까지동작할수있다. 사용전압은 2.7V에서 5.5V까지사용한다. 64핀을가지는구조로 VCC, GND와같은전원부를제외한모든 IO포트를입출력장치로사용할수있다. 또한외부메모리를확장할수있다. 그림 2.2를보면메인연산을수행하는 ALU와각포트를연결하는 DATA BUS는 8비트로연결되며내부발진 / 고주파외부발진 / 저주파외부발진세가지발진을이용하여내부의기능을가동한다.
[ 그림 2.2] ATmega128 블록다이어그램 그림 2.3과같이 AVR시리즈는 ALU, ROM, RAM 및 IO를기본구조로한다. 모든 AVR의구조는동일한구조를가지고있으며 ROM, RAM 크기와 IO의개수및내부기능이많고적음이모델마다차이가발생된다. 하지만제일중요한 ALU의기능이동일하다. [ 그림 2.3] AVR 시리즈블록다이어그램
그림 2.4 와같이 ATmega128 의메모리는 0x0000 에서부터 0xffff 까지의번지수를 가지며사용자가프로그램을할수있는영역은 0x0000 부터시작된다. [ 그림 2.4] ATmega128 의메모리맵 그림 2.5 와같이데이터메모리의주소는프로그램메모리와마찬가지로 0x0000 에서 0xffff 까지의주소를가진다. 이때 103 기능을활성화하면주소는 A 와같이동 작하고활성화하지않으면 B 와같은형태의주소값을취하면된다. [ 그림 2.5] ATmega128 의데이터메모리맵과외부메모리 2) 클럭그림 2.6과같이 ATmega128은 6개의입력을가질수있으며입력된클록신호는분주및컨트롤로직회로에의해서 IO, Timer/Counter, CPU core, RAM 및 ADC와같은동작을수행하기위한신호로쓰인다. 이중내주에 Calibrated RC Oscillator와
같은내부에신호발생장치를가지고있어외부에서크리스탈이나레조레이터와 같은클록발생장치를특별하게장치하지않아도 8MHz 로동작한다. [ 그림 2.6] ATmega128 의클럭배열 나. CRX10 구조 1) LED상태그림 2.7과같이오른쪽상단에는부팅확인을위한전원 RED LED가있으며, 왼쪽상단에는블루투스연결시에 ON되는 Blue LED있다. 6 ⓹ 4 3 2 1 [ 그림 2.7] 이동로봇의 LED 점등상태
ATmega128의내부펌웨어를변경할시에는반드시 버튼을 3초간누르고 LED상태가 6번 LED만깜박일때에프로그램을다운로드한다. 다운로드를완료후 ATmega128의통신을위해그림 2.8과같이오른쪽상단에있는 ISP 연결하는커넥터밑에작은스위치 2개를 CRX10의정면방향에서볼때오른쪽으로변경한다. Programming Mode로진입하면그림 2.9와같이 6번의 LED만깜박인다. [ 그림 2.8] RX-TX 변경 [ 그림 2.9] Programming Mode 2) ATmega128의회로구성이동로봇을제어할때먼저알아두어야할사항은회로가어떻게구성되어있는지에대한것이다. 그림 2.10은 CRX10의메인마이크로프로세서인 ATmega128 포트에연결된각각의구성을보여준다. [ 그림 2.10] 이동로봇의 ATmega128 회로구성
가 ) OUTPut 회로첫번째는상태 LED 회로구성으로그림 2.11은상태를나타내는 LED로쓰일수도있으며, 간단한프로그램테스트용으로 LED를켜고끄고할수있는회로이다. 메인마이크로프로세서인 ATmega128에는아래표와같이연결되어 LED를제어한다. [ 그림 2.11] 상태 LED 회로 PB 7 LED_128-1 (LED 출력 ) PE 5 LED_128-2 (LED 출력 ) PB 4 LED_128-3 (LED 출력 ) 두번째는도트매트릭스회로구성으로그림 2.12는 LED 8x8 도트매트릭스의회로도를나타내며, Anode 와 Cathode를이용하여도트매트릭스를구성한다. 메인마이크로프로세서인 ATmega128에는아래표와같이연결되어도트매트릭스를제어한다. [ 그림 2.12] 도트매트릭스회도로
PA 0 DT1G (Anode 양극 ) PC 0 DTR1 (Catode 음극 ) PA 1 DT2G (Anode 양극 ) PC 1 DTR2 (Catode 음극 ) PA 2 DT3G (Anode 양극 ) PC 2 DTR3 (Catode 음극 ) PA 3 DT4G (Anode 양극 ) PC 3 DTR4 (Catode 음극 ) PA 4 DT5G (Anode 양극 ) PC 4 DTR5 (Catode 음극 ) PA 5 DT6G (Anode 양극 ) PC 5 DTR6 (Catode 음극 ) PA 6 DT7G (Anode 양극 ) PC 6 DTR7 (Catode 음극 ) PA 7 DT8G (Anode 양극 ) PC 7 DTR8 (Catode 음극 ) CRX10 의도트매트릭스 LED 는 bit 형의데이터로지정되며, 총단위는 8bit 로 1 이켜지고 0 이꺼지는제어방식이다. 각버퍼마다 8bit 의주소를가지고 있으며도트매트릭스의 1 줄에해당한다. i j CRX10 전면부 (j 열 ) 8 7 6 5 4 3 2 1 8 [8,8] 0x80 [8,7] 0x80 [8,6] 0x80 [8,5] 0x80 [8,4] 0x80 [8,3] 0x80 [8,2] 0x80 [8,1] 0x80 7 [7,8] 0x40 [7,7] 0x40 [7,6] 0x40 [7,5] 0x40 [7,4] 0x40 [7,3] 0x40 [7,2] 0x40 [7,1] 0x40 6 [6,8] 0x20 [6,7] 0x20 [6,6] 0x20 [6,5] 0x20 [6,4] 0x20 [6,3] 0x20 [6,2] 0x20 [6,1] 0x20 i 5 [5,8] 0x10 [5,7] 0x10 [5,6] 0x10 [5,5] 0x10 [5,4] 0x10 [5,3] 0x10 [5,2] 0x10 [5,1] 0x10 행 4 [4,8] 0x08 [4,7] 0x08 [4,6] 0x08 [4,5] 0x08 [4,4] 0x08 [4,3] 0x08 [4,2] 0x08 [4,1] 0x08 3 [3,8] 0x04 [3,7] 0x04 [3,6] 0x04 [3,5] 0x04 [3,4] 0x04 [3,3] 0x04 [3,2] 0x04 [3,1] 0x04 2 [2,8] 0x02 [2,7] 0x02 [2,6] 0x02 [2,5] 0x02 [2,4] 0x02 [2,3] 0x02 [2,2] 0x02 [2,1] 0x02 1 [1,8] 0x01 [1,7] 0x01 [1,6] 0x01 [1,5] 0x01 [1,4] 0x01 [1,3] 0x01 [1,2] 0x01 [1,1] 0x01
세번째는 Motor 구성회로구성으로그림 2.13은 Motor 드라이브의회로를나타내며, 모터드라이브칩인 L298을사용하여회로를구성한다. (L298의 DataSheet는부록을참조한다.) 메인마이크로프로세서인 ATmega128에는아래표와같이연결되어모터를제어한다. [ 그림 2.13] Motor 회로도 PWM 신호로모터를제어하며, 모터의특성상음극과양극을인가하였을때에모터는회전한다. 즉, 예를들어서 PE6에는 1 을 PE7에는 0 을인가하면모터는회전을하게된다. 단 Enable단자에는 1 을인가하여동작대기상태를만들어야한다. ENCODER가연결된포트에는모터의회전수를체크할수있으며, 이를이용해정밀한모터제어를할수있다. PE 6 PWM-A-1 (INPUT 1) PG 3 PWM-B-1 (INPUT 2) PE 7 PWM-A-2 (INPUT2) PG 4 PWM-B-2 (INPUT 3) PB 5 Enable-A PB 6 Enable-B PD 0 ENCODER1_A PD 2 ENCODER2_A PD 1 ENCODER1_B PD 3 ENCODER2_B 세번째는 Buzzer 회로구성으로그림 2.14 는부저출력에대한회로를나타내며, TR (Transistor) 를사용하여부저음을증폭해서출력한다. 메인마이크로프로세서인 ATmega128 에는아래표와같이연결되어부저를제어한다.
[ 그림 2.14] 부저회로 부저도 Motor 와같은원리로 High 레벨인 1 을인가하면부저음이출력되고 Low 레벨인 0 을인가하면부저음이발생되지않는다. 응용으로 PWM 신호를 이용하면부저로멜로디를만들어출력할수있다. PE 4 BUZZER ( 부저음출력부 ) 나 ) INPut 회로첫번째는 PSD센서회로구성으로그림 2.15는적외선거리측정센서인 PSD센서의회로를나타내며, 입력회로로구성하고 ADC(Analog To Digital) 의기능을사용하면센서의신호가디지털로변환된후프로세서가입력받는다. 메인마이크로프로세서인 ATmega128에는아래표와같이연결되어 PSD센서를제어한다. [ 그림 2.15] PSD 센서회로 ADC 를사용하여 ATmega128 에센서의신호를입력받으면 10Bit 로받아지며,
0~4095 사이의값으로변환하여제어가가능하다. PF 0 PSD-ADC0 (ADC 입력 ) PF 1 PSD-ADC1 (ADC 입력 ) PF 2 PSD-ADC2 (ADC 입력 ) 두번째는 IR센서회로구성으로그림 2.16은 IR( 적외선 ) 센서에대한회로를나타내며, OP-AMP 칩인 LM324를사용하여센서의수신감도를증폭하는회로를구성한다. (LM324의 DataSheet는부록을참조한다.) 메인마이크로프로세서인 ATmega128에는아래표와같이연결되어 IR센서를제어한다. [ 그림 2.16] IR 센서회로 IR센서중발광부에속하는회로는항상켜져있는상태가아닌신호를인가해야동작하는원리로구성하였으며, PWM신호를어느정도로제어하는지에따라발광의차이가생겨수광 IR센서에영향을미친다. IR 수광부에는 OP-AMP가연결되어있어가변저항을통해수신되는감도를조절하여 5개의 IR센서의민감도를통일되게설정할수있다. OP-APM의민감도를먼저정밀가변저항으로셋팅을완료한후에각센서에장착된가변저항을통해각각의센서의민감도를더욱정밀하게조절하는회로구성을한다.
PE 3 IR-PWM (IR 센서발광부 ) PF 3 IRS-2 (IR 센서수광부 ) PF 4 IRS-3 (IR 센서수광부 ) PF 5 IRS-4 (IR 센서수광부 ) PF 6 IRS-5 (IR 센서수광부 ) PF 7 IRS-6 (IR 센서수광부 ) 세번째는스위치회로구성으로그림 2.17 은 CRX10 에있는 4 개의버튼에해당 하는스위치회로를나타낸다. 메인마이크로프로세서인 ATmega128 에는아래표와 같이연결되어스위치입력을제어한다. [ 그림 2.17] 스위치회로 스위치를눌렀을때에회로에서는 5V가흐르게되어 High레벨의신호가입력이되며, 일반상태에서는 Low레벨의신호로유지되어입력이안되는상태가된다. 단순히한번눌렀을때만입력받는게아닌 High레벨의신호를주기로체크하여스위치를누르고있는시간을체크할수도있다. PD 4 SW-1 ( 스위치입력 ) PD 5 SW-2 ( 스위치입력 ) PD 6 SW-3 ( 스위치입력 ) PD 7 SW-4 ( 스위치입력 ) 다 ) 통신회로그림 2.18은통신회로를나타내며, RS232 통신을관장하는 Max232 칩을사용하여데이터를주고받는역할을한다. 유선으로는 D-Sub9 커넥터를이용하고무선으로는블루투스를사용한다. (Max232 DataSheet는부록을참고한다.) 메인마이크로프로세서인 ATmega128에는아래표와같이연결되어 Data 통신을제어한다.
[ 그림 2.18] 통신회로 이동로봇의센서데이터를확인하기위함과원격제어등을이용하려면통신에대하여알아야한다. 데이터통신은 Rx( 수신 ) 와 Tx( 송신 ) 로구분되며 Max232칩에의하여통신을주도한다. 블루투스에관련하여 DCD는다른디바이스와연결되었을때 Low레벨로출력되며, Pair는페어링됐을때 Low레벨로출력이된다. PE 0 PG 0 RXD1-128 (Data Receive, B-RXD) B-DCD (Bluetooth Connect Detect, Active Low) PE 1 PG 2 TXD1-128 (Data Transmitter, B-TXD) B-Pair (Pairing Input, Active Low) 여기까지 CRX10 의메인프로세서 (ATmega128) 에연결된기본회로에대하여설 명하였으며, 다음파트에서는각기능에대한설명과함께예제를통하여본교재 를진행하려한다.