2016-07-05 46 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