timer - Arduino PWM 衰落由 avra 引导

标签 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

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

最佳答案

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

关于timer - Arduino PWM 衰落由 avra 引导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38193810/

相关文章:

c++ - Opencv 视频帧。我只能看到最后一帧

swift - 如何在 appDelegate 方法上设置计时器计划?

c++ - 将字符串转换为 MAC 地址

c - 为什么只有第一个中断起作用?

c - 内联 if (? :) doesn't work in _delay_us()

android - 当我按下后退按钮时如何让 CountDownTimer 保持运行

java - 通过计时器事件添加图像后,图像未出现在 JFrame 中

c - 是否有将 Arduino 代码转换为 C 代码的方法或教程?

c - Arduino 端口重定位(PORTD 到 PORTB)

c - AVR:if语句