【问题标题】:Arduino PWM fading led with avra带有 avra 的 Arduino PWM 衰落导致
【发布时间】:2016-07-05 00:52:20
【问题描述】:

我正在汇编中编写 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

我尝试更改占空比值,但没有任何变化。

【问题讨论】:

  • 使用 avr-gcc 我有或多或少相同的 .lss (程序集),它工作正常。可能是LED接错了?

标签: timer arduino avr led pwm


【解决方案1】:

我自己找到了解决方案。代码正确,接线也正确。仅将占空比设置为 50% 对人眼没有影响。因此,我尝试将 16 放入 ocr0b(占空比 = 6.25%),然后我注意到了真正的不同。这是因为它遵循对数逻辑,所以占空比 50% 和 100% 之间的差异其实很小

【讨论】:

  • 好吧,如果你在视力范围内移动led,即使速度太快,你也可以看到“闪烁的痕迹”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多