3. Page 3
Timer/Counter
Timer
- 컴퓨터 동작 중에서 경과시간을 나타내거나 외부(예를 들어 clock)에서 펄스 신호를 카운트하여
특정한 간격으로 삽입하여 신호를 발생시키는 장치.
Counter
- 유한개의 상태를 갖고 각각의 상태가 계수적으로 표현되는 기구이며 적당한 신호를 받으면 그 수가 1
또는 주어진 상수 만큼 증가하는 것.
Timer/Counter in Atmega128
- Two 8-bit Timer/Counters with separate prescaler and compare mode
1) 8-bit timer/counter0
2) 8-bit timer/counter2
- Two expanded 16-bit Timer/Counters with separate prescaler, compare mode and capture mode.
1) 16-bit timer/counter1
2) 16-bit timer/counter3
4. Page 4
PWM(Pulse Width Modulation)
PWM(Pulse Width Modulation)
- Pulse 변조 방식중 하나로, 변조 신호의 크기에 따라 Pulse 폭(width)을 변조하는 방식
7. Page 7
Timer/Counter
2. Modes of operation
- Timer/counter 와 Output compare pin의 동작에 관한 것
- Waveform generation mode(WGM01:0)와 Compare output mode(COM01:0) bits로 정의/설정
- WGM01:0은 counting sequence에 영향을 줌
- COM01:0은
PWM mode 일 경우 생성된 PWM output이 inverted 인지 아닌지 제어
Non-PWM mode 일 경우 compare match에서 output이 set / cleared / toggled 인지 정의
- Normal / CTC / fast PWM / Phase correct PWM mode가 있음
1) Normal mode
- 항상 up counting하며, counter를 clear하지 않음
- Counter가 maximum인 8-bit value(TOP=0xFF)넘어가면 단순히 overrun하며,
bottom(0x00)부터 다시 시작한다.
- TCNT0가 0이 되면 Timer/Counter overflow flag(TOV0)가 set이 된다.
8. Page 8
Timer/Counter
2) CTC(Clear Time on Compare match) Mode (1/2)
- OCR0(Output Compare Register)는 counter의 resolution을 설정하기 위해 사용
- TCNT0(counter value)와 OCR0의 값이 같을 때 counter가 clear됨
즉, OCR0가 counter의 TOP value를 정의함
- Counter 값이 TOP value에 도달 할 때 마다 interrupt가 발생함
(Output Compare Match Interrupt)
9. Page 9
Timer/Counter
2) CTC(Clear Time on Compare match) Mode (2/2)
- CTC mode에서 waveform output을 생성하기 위해서는, OC0 output이 COM01:0을 toggle
mode로 setting 함으로써 각각의 compare match 때 logical level을 toggle 할 수 있음
- OC0 value가 pin에 보이기 위해서는 pin direction을 output으로 설정해야함
- Waveform frequency equation :
- N은 prescale factor를 나타내며 (1, 8, 32, 64, 128, 256, 1024) 중 하나의 값을 가짐
10. Page 10
Timer/Counter
3) Fast PWM(Pulse Width Modulation) Mode (1/2)
- High Frequency PWM waveform operation / Single-slope operation
- Counter는 BOTTOM에서 MAX까지 count하고 BOTTOM에서 다시 시작함
- Non-inverting Compare output mode에서는
TCNT0와 OCR0의 compare match에서 OC0가 clear 되고 BOTTOM에서 다시 set 됨
- Inverting Compare output mode에서는
compare match에서 OC0가 set되고 BOTTOM에서 다시 clear 됨
11. Page 11
Timer/Counter
3) Fast PWM(Pulse Width Modulation) Mode (2/2)
- PWM frequency for the output
- N은 prescale factor이며 (1, 8, 32, 64, 128, 256, 1024) 중 하나의 값을 가짐
12. Page 12
Timer/Counter
4) Phase Correct PWM(Pulse Width Modulation) Mode (1/2)
- High resolution PWM waveform generation / dual-slope operation
- Counter는 BOTTOM에서 MAX로 MAX에서 BOTTOM으로 count 함
- Non-inverting Compare output mode에서는
Up counting 중에는 TCNT0와 OCR0의 compare match에서 OC0가 clear 되고
Down counting 중에는 compare match에서 OC0가 set 됨
- Inverting Compare output mode에서는
Up counting 중에는 TCNT0와 OCR0의 compare match에서 OC0가 set 되고
Down counting 중에는 compare match에서 OC0가 clear 됨
13. Page 13
Timer/Counter
4) Phase Correct PWM(Pulse Width Modulation) Mode (2/2)
- Timer/Counter Overflow flag(OVF0)는 counter가 BOTTOM에 갈 때 마다 set 됨
- PWM frequency for the output
- N은 prescale factor이며 (1, 8, 32, 64, 128, 256, 1024) 중 하나의 값을 가짐
14. Page 14
Timer/Counter
1.TCCR0 – Timer/Counter Control Register (1/5)
1) FOC0 : Force Output Compare
- Non-PWM mode에 대해서만 유효함. FOC0=1 일 경우 OC0에 자동으로 Compare match와
같은 출력이 발생함 이 때 출력은 COM01:0에 의해 설정되어 있음. 그러나 interrupt가
발생하지는 않으며 TCNT0 역시 초기화 되거나 하지는 않음. 일반적으로 0으로 설정.
15. Page 15
Timer/Counter
1.TCCR0 – Timer/Counter Control Register (2/5)
2) WGM01:0 : Waveform Generation Mode
- Sequence of counter
- TOP (Maximum of counter value)
- Type of waveform generation ( Normal / CTC / fast PWM / phase correct PWM )
16. Page 16
Timer/Counter
1.TCCR0 – Timer/Counter Control Register (3/5)
3) COM01:0 : Compare Output Mode (1/2)
- OC0(Output Compare pin)의 동작을 설정함
- OC0에 해당하는 DDR(Data Direction Register)가 출력으로 설정되어 있어야 함
- Type of waveform generation ( Normal / CTC / fast PWM / phase correct PWM )
(1) Non-PWM Mode
21. Page 21
Timer/Counter
참고) Accessing 16-bit Register
- 16-bit timer/counter의 경우 8-bit timer/counter와 거의 동일하게 사용되며
대신 16-bit TCNT와 OCR을 사용하므로 16-bit register 접근에 대해 알 필요가 있음
- 모든 16-bit timer에 있는 16bit register는 동일한 Temporary Register를 사용
- 16-bit 중 Low byte(L) 에 접근하는 것은 16-bit read/write operation을 trigger함
1) Write
- CPU에 의해서 16-bit의 Low byte(L) register가 쓰여지면,
temporary register에 쓰여진 High byte(H) 값과 Low byte(L)가 16-bit register에
같은 clock cycle내에 copy 됨
2) Read
- CPU에 의해서 16-bit register의 Low byte(L) 값이 읽혀지면,
Low byte(L)값이 읽혀지는 clock cycle내에 16-bit register의 High byte(H) 값이
Temporary Register에 쓰여짐
결론)
- 16-bit write를 하기 위해선 High byte -> Low byte 순으로 하며,
- 16-bit read를 하기 위해선 Low byte -> High byte 순으로 함.