AVR128 자료.hwp

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "AVR128 자료.hwp"

Transcription

1 [AVR128의특징과기본구조 ] 04. AVR128의특징 AVR은 8-비트 RISC(Reduced Instruction Set Computer) 구조로명령어가간단하며동작속도가빠르고, 1MHz당약 1MIPS(Million Instruction Per Second) 의성능을보인다. AVR 의대표적인특징은다음과같다. 향상된 RSIC구조 - 133개의강력한명령어들이대부분단일클럭으로실행된다 X 8 범용동작렉지스터 + 주변콘트롤레지스터로구성 - 완전정적동작 - 16MHz 환경에서 16MIPS 이상의성능 - 2사이클곱셈기를칩에내장 비휘발성프로그램과데이터메모리 -128K Byte In-System 프로그램플래쉬메모리 ( 내구성 : 최대 10,000번쓰고지울수있다.) - 독립락비트를지원하는옵션부트코드섹션 - 칩에내장된부트프로그램으로 In_System 프로그래밍가능 - 읽고쓰는동작을동시에수행가능 - 4K Byte EEPROM ( 내구성 : 최대 100,000번쓰고지울수있다.) - 4K Byte 내장형 SRAM - 최대 64K Byte 이상의외부메모리영역을갖는다. - 소프트웨어의보안을위한프로그래밍방식의락을설정할수있다. - In-System 프로그램을위한 SPI 인터페이스방식을지원 JTAG(IEEE std 호환 ) 인터페이스제공 - JTAG 표준에근거한 Boundary-scan 제공 - 방대한칩내장형디버그제공 - JTAG 인터페이스로플래쉬, EEPROM, 퓨즈와락비트를프로그래밍가능하다. 주변사양 - 두개의 8-bit Timer/Counter 와독립된프리스케일러. 비교모드제공 - 두개의확장된 16bit Timer/Counter와독립된프리스케일러, 비교모드, 캡쳐모드제공 - 실시간 Counter 와독립된발진기제공 - 두개의 8-bit PWM 채널

2 - 6개의 PWM 채널과 2에서 16Bits 사이의프로그램가능한해상도지원 - 비교기출력 - 8 채널, 10bit ADC - 8 Single-ended 채널 - 7 독립채널 - 2 독립채널과프로그램가능한 1x, 10x, 200x의 Gain - Byte 지향의두선직렬인터페이스제공 - 두개의프로그램가능한직렬 USART 제공 - 마스터 / 슬레이브 SPI 직렬인터페이스 - 프로그램가능한 Watchdog Timer 와칩내장형발진기 - 칩내장형아날로그비교기 독특한마이크로콘트롤러사양 - 파워온리셋과프로그램가능한 Brown-out 감지기 - 내부조율 RC 발진기 - 내부와외부의인터럽트입력기 - 6가지슬립모드 : 아이들, ADC 노이즈감쇄기, 저전원, 무전원, 대기상태, 연장대기상태 - 소프트웨어로선택가능한클락주파수 - 퓨트비트설정으로 Atmega103 호환모드가능 - 모든 Pull-up 설정해제 I/O와페키지 - 53개의프로그램가능한 I/O라인 - 64개의 TQFP와 64패드 MLF 동작전원 - ATmega128L : 2.7V ~ 5.5V - ATmea128 : 4.5V ~ 5.5V 동작속도 - ATmega128L : 0 ~ 8MHz - ATmega128 : 0 ~ 16MHz 05. AVR128의외부구조 ATmega128 의핀배치는아래와같다.

3 그림 1 ATmega128 의핀배치 VCC(21.52) : 마이크로프로세서가동작하므로공급하는전원으로두가지타입에따라전원의범위가다르다. (ATmega128L : 2.7V~5.5V / ATmega128 : 4.5V ~ 5.5V) GND(22,53,63) : 신호의접지핀으로사용된다. XTAL1, XTAL2(23,24) : 수정발진기의입 / 출력핀으로서크리스털이나오실레이터를접속한다. 그림 2 크리스털및오실레이터접속도 Reset(20) : 리셋입력핀으로서 50ns 이상의 Lowlevel 입력이지속되면리셋이발생한다.

4 PORT A/B/C/D/E : 반이중 I/O 포트로내부풀업저항된 8비트 / 양방향 / 병렬 / 범용포트이다. DDRX, PORTX, PINX 의레지스터를이용해제어를한다. PORTF : 반이중 I/O 포트로내부풀업저항된 8비트 / 양방향 / 병렬 / 범용포트이다. A/D 컨버터의입력포트로도사용된다. PORTG : 반이중 I/O 포트로내부풀업저항된 5 비트 / 양방향 / 병렬 / 범용포트이다. AVCC(64) : A/D 컨버터및포트 F의전원 (ADC를이용하지안더라도외부적으로 VCC에연결되어야한다.) AGND(63) : AVCC 에대한전원접지 ( 반드시 GND 와접속할것 ) AREF(62) : A/D 컨버터의기준전압 PEN(1) : SPI 활성화를시키는프로그래밍인에이블핀으로서파워온리셋시 LOW로유지함으로서 SPI활성화상태가된다. 일반적인동작모드에서는사용하지않는다. 06. AVR128 의내부구조 ATmega128 의내부구조는아래와같다.

5 그림 3 블럭도 병렬처리의최대성능을위해서 AVR은 Garvard 구조를사용한다 - 프로그램 / 데이터에대해분리된메모리와버스가사용된다. 고성능의 ALU는모든 32개의범용레지스터와직접연결되어단일사이클로동작한다.

6 그림 4 ATmega128 의코어부분의블럭도 ATmega128이하버드구조와 2단계파이프라인처리방식으로프로그램명령을인출하여실행하는동작을그림5에보였다. AVR의이러한진보된설계기술은결국 CPU가시스템클럭의 1주기에평균적으로 1개의명령을실행하도록함으로써클럭주파수 1MHz당 1MIPS의처리속도에해당하는매우높은성능을발휘하는것이사능하도록하였다. 그림 5 그림 6과같이 1클럭사이클동안에 1개의명령에서 2개의레지스터오퍼랜드가사용되는연산으로수행하고그결과를다시 destination register에저장하는처리한다.

7 그림 AVR128 의메모리구조

8 (1) 프로그램메모리 ATmega128은내부에프로그램메모리로사용하는 128KB의플래쉬메모리를가지고있다. 1 Flash Memory - 128Kbyte (64K*16bit) - 16bit or 32bit - Application / Boot Flash section - Programming Writing SPI 통신방식을이용한 ISP기능이용 JTAG 에뮬레이터사용 병렬프로그래밍모드이용 그림 7 프로그램메모리 (2) 데이터메모리 ATmega128의데이터메모리는내부데이터메모리로서의 SRAM, 외부데이터메모리 SRAM, 그리고내부 EEPROM로 3가지종류로나눌수있다 Registers($00~$1F)

9 - 32 레지스터는 AVR 모든시리즈에서의사용되는범용레지스터로서의역할을하게된다. 그림 7 범용레지스터 그림 8 데이터메모리 3 64 I/O Registers ($20~$5F) - 각종 I/O 디바이스들을제어하기위한레지스터 - IN / OUP 명령어명령사용 ($20~$5F $00~$3F라고지정해야한다.) - ATmega128 datasheet (p.355 ~ p357참조 ) Ext I/O Registers ($60~$FF) - ATmega128에추가된각종 I/O 디바이스들을제어하기위한레지스터 - In / OUP 명령어대신 LD/LDS/LDP, ST/STS/STD 명령어를사용해야한다. ( 16bit) - ATmega128 datasheet (p.355 ~ p357참조 ) 5 내부 SRAM (0x0100 ~ 0x10FF) - 4Kbyte (4096 * 8bit) - 각종사용자변수 / 스택영역으로사용 6 외부 SRAM (0x1100 ~ 0xFFFF)

