Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

18F46K22 Çalışmıyor

Başlatan frederic, 05 Aralık 2012, 01:27:42

frederic

Arkadaşlar merhaba,aşağıdaki temel kodda 16mhz lik intrc osc yi pll ile 64mhz e yükseltipkullanmaya çalışıyorum fakat picde hiç hareket göremiyorum,atladığım bir şeymi var acaba?

#include <18F46K22.h>
#device adc=10

#FUSES NOMCLR
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES PRIMARY_SW               //Primary clock can be disabled in software
#FUSES NOBROWNOUT               //No brownout reset
#FUSES WDT_NOSLEEP              //Watch Dog Timer, disabled during SLEEP
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(int=16000000)

#define LED PIN_A1
#define DELAY 1000
#ZERO_RAM


void main() {
   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   setup_timer_4(T4_DISABLED,0,1);
   setup_timer_5(T5_DISABLED | T5_DIV_BY_1);
   setup_timer_6(T6_DISABLED,0,1);

   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   setup_oscillator(OSC_16MHZ|OSC_INTRC|OSC_PLL_ON);

   //Example blinking LED program
   while(true){
      output_low(LED);
      delay_ms(DELAY);
      output_high(LED);
      delay_ms(DELAY);
   }

}

Erol YILMAZ

#use delay(int=16000000)

kısmı biraz değişik olmuş,

Kodları denemedim ama FUSE ve Setup Oscillator kısmına odaklanman gerekiyor bence.

frederic

Hocam bu kodları wizarddan oluşturdum ben,bir kaç deneme yaptım,o dedikleriniz ile oynuyorum bende ama ses yok.Ne gerçeke nede isiste çalışmıyor.

camby

CCS nasıl yapıyor bilemiyorum ama cihaza ait kullandığım ayarlar aşağıdaki gibi , 64MHz çalışma frekansı ve dahili osilatör kullanıyorum :

Config :

CONFIG		FOSC = INTIO67          ; Internal oscillator block
		CONFIG		PLLCFG = ON             ; Oscillator multiplied by 4
		CONFIG		PRICLKEN = ON           ; Primary clock is always enabled
		CONFIG		FCMEN = OFF             ; Fail-Safe Clock Monitor disabled
		CONFIG 		IESO = OFF              ; Oscillator Switchover mode disabled
		CONFIG		PWRTEN = OFF            ; Power up timer enabledT
		CONFIG		BOREN = OFF             ; Brown-out Reset disabled in hardware and software
		CONFIG		WDTEN = OFF             ; Watch dog timer is always disabled. SWDTEN has no effect.
                CONFIG          PBADEN = OFF            ; PORTB<5:0> pins are configured as digital I/O on Reset
                CONFIG          MCLRE = INTMCLR         ; RE3 input pin enabled; MCLR disabled
                CONFIG          STVREN = OFF            ; Stack full/underflow will not cause Reset
                CONFIG          LVP = OFF               ; Single-Supply ICSP disabled
                CONFIG          DEBUG = OFF 
		CONFIG		CP0 = ON, CP1 = ON, CP2 = ON, CP3 = ON
		CONFIG		CPB = ON



Osilatör Ayarları :

;=============== Osilatör Ayarları =======================================
OSC_AYARLA
		bsf		OSCCON,6		; Internal Osc : 64 MHz
		bsf		OSCCON,5		; Internal Osc : 64 MHz
		bsf		OSCCON,4		; Internal Osc : 64 MHz
		bcf		OSCCON,1	
		bcf		OSCCON,0	

		bcf		OSCCON2,3		; Secondary oscillator is shut off if no other sources are requesting it.	
		bcf		OSCCON2,2		; Oscillator drive circuit off (zero power)
		
		bsf		OSCTUNE,6		; PLL enabled
		
		RETURN

frederic

Aynen camby hocam sizinki gibi register düzeyinde yazdığımız da sıkıntısız çalışıyor fakat ccs in setup_oscillator fonksiyonu nedense çuvallıyor bu işlemci de,anlamadım hala sebebini.

sadogan

#include <18f46k22.h> 
#device *=16
#device adc=10
#fuses NOWDT,PUT,INTRC_IO,noMCLR, noBROWNOUT
#use delay(clock=64000000)
void main(void)
{
  setup_oscillator(OSC_64MHZ); 
  while(TRUE)
  {
      output_toggle(pin_b0);
      delay_ms(500);
  }
 }

Proteusta çalışıyor
Gerçek devrede test edemedim

eraygil

#6
.

skara1214

Alıntı yapılan: sadogan - 05 Aralık 2012, 22:23:56
#include <18f46k22.h> 
#device *=16
#device adc=10
#fuses NOWDT,PUT,INTRC_IO,noMCLR, noBROWNOUT
#use delay(clock=64000000)
void main(void)
{
  setup_oscillator(OSC_64MHZ); 
  while(TRUE)
  {
      output_toggle(pin_b0);
      delay_ms(500);
  }
 }

