18f2550 delay sorunu , 48MHz

Başlatan camby, 14 Ocak 2012, 21:01:58

camby

18f2550 ile led yakıp söndürüyorum.

Isis simülasyonunda 48MHz işlemci frekansı ile yaptığım bekleme 1.04 saniye. Fakat pratikte bu süre 1saniyeden daha kısa oldu ( tahmini 0.7 sn ). Nedeni ne olabilir ?

Kristal 4 MHz .

Config kısmı :
CONFIG		PLLDIV = 1		; PLL Prescaler Selection bits:
		CONFIG		CPUDIV = OSC1_PLL2	; System Clock Postscaler Selection bits
		CONFIG		FOSC = HSPLL_HS 	; Oscillator Selection bits


Gecikme programı : ( 16f ile kullandığımla aynı )

;=====		
BEKLE	

		movlw		0x6D
		movwf		d1
		movlw		0x29
		movwf		d2
		movlw		0x14
		movwf		d3
Delay_0
		decfsz		d1, f
		goto		Delay_1	
		decfsz		d2, f
Delay_1		goto		Delay_2
		decfsz		d3, f
Delay_2		goto		Delay_0
	
	return


Program :

ANA		
		bsf		PORTB,4
		CALL		BEKLE
		bcf		PORTB,4
		CALL		BEKLE

		GOTO  		ANA

muhittin_kaplan


camby

Hocam okumuştum o konuyu yazmadan önce ancak ordaki sorun C4 ve C5 pinlerinden kaynaklı anladığım kadarıyla.

Benim config'de bir hata var mıdır ? 4MHz kristali direk PLL'e alıyorum (96MHz) sonra onu 1/2 ile işlemciye veriyorum ( 48 MHz ) .

mcn

C4 ve C5 konusu ayrıydı hocam,hız ile ilgili bir sorun yaşıyorsanız muhtemelen PLL lerdedir.
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

camby

Yazdığım kodlara göre 1sn delay yapması gereken yer 0.7sn delay yapıyor. Bu durumda pic yaklaşık 65-75 MHz'de çalışıyor.  Göstermiş olduğum PLL ayarları yanlış mı ?

muhittin_kaplan

PLL girişinin 4mhz olması gerek. PLLDIV/1 olması gerek diye hatırlıyorum.

camby

Alıntı yapılan: muhittin_kaplan - 14 Ocak 2012, 21:22:17
PLL girişinin 4mhz olması gerek. PLLDIV/1 olması gerek diye hatırlıyorum.

evet hocam benimkiler de aynı .

camby

#7
Sorunu buldum , ancak çözümünü bulamadım . Sorun mplab ortamındaki Proteus VSM debugger dan kaynaklı.

Şöyleki , normalde 2 cycle'da işlenen GOTO komutu. Mplab'ta isis ile sim yaparken 3 cycle'da işleniyor. Bunu farketmeyerek içinde bolca GOTO bulunan 1 saniyelik gecikme döngüsü hazırladım. Bu hatanın aksine gerçekte GOTO komutu 2 cycle'da işlendiği için gecikme döngüsü 1 saniyeden çok daha kısa oldu.

Debugger aracını MPLAB SIM olarak değiştirdiğimde , orada bir problem yok GOTO , olması gerektiği 2 cycle'da işleniyor. Gecikme döngüsünü bu duruma göre düzeltince sorun çözüldü.

Özetle 48 MHz çalışmada ve PLL'de bir sorun yok ancak MPLAB ortamında ISIS ile debug işleminde böyle bir sıkıntı var.

Böyle bir sorun daha önce yaşayan oldu mu ? Sorun nedir , bug mı var yoksa eksik yada yanlış bir ayarlama mı yaptım acaba ?

Edit 1 : GOTO komutunun dışında CALL komutunu da 3 cycle 'da işliyor Isis. Return komutu normal : 2 cycle

Edit 2 : Durum sadece Mplab ortamında değil , Sadece Isis sim açık iken de aynı. GOTO ve CALL komutları normalden fazla sürede işlendiğinden gecikme döngülerinde sorun oluyor.