안녕하세요. 오늘은 타이머/카운터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이 나오게 됩니다.
'아트메가 > 이론' 카테고리의 다른 글
ATMEGA128 TWI(I2C)통신 알아보기 2편 (2) | 2022.09.11 |
---|---|
ATMEGA128 TWI(I2C)통신 알아보기 1편 (0) | 2022.09.10 |
아트메가128 타이머/카운터0 Phase Correct PWM모드 알아보기 (0) | 2017.09.30 |
아트메가128 타이머/카운터0 Fast PWM모드 알아보기 (1) | 2017.09.28 |
아트메가128 타이머/카운터0 CTC 모드 알아보기 (0) | 2017.09.27 |