Proteusta çalışıyor
Gerçek devrede test edemedim
hocam burada fuseslarda pll yapıldığını belirtmemissiniz.Bu şekliyle 4 te bir hızında çalışması gerekmezmi?
Herkes ölür ama herkes gerçekten yaşamaz

frederic

Aynen hocam bu kod ile 4/1 hızında çalışır,zaten proteusta da dikkat edilirse bir süre sonra cpu load uyarısı verir.

sadogan

Alıntı yapılan: frederic - 06 Aralık 2012, 12:43:58
Aynen hocam bu kod ile 4/1 hızında çalışır,zaten proteusta da dikkat edilirse bir süre sonra cpu load uyarısı verir.
Bende cpuload uyarısı vermiyor.
"4/1 hızında çalışır diyorsun" proteusun skop u nu bağlayıp ölçtünüzmü yoksa tahminmi ?
ben proteusun skop uyla baktiğimda, zaman 100ms 10 karelik kare dalga görüyorum.
Aksam 18f25k22 li devremde test edip sonucu yazarım.

frederic

#10
500 ms lik gecikme verip 100 ms lik kare dalga görmek normalmi yani ?Ayrıca pll aktif etmeden 64mhz e nasıl çıkabilirsin ki,sistem çalışıyor demek her şey yolunda demek değildir.Ona bakarsanız ben register düzeyin de camby hocam gibi yazdığımda zaten sorunsuz çalışıtırıyorum.Burda mesele setup_oscillator fonksiyonunda oluşan tuhaflık.

sadogan

#11
@skara1214
Alıntı Yaphocam burada fuseslarda pll yapıldığını belirtmemissiniz.Bu şekliyle 4 te bir hızında çalışması gerekmezmi?
setup_oscillator(OSC_64MHZ); bu pll i aktif ediyor diye düşünüyorum.

....................   setup_oscillator(OSC_64MHZ);  
0005C:  MOVLW  70 ---->16mhz seciyor        
0005E:  MOVWF  FD3
00060:  BSF    F9B.6 ---> PLL enable
00062:  BCF    F9B.7----> INTSRC


FD3 OSCCON   registeri   
F9B OSCTUNE registeri

mesaj birleştirme:: 06 Aralık 2012, 14:35:09

Alıntı yapılan: frederic - 06 Aralık 2012, 14:18:26
500 ms lik gecikme verip 100 ms lik kare dalga görmek normalmi yani ?Ayrıca pll aktif etmeden 64mhz e nasıl çıkabilirsin ki,sistem çalışıyor demek her şey yolunda demek değildir.Ona bakarsanız ben register düzeyin de camby hocam gibi yazdığımda zaten sorunsuz çalışıtırıyorum.Burda mesele setup_oscillator fonksiyonunda oluşan tuhaflık.
500 ms gecikme verip 100ms yelik 10 kare lik kare dalga diye yazdım yanlış okumuşşun.
sunu demek istedim skopta gördügüm kare dalga 100*10=1000 ms ye
Hazır devreiniz varsa geçek devrede test edin sonucu bende merak ediyorum.

frederic

Yüklemiştim zaten hocam normalden yavaş çalışıyor malesef sizin kodda.Bir sıkıntı var ama bulucaz bakalım.

tekosis

hocam problemi çözer mi bilmem ama ben 18f4620 ye geçtiğimde işlemci olması gerektiğiinden tam 1000 kat hızlı çalışıyordu. sorunu bulamadım daha sonra kulllandığım ccs c nin eski versiyonunu kaldırıp yeni versiyonu yükledim aynı kodları tekrar denedim cihaz normal çalıştı.
belki işinize yarar.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

frederic

Alıntı yapılan: sadogan - 06 Aralık 2012, 14:30:56
@skara1214setup_oscillator(OSC_64MHZ); bu pll i aktif ediyor diye düşünüyorum.

....................   setup_oscillator(OSC_64MHZ);  
0005C:  MOVLW  70 ---->16mhz seciyor        
0005E:  MOVWF  FD3
00060:  BSF    F9B.6 ---> PLL enable
00062:  BCF    F9B.7----> INTSRC


FD3 OSCCON   registeri   
F9B OSCTUNE registeri

mesaj birleştirme:: 06 Aralık 2012, 14:35:09
500 ms gecikme verip 100ms yelik 10 kare lik kare dalga diye yazdım yanlış okumuşşun.
sunu demek istedim skopta gördügüm kare dalga 100*10=1000 ms ye
Hazır devreiniz varsa geçek devrede test edin sonucu bende merak ediyorum.

sadoğan hocam verdiğiniz kodda sıkıntı yokmuş, ben kullandığım versiyon sebebi ile sıkıntı yaşıyormuşum meğerse kusura bakmayın,yordum sizi de.