6. 타이머 카운터

6.1 특징 및 기능

 

ATmega128은 4개의 범용 타이머/카운터를 가지고 있습니다. 즉 Timer0, Timer1, Timer2, Timer3입니다. 즉 Timer0, Timer2 는 8비트 레지스터를 사용 하며, Timer1, Timer3는 16비트 레지스터를 사용 합니다.


타이머/카운터의 제어에 필요한 레지스터는 타이머/카운터 제어 레지스터(TCCRn), 타이머/카운터 레지스터(TCNTn), 출력 비교 레지스터(OCRn)가 있습니다. 인터럽트 관련하여 타이머/카운터 인터럽트 플래그 레지스터(TIFR), 타이머/카운터 인터럽트 마스크 레지스터(TIMSK)가 있습니다.

타이머를 사용하기 위해서는 타이머에서 사용하는 클럭에 대해서 설정을 해야 하고, 이는 프리스케일러(Prescaler) 값으로 조절할 수 있다. 프리스케일러 값은 각 타이머의 컨트롤 레지스터(TCCRn)에서 설정할 수가 있습니다. 타이머 인터럽트는 각 타이머 관련 컨트롤 레지스터에서 적절한 프리스케일러 값을 설정한 후, 각 타이머 레지스터(TCNTn)에 얼마마다 한번씩 인터럽트를 걸게 할 것인지와 관련된 값을 써주면 됩니다.
마지막으로 인터럽트를 사용해야 하므로 타이머 인터럽트 관련 레지스터들을 설정해야 합니다. 타이머 인터럽트에서는 TIMSK 레지스터만 설정하면 됩니다.

 

1) 타이머 인터럽트의 2가지 방식

- Compare Match (비교매치): Timer 의 값과 비교 레지스터의 값이 일치할 경우 발생

- Overflow (오버플로우): Timer의 값이 레지스터 범위를 벗어나 다시 0으로 되었을 때 발생

 

2) PWM 사용

PWM 기능은 IO에 출력되는 신호의 Pluse 의 0과 1의 폭(Duty Ratio)을 조절하는 기능 입니다. 이를 이용해 모터제어,각종 센서 측정, 전압 전류 컨트롤등 다양한 분야에 활용이 가능합니다.

 

 

6.3 타이머0

 

1) 레지스터 설명

- TCCR0(Timer/Counter Control Register 0) : 동작모드와 분주비등을 설정한다.

Bit 7 ,FOC0(Force Output Compare) : OSC0 Pin 에 출력비교 패치 신호를 출력

Bit 3,6, WGM01,WGM00(Waveform Generation Mode) : 파형 출력 모드 설정

Bit 5,4, COM01, COM00(Compare Match Output Mode) : 비교패치 출력 모드 설정

MODE

COM01

COM00

설명

일반

0

0

범용 입출력 포트,OC0 사용 안함

0

1

[비교매치] OC0 Toggle 출력

1

0

[비교매치] OC0 은 0 출력

1

1

[비교매치] OC0 은 1 출력

FAST PWM

0

0

범용 입출력 포트,OC0 사용 안함

0

1

사용안함

1

0

[비교매치] OC0 은 0 출력

[오버플로우] OC0 은 1 출력

1

1

[비교매치] OC0 은 1 출력

[오버플로우] OC0 은 0 출력

Phase Correct PWM

0

0

범용 입출력 포트,OC0 사용 안함

0

1

사용안함

1

0

[상향비교매치] OC0 은 0 출력

[하향비교매치] OC0 은 1 출력

1

1

[상향비교매치] OC0 은 1 출력

[하향비교매치] OC0 은 0 출력

Bit 2,1,0, CS02~CS00(Clock Select) : 클럭의 분주비를 설정

- TCNT0(Timer/Counter Register 0) : 타이머/카운트 0의 8비트 카운터 값을 저장하고 있는 레지스터

- OCR0(Timer/Counter Output Compare Register 0) : 타이머/카운트 0의 카운터 값인 TCNT0과 비교하여 OC0 단자에 출력신호를 발생하기 위한 8비트 값을 저장하고 있는 레지스터

- ASSR (Asynchronous Status Register) : 외부클럭을 이용해 비동기적으로 동작시 설정

Bit 3, AS0(Asynchronous Status Register) : 0은 내부클럭 (clkI/O) 동기모드,1은 외부클럭 (TOSC1)비동기모드

Bit 2, TCNOUB (Timer/Counter0 Update Busy) : 동작중 TCNT0레지스터 값이 변경되면 발생

Bit 1, OCROUB (Output Compare Register0 Update Busy) : 동작중 OCR0 레지스터 값이 변경되면 발생

Bit 0, TCROUB (Timer/Count Control Register0 Update Busy): 동작중 TCCR0 레지스터 값이 변경되면 발생

- SFIOR(Special Function I/O Register)

Bit 7, TSM(Timer/Counter Synchronization Mode) : 모든 타이머/카운터들을 동기화시키는 기능을 수행한다.

Bit 1, PSR0(Prescaler Reset Timer/Counter0) : 타이머/카운트0의 프리스케일러를 리셋 시키며 동작 후에 자동적으로 클리어 된다.

- TIMSK(Timer/Counter Interrupt Mask Register) : 인터럽트 Enable

Bit 1 , OCIE0(Timer/Counter0 Output Compare Match Interrupt Enable) : 1로 Set시켜주면 Output Compare Match Interrupt가 활성화 된다.

Bit 0 , TOIE0(Timer/Counter Overflow Interrupt Enable) :1로 Set시켜주면 Overflow Interrupt가 활성화된다.

- TIFR(Timer/Counter Interrupt Flag Register): 인터럽트 발생 플레그 저장

Bit1, OCF0(Output Compare Match Flag) : TCNT0값과 OCR0값을 비교하여 이것이 같으면 이 비트가 1로 Set되면서 Output Compare Match 인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.

Bit0, TOV0(Timer/Count Overflow Flag) : 타이머/카운트에서 Overflow가 발생되면 이 비트가 1로 Set되면서 Output Compare Match 인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.

2) 타이머의 동작 모드

- Normal Mode : 일반적인 타이머 오버플로우 인터럽트가 필요할 때 사용 합니다 0 ~ 0xFF 까지 상향증가 하며 반복적으로 동작합니다. 오버플로우(OVF) 인터럽트는 최고 값인 0xFF 에서 0x00으로 변경 될 때 발생합니다.

- CTC Mode(Clear Timer on Compare Match Mode) : 0 ~ OCR0 까지 증가하면서 동작하고 OCR0레지스터와 동일한 값이 발생시 오버프로우(OVF) 인터럽트를 발생하면서 TCNT0 값을 0으로 변경된다.

3) PWM 동작 모드

- FAST PWM : 높은 주파수 PWM 파형발생이 필요할 때 사용합니다.0x00~0xFF 까지 증가하도록 동작을 하며, TCNT0과 OCR0의 의 값이 같아지면 OC0에 LOW출력(COM0 1:0 = 2) 되고 전부 증가하여 0xFF 에서 0x00 으로 변경되면(오버플로우) OC0에 HIGH출력(COM 1:0 = 2) 이 나갑니다.

- Phase Correct PWM : 높은 분해능의 PWM출력 파형을 발생하는데 사용 0x00 → 0xFF 로 갔다가 다시0xFF → 0x00 으로 변화합니다. 값 증가시 카운터 비교패치가 될경우 OC0 에 0출력되고, 값 감소시 카운터 비교패치가 될경우 OC0 에 1출력 됩니다.

+ Recent posts