atmega32 kristalsiz calisir mi?

Başlatan nusyil, 15 Ocak 2013, 21:17:04

nusyil

Herkese Merhabalar

Atmega32'yi programlamak icin plaket uzerine bir devre yaptim. AVR Studio6' da programi yazip Burn-o mat programi ile atmega32'ye yukluyorum. Devre cok basit ; led yakip sondurme. Sorun su ki, Isis'te calisan program gercek atmega32'de calismiyor. Yaptigim programlayici'da kristal yok. Programlama yaparken Fuse'leri dahili 1 MHZ osilatoru kullanacak sekilde ayarliyorum. Gercek devre uzerinde kristal kullanimi zorunlu mu dur?


ilhan_mkp

hocam fuselerden dahili osilatörü aktif edince extosilatör gereekmez ve çalışır.

nusyil

Ustadim fuse ayarlarim : hfuse = 99h  lfuse=e1h seklinde ve dahili osilator secili. Buna ragmen calismiyor?

ilhan_mkp

hfuse=d9 yapın bu haliylen jtag disable olacak led hangi pinde bağlı bilmiyorum muhtemlen jtag ile ilgi pindedir.

led pordc üzerindemi ?

nusyil

#4
Hocam program ile ugrasirken birsey dikkatimi cekti : Program " Delay" adli altprograma dallaniyor ancak oradan geri donemiyor. Sanirim program orada takiliyor. Ancak isin ilginci program Isis'te herhangi bir sorun olmadan calisiyor. Asagida kodu vereyim, bilmiyorum, Assembly biliyor musunuz ancak bilmeseniz bile tahmin yurutebilirsiniz sanirim cunku program cok kisa.
basla: 
 ldi	r20,255
 ldi	r21,0
 out	ddra,r20	; port a cikis olarak ayarlandi
 out	porta,r21	; port a sifirlandi
 sbi	porta,0		; port a 1.biti set edildi
 call	delay
 cbi	porta,0		; port a 1.biti sifirlandi
 call	delay
 jmp	basla
;==========================================================================
delay:	ldi	r16,255
don2:	ldi	r17,255
don:	nop
		dec	r17			; 8051 deki djnz komutu
		tst r17			; Test r17
		breq r17sifir	; r17=0	ise dallan
		jmp	don
r17sifir:
		dec	r16
		tst r16			; Test r16
		breq r16sifir	; r16=0	ise dallan
		jmp	don2
r16sifir:	ret



Programin .hex kodu :

https://hotfile.com/dl/189188037/748f282/deneme.hex.html

Bu da isis resmi :

http://

ilhan_mkp

hocam daha asm öğrenmeye calışıyorum ama orada call ile çağırdığınız satırların sonunda ret gibi bişi gerekmiyormu.

nusyil

Ret komutu altprogramlarin en sonuna eklenir. Bu programda da "Delay" altprograminin en sonunda

r16sifir:   ret

satiri var.

Kabil ATICI

belirlediğin zamanlama kısa kalıyor olabilir. Çıkışı osilaskop ile incele. Veya tek  yak/söndür ile de gecikme alt programından döndüğünü görebilirsin.
Döngü içindeki port atama işini döngü dışında bırak.

(brne) Eşit değilse dallan komutunu kullanırsan jmp komutundan kurtulabilirsin.

ambar7

nusyil

Internette biraz arastirma yaparak sorunu cozdum cok sukur :) Program yazarken ilk once Stack'i ayarlamam gerekiyormus. Bunun icin de programin en basina asagidaki satirlari ekledim :
ldi r16, low(RAMEND)	; stack pointer ayarlaniyor!! Bu ayarlama yapilmazsa program calismiyor!!!!!!!!
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16

Su an problemsiz calisiyor, cevap yazan arkadaslara cok tesekkurler!!

GRaFiT

Vay bea kristalsiz çalıştığını da öğrenmiş olduk elbet bir gün lazım olur  ;)
http://teknokoliker.com - Kişisel Web Sitem