아트메가/이론

아트메가128 타이머/카운터0 CTC 모드 알아보기

원원 2017. 9. 27. 19:46

안녕하세요. 오늘은 타이머/카운터0 CTC 모드를 알아보겠습니다.

CTC란 Clear Timer on Compare Match입니다.

앞에서 알아봤던 compare match interrupt가 발생하면 파형이 변합니다.





CTC모드 파형 알아보기




TCCR0레지스터중 3,6번비트

위의 표를보면 CTC 모드일때 TOP이 OCR0이라 되있고, OCR0업데이트는 즉시라고 나와있는데 이것들의 뜻을 알아보겠습니다.



***참고

-BOTTOM : 카운터가 가질 수 있는 최소 값(0x00)

-MAX : 카운터가 가질 수 있는 최대 값(0xff 8비트기준)

-TOP : 각 동작 모드에 따라서 카운터가 도달하는 최대 값





위의 표를보면 TCNTn = OCR0에서 compare match interrupt가 발생할때 마다 OCn의 모양이 바뀌는것을 볼 수 있습니다.

이때 OCn은 토글로 설정되서 이런 모양이 나오는거고, 1로 set시킬수도있고 0으로 set시킬수도있고, 아예 OCn의 출력을 차단 시킬 수도 있습니다.



이러한 OCn의 모드는 TCCR0의 4,5번비트에서 정할 수 있습니다.



OC0은 PB4번 포트입니다. 




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#define F_CPU 16000000UL
 
SIGNAL(SIG_OUTPUT_COMPARE0) 
{  
}
  
int main(void)
{
 
   TCCR0= 0x1f;
   TIMSK = 0x02;
   OCR0 = 255;
   SREG=0x80;
   DDRB=0xff;
 
    while(1)
    { 
 
    }
}
 
 
 
 
cs


분주비를 1024사용하고, TOP의 값은 255로, OC0 토글모드입니다.

0.000064*256 = 0.016384s(16.384ms)

즉 16.384ms마다 OC0가 토글되야합니다.

파형을 알아보려면 오실레이터가 필요한데 프로테우스프로그램 오실레이터를 사용하겠습니다.

예상대로 토글되는 시간이 16.384ms인것을 확인할 수 있습니다.(그림에서는 소수 두번째자리까지 표시됩니다)





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#define F_CPU 16000000UL
 
SIGNAL(SIG_OUTPUT_COMPARE0) 
{  
}
  
int main(void)
{
 
   TCCR0= 0x1f;
   TIMSK = 0x02;
   OCR0 = 0
   SREG=0x80;
   DDRB=0xff;
 
    while(1)
    { 
 
    }
}
 
 
 
 
cs

이번에는 OCR0이 0입니다. 그러면 0.000064s(64us)가 나와야합니다.


두 예제에서 볼수있듯이 CTC모드 파형의 듀티비는 항상 50%입니다.