2016-07-05 45 views
3

我正在编写Arduino UNO(= ATMega328P-PU)程序在程序集中以节省内存,所以我使用avra.exe(与atmel工作室的avrasm32相同)编译和avrdude上传,并简单像闪烁程序运行良好。但是现在我试图用pwm半亮LED。我检查了我的代码中的错误,但我没有发现任何错误,但是LED指示灯完全亮了。我也检查了接线。这是我的pwm.asm代码:Arduino PWM衰落导致与avra

.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 

我试图改变占空比值,但没有改变。

+0

使用avr-gcc我有或多或少相同的.lss(汇编),它工作正常。也许LED连接不正确? – KIIV

回答

2

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

+0

好吧,如果你在视力上移动LED,即使它的眼睛速度太快,你也可以看到“闪烁的痕迹”。 – KIIV