10 - 사용자가정해진 4KB 보다더확장된데이터메모리를필요할때약 60KB의외부데이터메모리영역으로이용가능하다. 7 EEPROM - 4Kbyte 내장 - 불휘발성 - 다른데이터메모리어드레스영역과는별개의영역을할당받게된다. - 단일바이트로읽고쓸수있다. 08.AVR128의외부인터페이스외부메모리인터페이스가제공되며외부 SRAM / 플래쉬 / LCD디스플레이어 / ADC와같은외부메모리장치에대한인터페이스를구동시키는데아주적합하게되어있다. 그림 11 외부인터페이스 ( 예 : Ext SRAM ) 10. 락 / 퓨즈비트 ATmega128에서는메모리보호기능을설정하기위하여 1byte 구조로된메모리락비트 (memory lock bit) 를가지며, 기본적인시스템설정용으로 3byte 구조인퓨즈비트 (fuse bit) 를가지고있다. 1 Flash Lock Bit : 코드프로그램의락설정 2 Boot Lock Bit : 부트프로그램락설정 3 Fuse Bit : 103호환 / 클럭선택 / start-up time 등의설정

11 그림 12 PonyProg 에서의 lock / fuse 설정 ( 특별한경우가아니라면 ATmega128 에서는다음과같이설정하면된다.) 11. 시스템클럭 ATmega128에서는전력소비를줄이기위하여서로다른슬립모드를사용함으로써사용하지않는모듈에대한클럭을정지시킨다. 이를위해서내부클럭시스템이아래그림과같이세부적으로나뉘어있다.

12 그림 13 클럭발생및배분블록도 (1) 클럭시스템 1 CPU Clock - AVR 동작을고려한시스템의일부로써동작한다. - CPU 클럭을정지시키면범용동작과계산을수행하지못한다. 2 I/O Clock - 주요 I/O 모듈에의해사용된다. ( 타이머 / 카운터, SPI, USART) - 외부인터럽트모듈에의해서도사용된다. ( 예외, 비동기적인인터럽트 ) 3 FLASH Clock - 플래쉬인터페이스의동작을제한한다. 4 ASY Clock - 비동기타이머 / 카운터가 32KHz 클럭크리스탈로부터직접클럭동작을하도록해준다. - 칩이슬립모드에있을때실시간카운터처럼사용할수있게해준다. 5 ADC Clock - ADC 결과의정확도를높이기위하여 CPU와 I/O클럭을정지시켜서디지털회로에서발생하는노이즈를감소시켜준다. 이는 ADC결과에정확도를준다. (2) 클럭소스 ATmega128에서의클럭공급은다양한환경에서적합하게구성할수있도록되어있다.

13 - 클럭공급방법 : 외부크리스탈 / 세라믹레조레이터, 외부저주파크리스탈, 외부 RC 오실레이터, 내부 RC 오실레이터, 외부클럭 12. 시스템리셋 ATmega128이리셋되면모든 I/O 레지스터들이디폴트값으로초기화되며프로그램은리셋벡터로부터시작된다. 리셋소스로는아래와같이 5가지로구성되어있다. (ATmega128 DtaSheet p.48 Table 19, Figure 23,24,25,26,27 참조 ) 1 Power-on Reset : Vcc가 Power-on Reset Threshold(1.4V) 이하일때리셋된다. 2 External Reset : /RESET 핀에지정된최소폭 (50ns) 이상의 L레벨 (0.2V) 펄스가입력될때리셋된다. 3 Watchdog Reset : 지정된주기이상이경과되어워치독기능이동작함으로써리셋된다. 4 Brown-out Reset : 정해진시간 (2us) 이상동안설정된전원 Vbot(2.6V) 이하로떨어져 Brown-out Detector가동작함으로써리셋된다. 5 JTAG AVR Reset : JTAG 시스템에서리셋레지스터에논리값 1을저장하고이에관련된하드웨어가동작함으로써리셋된다. 13. 슬립모드슬립모드 (Sleep Mode) 는 MCU 내부에서사용하지않는모듈들의동작을정지시켜소비전력을절감하기위한동작이다. ATmega128은 6가지의다양한슬립모드를제공한다. 1 Idle 2 ADC Noise Reduction 3 Power-down 4 Power-save 5 Standby 6 Extended Standby 14. 부트로더 ATmega128에서부트로더는 MCU 자신에의하여프로그램을다운로드 / 업로드하기위한 Read-While-Write Self- Programming 기능을제공한다. 이것을플래시메모리에들어있는부트로더프로그램에의하여 MCU가스스로응용프로그램을갱신하는유연한기능을할수도있다. AVR128의내장 I/O 기능 15. I/O 제어 (1) ATmega128의 I/O 구성및특징

14 I/O PORT 구성 - 8비트 / 양방향 / 범용 / 병렬 I/O포트 ( PORT A ~ PORT F ) 6개 - 5비트 / 양방향 / 범용 / 병렬 I/O포트 ( PORT G ) 1개 I/O PORT 특징 - Read-modify-Write 동작 - 최대구동전류 40mA - 풀업저항 (Pull-up resistor) 설정가능 I/O PORT 구조및동작 그림 14 병렬 I/O 핀의구조 그림 15 병렬 I/O핀의기본구조 (2) I/O 관련레지스터각포트에는 3개의 I/O레지스터 (DDRx. PORTx, PINx) 영역을가진다. 아래에서는여러 PORT중에서 PORT A를기준으로 I./Owpj와관련된레지스터를설명한다. 1 DDRA(Data Direction Register) - PORT A의입 / 출력방향설정을위한레지스터

15 - 레지스터를 SET(1) 하면출력으로 CLEAR(0)kaus 입력으로설정된다. 2 PORTA(Data Register) - 출력용데이터값을위한레지스터 3 PINA(Input Pins Address) - 입력핀에해당하는레지스터로서입력된값을표시한다. 4 SFIOR(Special Function I/O Register) - Bit2, PUD(Pull-up Disable) : 모든포트의풀업저항설정을위한레지스터 - 1 = Disable / 0 = Enable (2) PORT의입 / 출력제어 1 PORT 출력제어 1 DDRx 레지스터의각비트를 1로셋트하면해당포트의핀이출력핀으로설정된다. 2 PORTx 레지스터의각비트를 1로셋트하면해당포트의핀이 1값을출력한다. PORTx 레지스터의각비트를 0로셋트하면해당포트의핀이 0값을출력한다. Tip >> TEST에있어서는 LED만한것도없다. LED 부가회로는그구성에있어서는아주단순한모습이지만앞으로있을 I/O, 타이머,

16 USART, ADC까지모든실습에이용될수있는유용한소자이다. 실습에필요한 LED 회로를첨부하니실습에이용하기바란다. 2 PORT 입력제어 1 DDRx 레지스터의각비트를 0로클리어하면해당포트의핀이입력핀으로설정된다. 2 PINx 레지스터으각비트를읽어들이면해당포트의핀입력값을알수있다. Tip >> 스위치는정말단순하다!! LED 부가회로만큼이나자주사용되는것은스위치회로이다. 단순한구성이지만이를이용하여외부입력값을받을수있기때문이다. 본세미나에서도아래의스위치를이용하여다양한외부입력값을포트값 / 외부인터럽트로처리하여알아보기로한다. ( 스위치 ON = 0, 스위치 OFF = 1)

17 (3) I/O 부가기능 I/O포트의각핀들은대부분기본적인범용 I/O 기능이외에부수적인기능을가지고있다.

18 1 PORT A 2 PORT B - 시분할다중화된데 - 타이머 / 카운터이터버스 - SPI - 하위어드레스버스 3 PORT C - 상위어드레스버스 4 PORT D - 타이머 / 카운터 - 외부인터럽트 - USART1 - TWI 직렬통신 5 PORT E - 타이머 / 카운터 - 외부인터럽트 - USART0 6 PORT F - A/D 컨버터 - JTAG 7 PORT G - 타이머 / 카운터 - 외뷈모리인터페이스 AVR128의내장 I/O 기능 16. 인터럽트 ATmega128에는리셋을포함하여모두 35종의리셋및인터럽트벡터를가지고있다. 이러한인터럽트구성은외 / 내부장치의서비스요청에 MCU가가장빠르게대응할수있는

