학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

PWM0

학습목표

8비트 펄스(PWM0) 만든다.

학습주제

8bit Fast PWM Mode 펄스를 만든다. 출력은 B4포트 이다.

[AVR 프로그램 내려받기]

예습내용

Atmega128(L) 데이터북 P89~P107 참조한다.

실습방법

   

 

다음은 펄스를 만드는 프로그램 이다.

#include <mega128.h>

 

// Declare your global variables here

 

void main(void)

{

 

PORTB=0xff;

DDRB=0xff;

 

TCCR0 = 0x69;      // (1) Fast PWM Mode   ATmega128(L) Data Book P100  주기조절

OCR0 = 0x80;        // ATmega128(L) Data Book P102   듀티비조절

 

while (1)

      {

      // Place your code here

 

      };

}

 

1. 주기조절

함수를 발생하는 이론은 데이터북 P95 설명되어 있다.

레지스터 TCCR0 다음과 같이 구성된다.

 

7

6

5

4

3

2

1

0

FOC0

WGM00

COM01

COM00

WGM01

CS02

CD01

CS00

0

1

1

0

1

0

0

1

6

9

 

1) Bit7-FOC0: Forced Output Compare

FCC0 =0으로 한다.

2) Bit6,3 – WGM01:0 : Waveform Generation Mode

Mode

WGM01

(CTC0)

WGM00

(PWM0)

Timer/Counter

Mode of Operation

TOP

Update of OCR0 at

TOV0 Flag

Set on

0

0

0

Normal

0xFF

Immediate

MAX

1

0

1

PWM Phase Correct

0xFF

TOP

BOTTOM

2

1

0

CTC

OCR0

Immediate

MAX

3

1

1

Fast PWM

0xFF

TOP

MAX

 

3) Bit5:4 : COM1:0 : Compare Match Output Mode

  Compare Output Mode, Fast PWM Mode

COM01

COM00

 

0

0

Normal Port Operatio, OC0 disconnected

0

1

Reserved

1

0

Clear OC0 compare match, set OC0 at TOP

1

1

Set OC0 on compare match, clear OC0 at TOP

 

4) Bit2:0 : CS2:0 : Clock Select

CS02

CS01

CS00

 

N

0

0

0

No clock source (Timer/Counter stopped)

 

0

0

1

ClkTOS/1(No prescaling)

1

0

1

0

ClkTOS/8(Form prescaler)

8

0

1

1

ClkTOS/32( Form prescaler)

32

1

0

0

ClkTOS/64( Form prescaler)

64

1

0

1

ClkTOS/128( Form prescaler)

128

1

1

0

ClkTOS/256( Form prescaler)

256

1

1

1

ClkTOS/1024( Form prescaler)

1024

 

Fast PWM 주기는 아래와 같이 계산된다. (데이터북 P96)

 

FOCnPWM = fclk_I/O/(N*256) = 16000000/(1*256)=62.5KHz

 

2. 듀티조절

위와 같이 프로그램 하면 발생되는 펄스를 것이다. 펄스의 듀티는 OCR0/256 % 조절할 있다.

 

처음

   

과제제출은 http://kiss.doowon.ac.kr 하시오.

1. 프로그램에서 주기(1953Hz) 듀티(70%) 변경하는 프로그램을 작성해서 제출하시오. (과제물)

 

2. 아래 칸을 채워서 제출하시오. 그리고 응용분야를 기술하시오. (토론방에 제출)

CS02

CS01

CS00

주기

TCCR0

0

0

0

 

 

0

0

1

16000000/(1*256)=62500

0x69

0

1

0

16000000/(8*256)=7812

0x6a

0

1

1

 

 

1

0

0

 

 

1

0

1

 

 

1

1

0

 

 

1

1

1