타이머를 이용한 PWM 제어 프로그램
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

본문내용

e and Frequency Correct PWM mode(9)
OUT TCCR1A,AL; and use OC1B
LDI AL,0b00010011
OUT TCCR1B,AL
LDI AL,0b00000000
STS TCCR1C,AL
LDI CH,high(1250); set default PWM frequency(period)
LDI CL,low(1250)
OUT OCR1AH,CH; f(PWM) = 16MHz/64/2/1250 = 100Hz
OUT OCR1AL,CL
LDI DH,high(125); set default PWM duty ratio
LDI DL,low(125)
OUT OCR1BH,DH; D(PWM) = 125/1250 = 10%
OUT OCR1BL,DL
0b00100001은 TCCR1A(Timer/Counter Control Register 1)을 나타낸다.
(WGM11=0, WGM10=1, COM1B1=0, COM1B0=1)
COM은 Phase and Frequency Correct PWM mode에서 01을 나타낸다. WGM에서 9모드일때 비교매치에서 토글 OCnA 연결하고 OCnB, OCnC는 연결하지 않는다. 다른 모든 WGMn을 세팅하는동안에는 노말포트연산 OCnA, OCnB, OCnC은 연결하지 않는다는 말이다.
0b00010011은 TCCR1B(Timer/Counter Control Register 1B)을 나타내는 것이다.
(WGM13=1, WGM12=0, CS12=0, CS11=1, CS10=1)
이는 1001모드가 되는 9모드, Phase and Frequency Correct PWM 모드 방식이다. CS12~10은 클럭의 분주비를 나타내는 것인데 위에서는 011을 나타내었기 때문에 프리스케일러가 64가 된다.
------------------------------------------------
PWM Control by Key Input
------------------------------------------------
KEY가 어느 것이 들어왔는지 확인하고 PWM를 control하는 프로그램
READ_KEY:CALLKEY_IN; key input
CPIAL,0b11100000; if SW1, decrement duty ratio
BRNECK_KEY2; ( DH:DL = DH:DL - 125 )
CPIDH,0
BRNECK_KEY1A
CPIDL,0
BREQREAD_KEY
0b11100000와 비교하여 SW1이 들어왔는지 확인
(SW1이 들어 왔으면 DH:DL = DH:DL - 125로 듀티비를 감소 시킨다. )
CK_KEY1A:SUBIDL,125
CLRAL
SBCDH,AL
RJMPCK_KEY2B
CK_KEY2:CPIAL,0b11010000; if SW2, increment duty ratio
BRNECK_KEY3; ( DH:DL = DH:DL + 125 )
CPDH,CH
BRNECK_KEY2A
CPDL,CL
BREQREAD_KEY
0b11010000와 비교하여 SW2가 들어왔는지 확인
( SW2가 들어왔으면 DH:DL = DH:DL + 125로 듀티비를 증가 시킨다. )
CK_KEY2A:LDIAL,125
ADDDL,AL
CLRAL
ADCDH,AL
CK_KEY2B:OUT OCR1BH,DH; output duty ratio
OUT OCR1BL,DL
LDILCD_BUFFER,0xCA; display duty ratio
CALLLCD_COMMAND
MOVAH,DH
MOVAL,DL
CALLLCD_4DEC
RJMPREAD_KEY
CK_KEY3:CPIAL,0b10110000; if SW3, decrement period
BRNECK_KEY4; ( CH:CL = CH:CL - 125 )
CPICH,0
BRNECK_KEY3A
CPICL,125
BREQREAD_KEY
0b10110000와 비교하여 SW3이 들어왔는지 확인
(SW3이 들어 왔으면 CH:CL = CH:CL - 125로 period를 감소 시킨다. )
CK_KEY3A:CPCH,DH
BRNECK_KEY3B
CPCL,DL
BREQREAD_KEY
CK_KEY3B:SUBICL,125
CLRAL
SBCCH,AL
RJMPCK_KEY4B
CK_KEY4:CPIAL,0b01110000; if SW4, increment period
BRNEREAD_KEY; ( CH:CL = CH:CL + 125 )
CPICH,high(1250)
BRNECK_KEY4A
CPICL,low(1250)
BREQREAD_KEY
0b01110000와 비교하여 SW4가 들어왔는지 확인
(SW4가 들어 왔으면 CH:CL = CH:CL + 125로 period를 감소 시킨다. )
CK_KEY4A:LDIAL,125
ADDCL,AL
CLRAL
ADCCH,AL
CK_KEY4B:OUTOCR1AH,CH; output frequency
OUT OCR1AL,CL
LDILCD_BUFFER,0x8A; display frequency
CALLLCD_COMMAND
MOVAH,CH
MOVAL,CL
CALLLCD_4DEC
RJMPREAD_KEY
====================================================================
Include User Subroutine File
====================================================================
.include "OK128SUB.INC"; include OK-128 subroutine file
☞ 여기서는 PWM 주기와 듀티비를 변화시킬 때 주의가 필요하다. 즉, PWM 주기를 감소시키는 경우에는 이것이 0까지 감소하면 안되며, 주기 카운트 값이 듀티비 카운트 값보다 작아져서도 안된다. 또한, 듀티비 카운트 값을 증가시킬 때는 이것이 주기 카운트 값보다 커져서는 안된다.
이 프로그램에서 레지스터 CH:CL에는 주기 카운트 값이 저장되고 레지스터 DH:DL에는 듀티비 카운트 값이 저장되는데, SW1~SW4를 누르더라도 이런 원칙에 위반되는지를 내부적으로 체크하여 범위를 벗어나면 스위치가 동작하지 않도록 처리하였다.

키워드

타이머,   PWM,   제어,   듀티비
  • 가격2,500
  • 페이지수17페이지
  • 등록일2009.02.23
  • 저작시기2008.9
  • 파일형식한글(hwp)
  • 자료번호#520061
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니