Arduino PWM衰落导致avra

时间:2016-07-05 00:52:20

标签: timer arduino avr led pwm

我在汇编中编写Arduino UNO(= ATMega328P-PU)程序以节省内存,因此我使用avra.exe(与atmel studio的avrasm32相同)进行编译和avrdude上传,并且简单像闪烁的程序运行良好。但现在我尝试用pwm半亮LED。我检查了我的代码是否有错误,但我找不到任何错误,但LED只是满亮的。我也检查了布线。这是我的pwm.asm代码:

.nolist
.include "m328pdef.inc"
.list

.cseg
.org 0x00
     rjmp start
.org 0x34
 start: sbi ddrb, 5 ;pin 13
        sbi portb, 5 ;pin 13 on, just to compare with the PWMed led
        sbi ddrd, 5 ;pin 5 pwm
        ldi r16, 0b00100011 ;fast pwm mode, non inverted pwm at oc0b = pin 5
        out tccr0a, r16 ;I'm using Timer0
        ldi r16, 0b00000001 ;no prescaler
        out tccr0b, r16
        ldi r16, 128 ; duty cycle = 50%
        out ocr0b, r16

  loop: rjmp loop

我试图更改工作周期值,但没有任何变化。

1 个答案:

答案 0 :(得分:2)

我发现自己是解决方案。代码是正确的,也是接线。将占空比设置为50%并不会对人眼产生影响。所以我试着把16放在ocr0b(占空比= 6.25%)然后我注意到了真正的区别。这是因为它遵循对数逻辑,因此占空比50%和100%之间的差异实际上非常小