사용한 툴 : avr studio 4

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
#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>
 
int main()
{
    unsigned char Light = 0 ;
    DDRB=0x10;
    TCCR0=0x71;
    TCNT0=0;
    while(1)
    {
        for(Light=0;Light<255;Light++)
        {
            OCR0=Light;
            _delay_ms(10);
        }
        for(Light=255;Light>0;Light--)
        {
            OCR0=Light;
            _delay_ms(10);
        }
    }
    return 0;
}
 
cs

8 PWM 출력값을 받기위해 PORTB의 4번핀을 출력으로 사용

9 TCCR : 7번비트 부터 0번비트까지  FOC, WGM0, COM1, COM0, WGM1, CS2, CS1, CS0 을 설정 할 수 있는데 CS는 분주기 WGM은 모드를 설정 하는 것이다.

8비트 타이머(0,2)의 설정

 WGM1

WGM0 

 Mode Name

설명 

 0

 0

 Normal mode

 TCNT값을 조정하여 TCNT가 255일때 인터럽트가 발생

 0

 1

CTC mode 

 TCNT가 특정 값에 도달하면 인터럽트 발생

 1

 0

 Fast PWM mode

 특정 값, 255일때 인터럽트 발생

 1

 1

 PC PWM mode

 0->255 업카운팅 255->0 다운카운팅 COM1,0에 따라 OCR가 업카운팅 or 다운카운팅일때 값이 일치하면 인터럽트

 

따라서 지금은 PC PWM mode를 사용하고 있으며 COM1,0도 1 1 이여서 업카운팅일때 인터럽트가 발생한다.


10 카운트 되는 것을 0으로 초기화

15,20 OCR의 값을 변경함에 따라 PWM값을 조정한다.

+ Recent posts