19 방법이기때문에사용자가원하는작업을수행하는중요한수단이된다. (1) 인터럽트 (Interrupt) 란? CPU 외부의하드웨어적인요구에의해서정상적인프로그램의실행순서를변경하여보다시급한작업을먼저수행한후에다시원래의프로그램으로복귀하는작업을말한다. 인터럽트에대한이해 비유 ) 독서하던중에 메인프로그램실행 엄마가부른다. 인터럽트발생 책갈피로읽던페이지를표시해두고 복귀주소저장 엄마가가스불을끄라고하셔서가스불을껏다. 인터럽트벡터점프 / 처리 다시책갈피로표시해둔페이지를핀다. 복귀주소로드 독서를계속한다. 메인프로그램계속실행 인터럽트의처리과정 1 주프로그램실행 2 인터럽트발생 3 복귀주소저장 4 인터럽트벡터로점프 5 인터럽트처리 6 인터럽트처리완료 7 복귀주소로드 8 마지막에실행되던주소로점프 9 주프로그램실행 (2) 인터럽트의종류 ATmega128의경우에는 35종의리셋및인터럽트벡터를가지고있는아래그림과같이구성되어있다. 리셋및인터럽트벡터를분류해보자.

20 RESET Ext, INT TIMER 0 TIMER 1 TUMER 2 1개 8개 2개 5개 2개 TIMER 3 USART0 USART1 ADC 기타 5개 3개 3개 1개 5개 인터럽트우선순위? 인터럽트의요청이중복될수도있는경우를대비하여각인터럽트사이에는하드웨어적으로우선순위를정해두었다. 이에따라인터럽트발생이동시에될경우우선순위가높은인터럽트가먼저실행되게된다.

21 (3) 인터럽트의제어방법위의여러인터럽트를사용하기위해서는 SREG 레지스터의 I비트를 Set 시켜모든인터럽트를허용해야하며사용할인터럽트의개별적인 Enable 비트를 Set 시켜야만한다. 그사용법에대해서는외부인터럽트제어부분에서예를들어설명하니참고하기바란다. 17. 외부인터럽트제어 ATmega128에서외부인터럽트가 8개지원되는데이는 8개의외부핀 (INT7~0) 을통해서입

22 력되는신호에의하여발생하는인터럽트를말한다. (1) 외부인터럽트 (INT7~0) 의특징 - 외부인터럽트는 INT7~0핀의트리거동작으로인터럽트가발생된다. - LOW/ 상승에지 / 하강에지의방식으로트리거신호를선택할수있다. - 외부인터럽트는 INT7~0 핀의입 / 출력방향에관계없이인터럽트가발생된다. ( 소프트웨어적으로데이터를출력하여인터럽트를요구할수도있다.) - INT7~4 : I/O클럭이있어야만사용가능 - INT3~0 : 비동기적검출이가능하다.( 슬립모드를깨울때이용되기도한다.) (2) 외부인터럽트관련레지스터외부인터럽트를제어하기위해서는상태레지스터 (SREG) 와외부인터럽트관련레지스터 (EIMSK, EICRA, EICRB, EIFR) 의사용법을알아야한다. 1 SREG(Status Register) MCU의현상태및최근수치명령실행에대한결과를포함한다. 상태레지스터는모든 ALU 연산을수행후갱신된다. Bit7.I(Global Interrupt Enable) : 모든인터럽트활성화비트 2 EIMSK(External Interrupt Mask Register) Bit7..0_INT7~0 Q 비트를셋 (1) 시키면해당외부인터럽트핀이활성화된다. 단, SREG의 I비트가 1로셋된상태여야한다. 3 EICRA(External Interrupt Control Register A)

23 외부인터럽트의트리거방식을 LOW/ 상승엣지 / 하강엣지중에선택하는레지스터 ISCn1 ISCn0 설명 0 0 INTn의 LOW 신호시에일반적인인터럽트요청을한다. 0 1 (reserved) 1 0 INTn의하강엣지신호시에일반비동기적인인터럽트를요청한다 1 1 INTn의상승엣지신호시에일반비동기적인인터럽트를요청한다 4 EICRB(External Interrupt Control Register B) 외부인터럽트의트리거방식을 LOW/ 상승엣지 / 하강엣지중에선택하는레지스터 ISCn1 ISCn0 설명 0 0 INTn의 LOW 신호시에일반적인인터럽트요청을한다. 0 1 어떠한신호의변화에서든일반적인인터럽트요청을한다. 1 0 INTn의하강엣지신호시에일반비동기적인인터럽트를요청한다 1 1 INTn의상승엣지신호시에일반비동기적인인터럽트를요청한다 5 EIFR(External Interrupt Flag Register) Bit7..0_ 외 / 내부로부터 INT7:0 핀에인터럽트가요청되면해당비트가 Set(1) 된다. 그후에인터럽트루틴이실행될때해당비트가 Clear(0) 된다. (2) 외부인터럽트동작 1 인터럽트가활성화 (SREG.7/EIMSK 해당비트활성화 ) 되어잇는상태에서 2 외부INT의동작 dpt지나논리신호에의해인터럽트가요청되면 3 제일우선 INTFn = 1 상태로플래그가 Set되고 4 실행중이던메인프로그램의프로그램카운터값을스택에저장하게된다. 5 그후해당인터럽트벡터로점프하게된다.

24 6 지정된인터럽트루틴을실행하는동시에 INTFn = 0 상태로플래그가 Clear된다. 7 해당인터럽트의루틴이처리된다. 8 해당인터럽트의루틴이끝나게되면 RETI 명령을받는다. 9 스택으로부터저장된프로그램카운터값을로드한다. 10 동작중이던프로그램위치로복귀하여실행중이던부분부터메인프로그램이제작동된다. 위의내용은외부인터럽트의처리과정을자세히서술하여설명한것입니다. 이게무슨말인지받아들이기어려운것은우선모르는용어가많이나왔을것이며벡터주소값에대한이해가부족한탓이죠. 처음에는어령루수도있으니이해가안된다면우선넘어가고후에자세히읽어본다면인터럽트의이해가쉬워질것입니다. (3) 외부인터럽트제어아래의소스는간단히스위치회로를구성하여스위치를눌렀을때외부인터럽트가걸려메인프로그램 (LED ALL OFF) 에서인터럽트루틴 (LED ALL ON) 이실행되기위한프로그램이다.

