아트메가/이론

아트메가128 타이머/카운터0 주파수 알아보기

원원 2017. 10. 1. 19:38

안녕하세요. 오늘은 타이머/카운터0 주파수에 대해 알아보겠습니다.

주파수(frequency)란 단위 시간 내에 몇 개의 주기나 파형이 반복되었는가를 나타내는 수를 말합니다.

예를들어 16Mhz라면 1초에 1600만번 파형이 반복되었다는 뜻 입니다.

 

타이머/카운터0에 CTC모드, Fast PWM모드, Phase Correct PWM모드에서 나오는 OC0의 파형이 다릅니다.

이 파형의 주파수를 구할 수 있습니다.

 


각 모드의 공식과 예시를 알아보겠습니다.

 

 

 

CTC모드

N=프리스케일러의 분주비

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#define F_CPU 16000000UL
 
int main(void)
{
   TCCR0= 0x1a;
   OCR0 = 199;
   SREG=0x80;
   DDRB=0xff;
 
    while(1)
    { 
 
    }
}
cs

16Mhz ,분주비8 , OCR0=199이므로 공식에 대입하면 5000Hz가 나옵니다.

 

 

 

 

 

 

 

 

 

 

PWM모드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#define F_CPU 16000000UL
 
int main(void)
{
   TCCR0= 0x6f;
   SREG=0x80
   DDRB=0xff;
 
    while(1)
    { 
  
    }
}
cs

16Mhz ,분주비1024이므로 공식에 대입하면 61.03Hz가 나옵니다.

 

 

 

 

 

Phase Correct PWM모드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#define F_CPU 16000000UL
 
  
int main(void)
{
   TCCR0= 0x67;
   OCR0 = 199;
   SREG=0x80
   DDRB=0xff;
 
    while(1)
    { 
  
    }
}
cs

16Mhz ,분주비1024 , OCR0=199이므로 공식에 대입하면 61Hz가 30.6hz나옵니다.

 

30.6Hz이므로 30과 31이 나오게 됩니다.