PWM ile parlaklı değiştiren led uygulaması AVR atmega16a assembly

Başlatan sitkitanseltunc, 07 Ekim 2017, 08:53:40

sitkitanseltunc

Bir atmega16a kullanarak assembly dilinde belli süre aralıklarıyla parlaklık değiştiren led uygulaması yapmaya çalışıyorum. Bunun için AVR'ın PWM dalgalarını kuulanıyorum. Ama yazdığım program doğru çalışmıyor. Atmega16a'nın PORTB.3 pinini(FAST PWM çıkış pini) multimetre ile kontrol ettiğimde sıfır volt alıyorum. Fast pwm Modu ile ilgili yazdığım kodun doğru olduğundan eminim çünkü gecikme(pause-delay) kullanmadan fast pwm'i kullandığımda voltaj alıyorum PORTB.3 pininden. Yazdığım programın neresinde hata olduğunu söyleyebilir misiniz?

.include "m16adef.inc"
.def SAYAC1 = R17
.def GECICI = R16
.def SAYAC2 = R18
.def dummy2 = R19
.def temp1 = r20
.def dummy1 = r22
.def temp2 = r21

.cseg
.org 0
RESET:
LDI dummy1,0b11111111
OUT DDRB, dummy1
LDI dummy2, 0b00000001


START:
;fast pwm modu, non inverted, prescaling yok
LDI temp1,0b01101001  
OUT TCCR0, temp1
LDI temp2,0

mainloop:
;duty cycle'ı birer artırarak değiştir
OUT OCR0,temp2
rcall gecikme
INC temp2 
RJMP mainloop

gecikme:
	LDI SAYAC2, 255
SAY2:

	LDI SAYAC1, 255
SAY1:
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DEC SAYAC1
	
	BRNE SAY1
	DEC SAYAC2
	BRNE SAY2
	RET