25 AVR의내장 I/O 기능 18. 타이머 / 카운트 ATmega128는 4개의타이머 / 카운트로구성되어있으며, 이중타이머 / 카운터 0은 8비트구조로서카운터로이용될때타이머카운터 0의카운터입력이 IOC1과 0으로받아 RTC 기능을가지는것을제외하고는타이머 / 카운터 2와기능이같으며타이머카운터1은 16비트구조로서타이머 / 카운터 3과기능이같다. (1) 타이머 / 카운터의이해타이머 / 카운터를흔히통칭해서부르며같은기능이라고생각하고사용하지만세분하여볼때는타이머와가운터는엄연히틀린기능을말하는것을알아두어야한다. 1 타이머는 MCU의내부클럭 (clk I/O > 분주기 >clk T ) 을이용하여일정시간간격의펄스를만들어내거나일정시간경과후에인터럽트를 qfktod시키는기능을말한다. 2 카운터는외부핀 (ROSC1, TOSC2, T1, T2, T3) 을통해서들어오는펄스를계수 (Edge Detector하여 Event Counter로서동작되는것을말한다. ( 펄스 = 사건, 카운터값 = 사건의횟수 ) 타이머 - 내부클럭 ( 빠름 / 분주가능 : 범위내에서클럭선택가능 ) - 동기모드카운터 - 외부클럭 ( 느림 / 분주불가능 : 외부클럭그대로사용 ) - 비동기모드 이렇게타이머와가운터는입력받는소스가틀리면서원리적인차이가있지만그사용목적과결과는같은이유로혼용되어부르며사용되고있다. 19. 타이머 / 카운트 0, 2 제어타이머 / 카운터 0과 2는 8비트구조로서 OVERFLOW, PWM 비슷한기능을가지고제어방식도비슷하다. 차이점이있다면타이머 / 카운터 0은 KHz의크리스탈을접속하는 TOSC1 및 TOSC2단자를가지고있어서 RTC의기능을갖도록할수있으며다른타이머 / 카운터와는틀리게내부클럭을사용하든외부의클럭을사용하든모두프리스케일러의분주기능을사용할수있다는것이다.

26 (1) 타이머 / 카운터 0, 2의특징 - 8비트 (0x00~0xff) 구조 - 10비트 (0x00~0x3ff) 프리스케일러 - Overflow와 Output Compare Match 인터럽트 - 타이머 / 카운터 0의경우다른타이머 / 카운터와는색다른기능을가진다. * RTC 기능 * 타이머와카운터모두프리스케일러를사용 * I/O클럭과독립된외부 KHz 크리스탈에동작가능 (2) 타이머 / 카운터 0, 2의동작 - 내 / 외부클럭중하나를선택하여기준클럭으로삼는다. - 타이머 / 카운터 0, 2은 0x00~0xff까지 Count하여 Overflow되면 OVF 인터럽트가걸린다. - 타이머 / 카운터 0, 2은 0x00~0xff까지 Count하다가지속적으로 RCNT값과 OCR값을비교하여같으면 COMP 인터럽트가걸린다. - 타이머 / 카운터 0, 2은동작을알기위해서는아래그림 3개를필히이해해야한다.

27 그림타이머 / 카운터 0 의 Counter Unit 그림타이머 / 카운터 0 의 Output Compare Unit

28 그림타이머 / 카운터 0 의블록도 용어설명 - BOTTOM : 카운터가가질수있는최소값 0x00을나타낸다. - MAX : 카운터가자질수있는최대값 0xff를나태낸다. - TOP : 각동작모드에따라카운터가실제로도달하는최대값을나타낸다. ( CTC 모드의경우 TOP = OCR ) - COUNT : TCNT0의 1씩증가또는감소하는것 - DIRECTION : COUNT의증감 / 감소설정 - CLEAR : Clear TCNT0 - CLK TO : 타이머 / 카운터클럭 (3) 타이머 / 카운터 0 관련레지스터타이머 / 카운터 0을제어하기위해서는상태레지스터 (SREG) 와타이머 / 카운터 0관련레지스

29 터 (TIMSK, TIFR, TCCR0, TCNT0, OCR0, ASSR, SFIOR) 의사용법을알아야한다. 1 TIMSK(Timer/Counter Interrupt Mask Register) 타이머 / 카운터 0~2에서발생하는인터럽트를개별적으로허용하는기능을수행하는레지스터 Bit 1 - OCIE0(Timer/Counter0 Output Compare Match Interrupt Enable) OCIE0=1로 Set 시켜주면 Output Compare Match Interrupt가활성화된다. COMP 인터럽트를사용하려면 SREG의 I = 1인상태여야한다. Bit 0 - TOIE0(Timer/Counter0 Overflow Interrupt Enable) TOIE0=1로 Set시켜주면 Overflow Intrrupt가활성화된다. OVF 인터럽트를사용하려면 SREG의 I=1인상태여야한다. 2 TIFR(Timer/Counter Interrupt Flag Register) Bit 1 - OCF0(Output Compare Match Flag) TCNT0 값과 OCR0 값을비교하여이것이같으면이비트가 1로 Set 되면서출력비교인터럽트가요청된다. 이비트는인터럽트처리의시작과함께 0으로 Clear된다. Bit 0 - TOV0(Timer/Counter Overflow Flag) 타이머 / 카운터 0에서 Overflow가발생되면이비트가 1로 Set되면서출력비교인터럽트가요청된다. 이비트는인터럽트처리의시작과함께 0으로 Clear된다. 3 TCCR0(Timer/Counter Control Register 0) : 동작모드설정 / 분주비설정등

30 Bit 7 - FOC0(Force Output compare) 강제로 OSC0 단자에출력비교래치신호를출력 Bit 3, 6 - WGM01, WGM00 (Waveform Generation Mode) : 파형출력모드 Bit 5, 4 - COM01, COM00 (Compare Match Output Mode) : 비교매치출력모드 Mode COM01 COM00 설명 0 0 범용입출력포트 (OC0 출력차단 ) PWM 모드가아닌경우 0 1 비교매치 >> OC0 Toggle 출력 (Normal / CTC) 1 0 비교매치 >> OC0 = 0 출력 1 1 비교매치 >> OC0 = 1 출력 Mode COM01 COM00 설명 0 0 범용입출력포트 (OC0 출력차단 ) 0 1 (reserved) FAST PWM 1 0 비교매치 >> OC0 = 0 출력오버플로우 >> OC0 = 1 출력 1 1 비교매치 >> OC0 = 1 출력오버플로우 >> OC0 = 0 출력 Mode COM01 COM00 설명 0 0 범용입출력포트 (OC0 출력차단 ) 0 1 (reserved) Phase Correct 상향카운터비교매치 >> OC0 = 0 출력 1 0 PWM 하향카운터비교매치 >> OC0 = 1 출력 1 1 상향카운터비교매치 >> OC0 = 1 출력하향카운터비교매치 >> OC0 = 0 출력 Bit 2, 1, 0 - CS02~00 (Clock Select)

31 4 TCNT0(Timer/Counter Register 0) 타이머 / 카운터 0 의 8 비트카운터값을저장하고있는레지스터 5 OCR0(Timer/Counter Output Compare Register 0) 타이머 / 카운터의 0의카운터값인 TCNT0와비교하여 OC0 단자에출력신호를발생하기위한 8비트값을저장하고있는레지스터 6 ASSR(Asynchronous Status Register) -타이머/ 카운터0의외부클럭에의하여비동기모드로동작하는경우에관련된기능수행 Bit 3 - AS0(Asynchronous Timer/Counter0) AS0 = 0 : 내부클럭 ( clk I/O ) 동기모드 AS0 = 1 : 외부클럭 (TOSC1) 비동기모드 Bit 2 - TCN0UB(Timer/Counter0 Updata Busy) Bit 1 - OCR0UB(Output Compare Register0 Update Busy)

32 Bit 0 - TCR0UB(Timer/Counter Control Register0 Update Busy) 7 SFIOR(Special Function I/O Register) Bit 7 - TSM(Timer/Counter Synchronization Mode) 모든타이머 / 카운터들을동기화시키는기능을수행한다. Bit 1 - PSR0(Prescaler Reset Timer/Counter0) 타이머 / 카운터0의프리스케일러를리셋시키며동작후에자동적으로클리어된다. (4) 타이머 / 카운터 0의동작모드 1 Normal Mode - 일반적인타이머오버플로우인터럽트가필요할때사용 - 상향카운터 - 0x00 ~ 0xFF 계수동작반복 - 카운트도중 Clear 없음 - 오버플로우 (OVF) 인터럽트 (MAX = 0xFF값일때발생 ) - 비교매치 (COMP) 인터럽트 ( 파형을예상하지못하기때문에추천하지않음 ) 2 CTC Mode(Compare Timer in Compare Match Mode) - 주파수분주기능으로주로사용 - 상향카운터 - 0x00 ~ OCR0 계수동작반복 - OCR0값과 TCNT0 값이같으면카운트도중 Clear - 오버플로우 (OVF) 인터럽트 ( MAX = OCR0값일때발생, COMP 인터럽트와동일하게작 동되기때문에추천하지않음 ) - 비교매치 (COMP) 인터럽트 Mode COM01 COM00 설명 0 0 범용입출력포트 (OC0 출력차단 ) PWM 모드가아닌경우 0 1 비교매치 >> OC0 Toggle 출력 (Normal / CTC) 1 0 비교매치 >> OC0 = 0 출력 1 1 비교매치 >> OC0 = 1 출력

33 그림타이머 / 카운터 0 의 CTC 모드동작 3 FAST PWM - 높은주파수 PWM 파형발생이필요할때사용 - 상향카운터 (Single-Slope Operation) - 0x00 ~ 0xFF 계수동작반복 - TCNT0과 OCR0의 Compare Match 되면 OC0에 LOW 출력 (COM1:0 = 2) - 0xFF 0x00 오버플로우되면 OC0에 HIGH출력 (COM 1:0 = 2) Mode COM01 COM00 설명 0 0 범용입출력포트 (OC0 출력차단 ) 0 1 (reserved) FAST PWM 1 0 비교매치 >> OC0 = 0 출력오버플로우 >> OC0 = 1 출력 1 1 비교매치 >> OC0 = 1 출력오버플로우 >> OC0 = 0 출력 그림타이머 / 카운터 0 의 FAST PWM 모드동작

34 5 Phase Correct PWM - 높은분해능의 PWM출력파형을발생하는데사용 - 상향카운터 0x00 0xFF - 하향카운터 0xFF 0x00-0x00 ~ 0xFF ~ 0x00 계수동작반복 - 상향카운터비교매치 >> OC0 = 0 출력 (COM0 1:0 = 2) - 하향카운터비교매치 >> OC0 = 1 출력 (COM0 1:0 = 2) Mode COM01 COM00 설명 0 0 범용입출력포트 (OC0 출력차단 ) 0 1 (reserved) Phase Correct 상향카운터비교매치 >> OC0 = 0 출력 1 0 PWM 하향카운터비교매치 >> OC0 = 1 출력 1 1 상향카운터비교매치 >> OC0 = 1 출력하향카운터비교매치 >> OC0 = 0 출력 그림타이머 / 카운터 0 의 Phase Correct PWM 모드동작

35 (4) 타이머 / 카운터실습1 아래의내용은타이머 / 카운터 0을이용하여 LED가 1초마다 ON/OFF 시키는프로그램이다.

36 [ATmega128 타이머 / 카운터 0,1,2,3 비교표 ]

37 타이머 / 카운터 0 타이머 / 카운터 1 타이머 / 카운터 2 타이머 / 카운터 3 기본구조 8Bit 16Bit 8Bit 16Bit 타이머입력 clk I/O clk I/O clk I/O clk I/O 카운터입력타이머프리스케일러레지스터동작모드 TOSC1와 TOSC2 (32.768KHz) TOSC1 1, 8, 32, 64, 128, 256, 1024 TCCR0 TCNT0 OCR0 ASSR SFIOR TIMSK TIFR NORMAL CTC Fast PWM Phase Correct PWM T1 T2 T3 1, 8, 64, 256, , 8, 64, 256, , 8, 64, 256, 1024 TCCR1A TCCR3A TCCR1B TCCR3B TCCR1C TCCR2 TCCR3C TCNT1H, TCNT1L TCNT2 TCNT3H, TCNT3L OCR1AH, OCR1AL OCR2 OCR3AH, OCR3AL OCR1BH, OCR1Bl ASSR OCR3BH, OCR3Bl OCR1CH, OCR1Cl SFIOR OCR3CH, OCR3Cl ICR1H, ICR1L TIMSK ICR3H, ICR3L SFIOR TIFR SFIOR TIMSK, ETIMSK TIMSK, ETIMSK TIFR, ETIFR TIFR, ETIFR NORMAL, NORMAL, CTC, NORMAL CTC, Fast PWM, CTC Fast PWM, Phase Correct Fast PWM Phase Correct PWM, Phase Correct PWM, Phase and Frequency PWM Phase and Frequency Correct PWM Correct PWM 입력신호 TOSC1, TOSC2 T1,IC1 T2 T3, IC3 출력신호 인터럽트 기타 OC0 Overflow, Output Compare Match RTC기능타이머카운터모두프리스케일러사용 OC1A OC1B OC1C Overflow, Output Compare Match A/B/C, Input Capture Capture OC2 Overflow, Output Compare Match OC3A OC3B OC3C Overflow, Output Compare Match A/B/C, Input Capture Capture 20. 타이머 / 카운터 1, 3 제어 타이머 / 카운터 1 과 3 는 16 비트구조로서 OVERFLOW, PWM, Input Capture 비슷한기능을

38 가지고제어방식도비슷하다. (1) 타이머 / 카운터 1, 3의특징 - 16비트 (0x0000 ~ 0xFFFF) 구조 - 10비트 (0x0000 ~ 0x3FF) 프리스케일러 - Overflow, Output Compare Match A/B/C, Input Capture 인터럽트 - Output Compare Match 할때타이머가클리어된다.(CTC 모드 ) (2) 타이머 / 카운터 1, 3의동작 - 내 / 외부클럭중하나를선택하여기준클럭으로삼는다. - 타이머 / 카운터 1, 3은 0x0000 ~ 0xFFFF 까지 Count하여 Overflow되면 OVF 인터럽트가걸린다. - 타이머 / 카운터 1, 3은 0x0000 ~ 0xFFFF 까지 Count하다가지속적으로 TCNT값과 OCR 값을비교하여같으면 COMP 인터럽트가걸린다. - 타이머 / 카운터 1, 3은외부 ICn 핀으로부터트리거신호가입력되면현재의 TCNTn의값이입력캡쳐레지스터 ICRn으로저장되면서 IC 인터럽트가걸린다.

39 그림타이머 / 카운터 1 의블록도 (3) 타이머 / 카운터 1 관련레지스터타이머 / 카운터 1을제어하기위해서는상태레지스터 (SREG) 와타이머 / 카운터 1 관련레지스터 (TCCR1A, TCCR1B, TCCR1C, TCNT1H, TCNT1L, OCR1AH, OCR1Al, OCR1BH, OCR1BL, OCR1CH, OCR1CL, ICR1H, ICR1L, SFIOR, TIMSK, ETIMSK, TIFR, ETIFR) 의사용법을알아야한다. 1 TIMSK(Timer/Counter Interrupt Mask Register) 타이머 / 카운터 0~2에서발생하는인터럽트를개별적으로허용하는기능을수행하는레지스터 Bit 5 - TICIE1(Timer/Counter1 Input Capture Interrupt Enable) TICIE1 = 1로 Set시켜주면 Input Capture Interrupt가활성화된다.

40 CAPT 인터럽트를사용하려면 SREG I = 1인상태여야한다. Bit 4, 3 - OCIE1x(Timer/Counter1 Output Compare Match A, B Interrupt Enable) OCIE1x = 1로 Set 시켜주면 Output compare Match Interrupt가활성화된다. COMP 인터럽트를사용하려면 SREG I = 1인상태여야한다. Bit 2 - TOIE1(Timer/Counter Interrupt Mask Register) TOIE1 = 1로 Set시켜주면 Overflow Interrupt가활성화된다. OVF인터럽트를사용하려면 SREG의 I = 1인상태여야한다. 2 ETIMSK(Extended Timer/Counter Interrupt Mask Register) 타이머 / 카운터 1, 3에서발생하는인터럽트를개별적으로허용하는기능을수행하는레지스터 Bit 0 - OCIE1C(Timer/Counter1 Output Compare Match C Interrupt Enable) OCIE1C = 1로 Set시켜주면 Output compare Match C Interrupt 가활성화된다. COMP 인터럽트를사용하려면 SREG의 I = 1인상태여야한다. 3 TIFR(Timer/Counter Interrupt Flag Register) Bit 5 - ICF1(Timer/Counter1 Input Capture Flag) 타이머 / 카운터 1의외부 IC1핀의입력캡쳐신호또는아날로그비교기의신호로인하여캡쳐동작이 ehlas 이비트가 1로 Set 되면서입력캡쳐인터럽트가요청된다. 이비트는인터럽트처리의싲가과함께 0으로 Clear된다. Bit 4, 3 - OCF1x(Timer/Counter1 Output Compare Match A, B Flag) TCNT1rqkt과 OCR1값을비교하여이것이같으면이비트가 1로 Set되면서출력비교인터럽트가요청된다. 이비트는인터럽트처리의싲가과함께 0으로 Clear 된다. Bit 0 - TOV1(Timer/Counter1 Overflow Flag) 타이머 / 카운터1에서 Overflow가발생되면이비트가 1로 Set되면서출력비교인터럽트가요청된다. 이비트는인터럽트처리의시작과함께 0으로 Clear된다.

41 4 ETIFR(Extended Timer/Counter Interrupt Flag Register) Bit 0 - OVF1C(Timer/Counter1 Output Compare Match C Flag) TCNT1값과 OCR1값을비교하여이것이같으면이비트가 1로 Set 되면서출력비교 C인터럽트가요청된다. 이비트는인터럽트처리의시작과함게 0으로 Clear된다. 5 TCCR1A(Timer/Counter1 Control Register A) Bit 1, 0 - WGM11, WGM10 (Waveform Generation Mode) : 파형출력모드 TCCR1C 레지스터의 WGM00과결합하여타이머 / 카운터1의동작모드를설정한다. 그동작모드는아래와같다. Bit (7,6), (5,4), (3,2) - COM1x1, COM1x0 (Compare Match Output A, B, C Mode) Mode COM1x1 COM1x0 설명 PWM 모드가아닌경우 (Normal/CTC) 0 0 범용입출력포트 (OC1x 출력차단 ) 0 1 비교매치 >> OC1x Toggle 출력 1 0 비교매치 >> OC1x = 0 출력 1 1 비교매치 >> OC1x = 1 출력

42 Mode COM1x1 COM1x0 설명 FAST PWM 0 0 범용입출력포트 (OC1x 출력차단 ) 0 1 모드15의경우 OC1A 토글, 나머지차단나머지의경우 OC1x 출력차단 1 0 비교매치 >> OC1x = 0 출력오버플로우 >> OC1x = 1출력 1 1 비교매치 >> OC1x = 1 출력오버플로우 >> OC1x = 0 출력 Mode COM1x1 COM1x0 설명 0 0 범용입출력포트 (OC1x 출력차단 ) Phase (and Frequency) Correct PWM 모드9, 11의경우비교매치에서 OC1A 토글출력, 나머지차단나머지의경우 OC1x 출력차단상향카운터비교매치 >> OC1x = 0 출력하향카운터비교매치 >> OC1x = 1 출력상향카운터비교매치 >> OC1x = 1 출력하향카운터비교매치 >> OC1x = 0 출력 6 TCCR1B(Timer/Counter Control Register B) Bit 7 - ICNC1(Input Capture Noise Canceler) 이비트를 1로 Set해주면입력캡처단자 IC1으로입력되는캡처신호를위한노이즈제거회로가작동된다. 노이즈제거회로가작동되면입력캡처신호를필터링하게되는데이를이용하면시스템클럭의 4주기만큼지연되어작동된다. Bit 6 - ICES1(Input Capture Edge Select) 입력캡처단자 IC1으로입력되는신호의 dpt지의검출방법을결정짓는다. ICES1 = 1 이면상승에지일때검출된다. ICES1 = 0 이면하강에지일때검출된다. Bit 2,1,0 - CS12, 11, 10(Clock Select)

43 7 TCCR1C(Timer/Counter1 Control Register C) Bit 7,6,5 - FOC1A,B,C(Force Output Compare A, B, C) 강제로 OC1A, B, C 단자에출력비교매치신호를출력 8 TCNT1H, TCNT1L (Timer/Counter Register 1) 타이머 / 카운터 1 의 16 비트카운터값을저장하고있는레지스터 9 OCR1xH, OCR1xL (Timer/Counter Output Compare Register 1) 타이머 / 카운터 1의카운터값인 TCNT1과비교하여 OC1A, B, C 단자에출력신호를발생하기위한 16비트값ㅇ르저장하고있는레지스터 10 ICR1(Timer/Counter Input Compare Register 1)

44 입력캡처신호 IC1 에의하여 TCNT1 값을캡처하여저장하는 16 비트레지스터이다. 11 SFIOR(Special Function I/O Register) Bit 7 - TSM(Timer/Counter Synchronization Mode) 모든타이머 / 카운터들을동기화시키는기능을수행한다. Bit 0 - PSR321(Prescaler Reset Timer/Counter) 타이머 / 카운터 1~3의프리스케일러를리셋시키며동작후에자동적으로클리어된다. (4) 타이머 / 카운터 1의동작모드 1 Normal Mode - 일반적인타이머오버플로우인터럽트가필요할때사용 - 입력캡쳐동작이필요할때사용 - 상향카운터 - 0x0000 ~ 0xFFFF 계수동작반복 - 카운트도중 Clear 없음 - 오버플로우 (OVF) 인터럽트 (MAX = 0xFFFF 값일때발생 ) - 비교매치 (COMP) 인터럽트 ( 파형을예상하지못하기때문에추천하지않음 )

45 2 CTC Mode(Clear Timer on Compare Match Mode) - 주파수분주기능으로주로사용 - 상향카운터 - WGM 값에의하여 Mode 4,12는 TCNT1값과비교하는값의 OCR1x, ICR1으로다르다. - 0x0000 ~ OCR1x(ICR1) 계수동작반복 - OCR1x(ICR1) 값과 TCNT1값이같으면카운트도중 Clear - 오버플로우 (OVF) 인터럽트 (COMP 인터럽트와동일하게작동되기때문에추천하지않음 ) - 비교매치 (COMP) 인터럽트 Mode COM1x1 COM1x0 설명 PWM 모드가아닌경우 (Normal/CTC) 0 0 범용입출력포트 (OC1x 출력차단 ) 0 1 비교매치 >> OC1x Toggle 출력 1 0 비교매치 >> OC1x = 0 출력 1 1 비교매치 >> OC1x = 1 출력 그림타이머 / 카운터 1 의 CTC 모드동작 3 FAST PWM - 높은주파수 PWM 파형발생이필요할때사용 - 상향카운터 (Single-Slope Operation) - 0x00 ~ TOP 계수동작반복 - TOP값은모드에딸서 0x00FF, 0x01FF, ICR1, OCR1A으로설정가능하다. - TCNT1과 OCR1x의 Compare Match 되면 OC1x에 LOW출력 (COM1:0 = 10) - TOP 0x0000 오버플로우되면 OC1x에 HIGH(COM1:0 = 10)

46 Mode COM1x1 COM1x0 설명 FAST PWM 0 0 범용입출력포트 (OC1x 출력차단 ) 0 1 모드15의경우 OC1A 토글, 나머지차단나머지의경우 OC1x 출력차단 1 0 비교매치 >> OC1x = 0 출력오버플로우 >> OC1x = 1출력 1 1 비교매치 >> OC1x = 1 출력오버플로우 >> OC1x = 0 출력 그림타이머 / 카운터 1 의 FAST PWM 모드동작 4 Phase Correct PWM ( 위상교정 PWM) - 높은분해능의 PWM출력파형을발생하는데사용 - 상향카운터 0x0000 TOP - 하향카운터 TOP 0x0000-0x0000 ~ TOP ~ 0x0000 계수동작반복 - TOP값은모드에따라서 0x00FF, 0x03FF, ICR1, OCR1A으로설정가능하다. - 상향카운터비교매치 >> OC1x = 0 출력 (COM 1:0 = 10) - 하향카운터비교매치 >> OC1x = 1 출력 (COM 1:0 = 10)

47 Mode COM1x1 COM1x0 설명 0 0 범용입출력포트 (OC1x 출력차단 ) Phase (and Frequency) Correct PWM 모드9, 11의경우비교매치에서 OC1A 토글출력, 나머지차단나머지의경우 OC1x 출력차단상향카운터비교매치 >> OC1x = 0 출력하향카운터비교매치 >> OC1x = 1 출력상향카운터비교매치 >> OC1x = 1 출력하향카운터비교매치 >> OC1x = 0 출력 그림타이머 / 카운터 1 의 Phase Correct PWM 모드동작 5 Phase and Frequency Correct PWM ( 위상및주파수고정 PWM) - 높은분해능의 PWM 출력파형을발생하는데사용 - 상향카운터 0x0000 TOP - 하향카운터 TOP 0x0000 (Dual-Slope Operation) - 0x0000 ~ TOP ~ 0x0000 계수동작반복 - TOP값은모드에따라서 ICR1, OCR1A으로설정가능하다. - 상향카운터비교매치 >> OC1x = 0 출력 (COM 1:0 = 10) - 하향카운터비교매치 >> OC1x = 1 출력 (COM 1:0 = 10) - Phase Correct PWM과의다른점은 TOP값이 ICR1A으로만설정가능하다는것과그값이갱신할때 TCNT1 = TOP 일때갱신되는것이아니라 TCNT1값이 0x0000으로되는순간갱신된다는점이다. - 이러한방식은 PWM파형을완벽히대칭을이루게한다. - TOP 값이수시로변화시켜주파수가가변되는 PWM의경우에사용하면 Phase Correct

48 PWM 에비하여유리하다. 그림타이머 / 카운터 1 의 Phase and Frequency Correct PWM 모드동작 21. USART 제어 ATmega128에는같은기능을가지는 USART0, USART1 통신관련회로를가진다. USART = Universal Synchronous and Asynchronous serial Receiver and Transmitter (1) USART 특징 - 동기모드 : Master( 내부클럭 ), Slave( 외부클럭 :XCKn)

49 - 비동기모드 : 내부클럭사용 - 전이중통신 - 멀티프로세서통신 - 높은정밀도의보레이트발생기내장 - 전송데이터 5~9비트설정 - 스톱비트 1~2 설정 - 페리티비트설정 ( 사용, 미사용, 짝수패리티, 홀수패리티선택 ) - 에러검출가능 ( 패리티에러, 오버턴에러, 프레임에러 ) - 노이즈필터링 (3번샘플링동작 ) (2) USART 구성 1 클럭발생부 : 보레이트발생기, 외부클럭입력회로 - 비동기일반모드 : 내부클럭으로보레이트발생 - 비동기 2배속모드 : 내부클럭으로 2배의보레이트발생 - 동기마스터모드 - 동기슬레이브모드 그림 USART의동기모드작동시 XCKn 역할 2 송신부 : 송신버퍼, 송신시프트레지스터, 패리티발생기 3 수신부 : 수신버퍼, 수신시프트레지스터, 패리티검사기 (3) USART 인터럽트 1 수신완료인터럽트 데이터가수신되어수신시프트레지스터에서수신버퍼 (RXBn) 레지스터로전달될때인터럽트가걸린다 이때에는수신버퍼 (RXBn) 에아직읽지않은데이터가존재하는상태 2 송신완료인터럽트 송신시프트레지스터에있는송신데이터가모두전송되어비어있고송신버퍼 (TXBn) 도비어있을때인터럽트가발생된다. 송신버퍼 (TXBn) 에아직새로운송신데이터가 Write되지않은상태 3 송신데이터준비완료인터럽트 송신시프트레지스터로 UDRn값이전송되어송신버퍼 (TXBn) 가비어있을때인터럽트가발생한다.

50 송신버퍼가비어있어서새로운송신데이터를받을준비가된상태 (4) USART 동작아래의그림은 USART의클럭발생부, 송신부, 수신부의내부블록도이다. 각부의동작원리를이해하면 USART의전체적인동작을이해할수있다. 그림 USART의각구성부의동작블록도 (5) 전송데이터포맷 - ATmega128의 USART는전송데이터의포맷을여러형태로설정할수있도록되어있다. - Start bit : 1 - Data bit : 5, 6, 7, 8 or 9 - Parity bit : No, Even, Odd - Stop bit : 1 or 2

51 그림프레임포멧 (5) 비동기모드에서의 1비트샘플링 - 수신데이터의정확한검출을위하여 1빝의샘플링이이루어진다. - 검출을하기위해서 1비트당 16배주파수 (2배속모드 : 8배주파수 ) 를이용한다. - 16배주파수중중앙부 (8,9,10) 에 3번샘플링하여 2번이상인값으로처리 (6) USART 관련레지스터 USART 0과 1을제어하기위해서는 USART 0 / 1 관련레지스터 (UDRn, UCSRnA, UCSRnB, UCSRnC, UBRRnH, UBRRn) 의사용법을알아야한다. 1 UDRn (Usart 0 I/O Data Register) - UDRn 레지스터는송 / 수신되는데이터값을저장하는버퍼역할을하게된다. - UDRn은 TXBn( 송신버퍼 ) / RXBn( 수신버퍼 ) 레지스터로구성되어있는데이는 I/O 같은주소에공유된형태로구성되어있으며송 / 수신이라는다른일을하게구성되어있다. - 송신할때는 TXBn의데이터를전송한다.

52 - 수신할때는 RXBn 에수신된데이터를저장하게된다. 2 UCSRnA ( Usart Control and Status Register A) Bit 7 - RXCn (USART Receive Complete) RXCn = 1 : UDRn의수신버퍼에아직안읽은데이터가존재하는상태 RXCn = 0 : UDRn의수신버퍼를읽어서비워져있는상태 Bit 6 - TXCn (USART Transmit Complete) TXCn = 1 : 송신시프트레지스터에있는송신데이터가모두전송되고 UDRn의송신버퍼에아직새로운송신데이터가 Write 되지않은상태 Bit 5 - UDREn (USART Data Register Empty) UDREn = 1 : 송신버퍼가비어있어서새로운송신데이터를받을준비가된상태 Bit 4 - FEn (USRAT Frame Error) FEn = 1 : 수신할때프레임에러가발생한상태 # 프레임에러? - 수신문자의첫번째스톱비트가 0으로검출되는것 Bit 3 - DORn (USART Data Overrun Error) DORn = 1 : 수신할때오버런에러가발생한상태 # 오버런에러? - 수신버퍼에현재읽지않은데이터가들어있는상태에서수신시프트레지스터에새로운데이터가수신완료되고다시그다음수신데이터인 3번째데이터의스타트비트가검출된것 Bit 2 - UPEn (USART Parity Error) UPEn = 1 : 수신할때피리티에러가발생한상태 # 패리티에러? - 정보의전달과정에서오류가생겼는지를검사하기위해원래의정보에덧붙이는비트를패리티비트라하며데이터비트와패리티비트를계산하여짝수, 홀수를판별하여에러인지아닌지구분한다. ( 거의쓰이지않음 ) Bit 1 - U2Xn (Double the USART Transmission Speed) U2Xn = 1 : 비동기모드에서만유효한것으로서클럭의분주비를 16에서 8로절반만큼낮추어전송속도를 2배높이는기능을수행한다.

53 Bit 0 - MPCMn (USART Multi-Processor Communication Mode) MPCMn = 1 : 멀티프로세서통신모드로설정한다. 3 USCRnB (USART Control and Status Register B) Bit 7 - RXCIEn (USART RX Complete Interrupt Enable) RXCIEn = 1 : 수신완료인터럽트활성화 Bit 6 - TXCIEn (USART TX Complete Interrupt Enable) TXCI뚜 = 1 : 송신완료인터럽트활성화 Bit 5 - UDRIEn (USART Data Register Empty Interrupt Enable) UDRIEn = 1 : 송신데이터레지스터준비완료인터럽트활성화 Bit 4 - RXENn (USART Receiver Enable) RXENn = 1 : 수신부동작활성화 Bit 3 - TXENn (USART Transmitter Enable) TXENn = 1 : 송신부동작활성화 Bit 2 - UCSZn2 (USART Character Size) UCRnC의 UCSZn1~0 비트와함께전송문자의데이터비트수를설정한다. Bit 1 - RXB8n (USART Receive Data Bit 8) 전송데이터수가 9로설정된경우수신된 9번째데이터를저장하게된다. Bit 0 - TXB8n (USART Transmit Data Bit 8) 전송데이터수가 9로설정된경우송신될 9번째데이터를저장하게된다. 4 UCSRnC (USART Control and Status Register C) Bit 6 - USMSELn (USART Mode Select) USMSELn = 1 : 동기전송모드, USMSELn = 0 : 비동기전송모드 Bit 5, 4 - UPMn1, UPMn0 (USART Parity Mode)

54 UPMn1 UPMn0 패리티모드 0 0 패리티체크기능을사용하지않음 짝수패리티방식활성화 1 1 홀수패리티방식활성화 Bit 3 - USBSn (USART Stop Bit Select) USBSn = 1 : 스탑비트 2개로설정, USBSn = 0 : 스탑비트 1개로설정 Bit 2, 1 - UCSZn1, UCSZn0 (USART Character Size) UCSRnB의 UCSZn2 비트와함께전송문자의데이터비트수를설정한다. UCSZn2 UCSZn1 UCSZn0 전송데이터길이 비트 비트 비트 비트 비트 Bit 0 - UCPOLn (USART Clock Polarity) 이비트는동기전송모드의슬레이브동작에서만사용된다 UCPOLn = 1 : 송신데이터는 XCKn 클럭의하강에지에서새로운값이출력수신데이터는 XCKn 클럭의상승에지에서검출된다 UCPOLn = 0 : 송신데이터는 XCKn 클럭의상승에지에서새로운값이출력수신데이터는 XCKn 클럭의하강에지에서검출된다. 5 UBBRnH/L (USART Baud Rate Register) USART 송 / 수신속도를설정한다.

55 원하는통신속도맞추기위하여 UBBR 설정시아래의그림를참고하길바란다. 주의 ) UBBRnH 설정후 UBBRnL를나중에 Write해야한다. 그림원하는통신속도에맞는 UBRR 값구하기 (7) RS232 회로구성 (8) USART 실습 USART0을이용하여키보드로부터수신받은값을다시컴퓨터로송신하는프로그램

