2

下図のようにATMEGA8のtimer0のPWMモードでPWM波を発生させたいです。

ここに画像の説明を入力

デューティ サイクルは 20% ですが、PWM モードだけでは実装できません。逆モードで高速 PWM モードを使用してみました。TCNT0 が 64H になるまでチェックして、OC0 PIN に到達したらクリアできるようにしました。

OC0 を手動でクリアしているときに、この方法が正しく機能するかどうか疑問に思っていましたか?

そして、ここに私のコードがあります:

.DEF A = R16             ;GENERAL PURPOSE ACCUMULATOR

.ORG $0000

ON_RESET:
    SBI DDRB,3           ;SET PORTB3(OC0) FOR OUTPUT
    LDI A,0b01011011    ;SET TO FAST PWM MODE
    OUT TCCR0,A    ;SET PRESCALER/DIVIDER TO /32    
    LDI A,32             ;DIFFERENT VALUE
    OUT OCR0,A          ;FOR COMPARE


MAIN_LOOP:
PLOOP: IN   A,TCNT0        ;COMPARE TCNT0
       ANDI A,0x64H   ;COMPARE TCNT0 TO 64 TO MAKE IT ZERO
       BRNEQ PLOOP
       CBI  PINB,3     
RJMP MAIN_LOOP;A CHECK FOR TIMER LOOP
4

2 に答える 2