반응형


용어 정의

BOTTOM - 카운터가 0이 되었을 때를 의미.


MAX – 카운터가 0xFF(=255)에 도달했을 때를 의미


TOP 

TOP값은 0xFF(MAX) 또는 OCR0 레지스터에 저장된 값으로 지정할 수 있다.

카운터가 TOP값과 똑같거나 더 커진 경우를 의미한다.



Fast PWM 모드

fast Pulse Width Modulation(fast PWM) 모드는 TCCR0 레지스터의 WGM01과 WGM00비트가 1로 설정된 경우이다.



카운터값(TCNT0)는 BOTTOM으로부터 MAX까지 값이 증가하고 MAX에 도달하면 다시 BOTTOM부터 증가를 시작한다.


non-inverting Compare Output 모드에서는 TCNT0와 OCR0가 일치하는 경우 output compare (OC0)가 0으로 클리어되고 TCNT0가 BOTTOM인 경우 1로 설정된다.


inverting Compare Output 모드에서는 TCNT0와 OCR0가 일치하는 경우 output compare (OC0)가 1로 설정되고 TCNT0가 BOTTOM인 경우 0으로 클리어 된다. 

fast PWM 모드에서 카운터값(TCNT0)가 MAX값과 일치할 때까지 카운터는 증가한다. MAX값에 도달하면 TCNT0는 0으로 클리어된다.



TCNT0 대각선상의 작은 수평선은 OCR0와 TCNT0가 일치하는 경우를 의미한다.

카운터가 MAX에 도달할때마다 타이머/카운터 오버플로우 플래그(TOV0)는 1로 설정된다. 인터럽트가 활성화 되어있다면 오버플로우 인터럽트 핸들러 루틴을 OCR0값을 업데이트하는 용도로 사용할 수 있다. 


TCCR0 레지스터의 COM01과 COM00을 설정하여 Invert mode인지 non-invert mode인지  결정한다.


포트 핀의 데이터 방향이 출력일 경우에만 OC0의 값이 실제로 출력된다.


inverting mode에서는 OCR0와 TCNT0 사이의 값이 일치하는 경우 OC0 레지스터는 1로 설정됨으로써 PWM 파형이 출력되고 TCNT값이 MAX에서 BOTTOM으로 변하는 경우에 OC0 레지스터는 0으로 클리어되어 파형 출력이 중단된다.



아래 처럼 회로를 구성하고 



아래 코드를 동작시키면.. LED가 천천히 켜졌다가 천천히 꺼지는 것을 볼 수 있다.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
 * 8bit_timer_example3.c
 *
 * Created: 2016-06-18 
 * Author : webnautes
 */ 
 
#include <avr/io.h>
 
 
#define F_CPU 16000000UL
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
 
 
 
int main(void)
{
    DDRB |= (1<<DDB4); //LED용
 
    //프리스케일러로 64를 선택
    TCCR0 |= (1<<CS02);
 
    //FAST PWM 모드
    TCCR0 |= (1<<WGM01);
    TCCR0 |= (1<<WGM00);
 
    //non-inverted mode
    TCCR0 |= (1<<COM01);
 
    //카운터 초기화
    TCNT0 = 0;
 
 
    /* Replace with your application code */
    while (1)
    {
        int i;
 
        for( i=0; i<255; i++)
        {
            OCR0 = i;
            _delay_ms(10);
        }
 
        for( i=255; i>=0; i--)
        {
            OCR0 = i;
            _delay_ms(10);
        }
 
    }
}
 
 
 
 
 
 
cs



반응형

진행해본 결과물을 기록 및 공유하는 공간입니다.
잘못된 부분이나 개선점을 알려주시면 반영하겠습니다.


소스코드 복사시 하단에 있는 앵커 광고의 왼쪽 위를 클릭하여 닫은 후 해야 합니다.


문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

TistoryWhaleSkin3.4">