56 22. A/D 컨버터제어 ATmega128에는 8채널의 10비트 A/D 컨버터를가지고있다. (1) A/D 컨버터란무엇인가? 연속적인신호인아날로그신호를부호화된디지털신호로변환하는일, 아날로그디지털변환을수행하는기계장치를아날로그디지털변환기 (AD Convertor) 라고하는데, 이장치는온도, 압력, 음성, 영상신호, 전압등의실생활에서연속적으로측정되는신호를컴퓨터에입력하여디지털화시키는장치이다. (2) A/D 컨버터의특징

57 - 8채널 - 10비트분해능 - 축차비교형 ( 변환시간수십us의종속형 A/D Convertor) - 내부아날로그멀티플렉서탑재 - 샘플 / 홀드회로탑재로인하여 A/D 동작동안전압고정화 - 단극성아날로그입력 / 차동입력선택 - 차동입력에서 10배 ~ 200배의증폭 A/D 가능 - 포트 F는아날로그비교기기능으로도사용가능 - 변환시간 (13us~260us - 50KHz~200KHz) (3) A/D 컨버터의구성 - 범용 PORTF의특수기능 ADC0 ~ ADC7 : 8채널 10비트 A/D 컨버터의아날로그입력단자 - ADC 정확도성능향상을위한독립전원구성 AVCC : Analog Supply Voltage (VCC의전압과 ±0.3V 유지해야함 ) AGND : Analog Ground ( 반드시 GND와연결 ) AREF : Analog Reference Voltage - 입력전압의범위 일반모드입력전압의범위 (0V ~ V ref ) 차동입력모드입력전압의범위 (-V ref ~ V ref ) - V ref 의범위 전원전압 VCC를초과할수없다. (V ref = VGND ~ VCC, 내부기준전압 2.56V)

58 그림 AD Convertor 의블록도 (4) A/D 컨버터의동작 - 단일변환모드 (Single conversion mode) : ADC 동작을한번만수행하게된다. - 프리런닝코드 (Free running mode) : ADC 동작을반복적으로수행하게된다. 1 A/D 컨버터초기화설정 ADC 활성화 (ADEN = 1) ADC 클럭설정 (ADPS 2~0) ADC 기준전압설정 (REF 1~0) ADC 입력채널설정 (MUX 4~0) ADC 동작모드설정 (ADFR) ADC 변환완료인터럽트활성화 (ADIE) 2 A/D 컨버터스타트 ADC 시작신호 (ADSC)

59 3 A/D 변환 ADC 변환결과 [ 단극성입력 ] [ 차등입력 ] 4 A/D 변환완료 ADC 변환이완료되면변환값을 ADCH/L 에저장하게된다. 5 A/D 변환완료인터럽트요청 ADC Conversion Complete Interrupt 요청 6 ADC 상태플래그셋 AIDF = 1 7 ADC 다음동작결정 단일 / 연속동작인지구분하여다음동작수행을설정한다. (ADFR) (5) A/D 변환오차 1 양자화오차 (Quantization error) - 아날로그값을디지털값으로변환하면서생기는변환의한계 - 대처방안 : 분해능이높은 ADC 사용으로극복 2 오프셋오차 (Offset error) - 변환결과가이상적인디지털값에서일정한양만큼벗어난상태 - 대처방안 : 변환된디지털값에일정치값을더하거나빼서교정한다. 3 이득오차 (Gain error) - 변환결과가이상적인디지털값에서일정한비율만큼벗어난상태 - 대처방안 : 변환된디지털값에일정치값을곱하거나나누어서교정한다. 4 비선형오차 (Integral non-linearity error) - 변환결과가교정될수없는상태 - 대처방안없음 5 차동비선형오차 (Differential non-linearity error) - 변환결과가교정될수없는상태 - 대처방안없음 (6) A/D Convertor 잡음제거방법 A/D Convertor의경우에는노이즈에매우민감하기때문에 ATmega128 내에서도 AVCC, AREF, AGND와같은 ADC 전원구성도다로하였으며사용자또한몇가지사항을주의하

60 여사용해야한다. - AVCC = 독립적인아날로그회로전원단자 - AREF = 기준전원입력단자 - AGND = 아날로그회로접지단자 1 아날로그입력선은최소한으로짧게하고잡음의영향이없도록회로를구성한다. 2 아날로그전원단자 AVCC에 VCC를인가할때는 LC필터를거쳐안정화시킨다 3 아날로그회로의모든접지는 AGND에접지하여한포인트에서만 GND와접속한다. 4 ADC 동작중에는병렬 I/O포트의논리상태를스위칭하지않는다 5 잡음에민감한아날로그소자의 ADC의경우에는 ADC Noise Reduction mode를사용한다. 6 잡음이심하여결과값의변동이삼하여디지털필터를사용하거나평균치를구하여사용한다. 그림 AVCC 의 LC 필터를통한 VCC 인가방법 (7) A/D 컨버터관련레지스터 A/D 컨버터를제어하기위해서는 ADC 관련레지스터 (ADMUX, ADCSRA, ADCH/L) 의사용법을알아야한다.

61 1 ADCMUX (ADC Multiplexer election Register) Bit 7, 6 - REFS1, REFS0 (Reference Selection Bit) ADC에서사용하는기준전압을설정한다. REFS1 REFS0 기준전압 0 0 외부의 AREF 단자로입력된전압을사용한다. 0 1 외부의 AVCC 단자로입력된전압을사용한다 내부의 2.56V를사용한다. Bit 5 - ADLAR (ADC Left Adjust Result) ADLAR = 1 : 변환결과값을 ADCH/L에저장할때좌측으로끝을맞추어저장된다. Bit 4, 3, 2, 1, 0 - MUXn (Analog Channel and Gain Selection Bit)

62 2 ADCSRA (ADC Control and Status Register A) Bit 7 - ADEN (ADC Enable) ADEN = 1 : ADC 활성화 Bit 6 - ADSC (ADC Start Conversion) ADSC = 1 : ADC의변환이시작된다. ( 단일변환모드일때단한번만작동 / 프리런닝모드일때변환동작반복 ) Bit 5 - ADFR (ADC Free Running Select) ADFR = 1 : 프리런닝모드, ADFR = 0 : 단일변환모드 Bit 4 - ADIF (ADC Interrupt Flag) ADC변환완료인터럽트가요청되고그상태를이비트에표시한다 Bit 3 - ADIE (ADC Interrupt Enable) ADIE = 1 : ADC Interrupt 활성화 Bit 2,1,0 - ADPS 2~0 (ADC Prescaler Select Bit) ADC에인가되는클럭의분주비를설정한다. ADPS2 ADPS1 ADPS0 분주비 ADCH/L (ADC Data Register) ADC의변환결과를저장한다.

63 (7) A/D 컨버터실습

64