Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

18F4520 Osilatör ayarları

Başlatan mustafabat, 26 Şubat 2016, 18:16:12

mustafabat

Merhaba 18f4520 ile bir projemiz var. işlemci en fazla 40 Mhz ile çalışabiliyormuş. işlemciye 10 Mhz lik kristal bağladım ve aşağıdaki osilatör ayarlarını yaptım


#fuses H4,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=40000000)


Bu ayarlara göre işlemciyi 40 Mhz de çalıştırmış olur muyuz?
Diğer sorum yaptığımız işlemi nasıl test edebilirim. Yani işlemcinin çalışma hızını nasıl test edebilirim?

dursuncemal

10 mhz kristal takip 40 mhzde calistiramazsin + #use delay(clock=40000000) dedigin anda programda kullanacagin delay lar 4 kat daha uzamis olacak yani sen delayms(1000); dediginde 1 saniye yerine 4 saniye gecikme olusacak.
:=

selimkoc


mustafabat

Peki kristal ayarları nasıl olmalı bilgilendirebilir misiniz?

dursuncemal

#FUSES XT                         //Crystal osc <= 4mhz // baglamis oldugun kristal 4mhz veya daha kucuk ise
#FUSES XTPLL                    //Crystal/Resonator with PLL enabled //  pll aktif  calisma frekansin baglamis oldugun kristal * 4 

#FUSES EC_IO                    // harici osilator clock cikisi yok (kristal yerine osilator baglanacak)
#FUSES EC                         // harici osilator clock cikisi  var

#FUSES ECPIO                    //harici osilator clock cikisi  + pll  clock cikisi yok
#FUSES ECPLL                    //harici osilator clock cikisi  + pll  clock cikisi var

#FUSES INTRC_IO                 //dahili osilator clock cikisi yok
#FUSES INTRC                    //dahili osilator clock cikisi var

#FUSES HS                         // kristalin 4 mhzden buyuk olmali  
#FUSES HSPLL                    //kristalin 4 mhzden buyuk olmali   calisma frekansin  kristalin *4
:=

mustafabat

#FUSES HSPLL                    //kristalin 4 mhzden buyuk olmali   calisma frekansin  kristalin *4


ile 20 mhz kristal kullanmak istediğimde

#use delay(clock=20000000) yazdığımda program da hızlanacak mı? Yukarıda dursuncemal ın söylediği tam tersi değil mi?

dursuncemal

#FUSES HSPLL          //  calisma frekansin  kristalin * 4 yani 40 mhz. external kristal kullandigin zaman sadece pll yi aktif edersen hizlanirsin.aksi halde hizin taktigin kristal olur.
#use delay(clock=20000000) <  bu tanimlamayi external kristal kulanarak hic denemedim ama fikrim su ki;external 40mhz kullanip   #use delay(clock=20000000) dersen delay fonksiyonlarin  hizlanir (programinin calismasi degil).   #use delay(clock=40000000)  dersen tam olur.

:=

dursuncemal

usenmedim denedim yukaridaki tahminim dogru.    #use delay(clock=xx) tanimlamasi sadece programinin icinde kullandigin delay fonksiyonlarinin referans degeri.
dolayisi ile calisma frekansin ne ise bu tanimlamaya o degeri yazmaz isen delay fonksiyonlarinin zamanlamalari dogru calismaz bu tanimlamanın calisma hizi ile alakasi yoktur.
:=

RaMu

#8
CcsC IDE nin help kısmına bakarsanız daha kolay olur.

#use delay(clock=40MHz, crystal=10MHz)


detaylar:
https://www.picproje.org/index.php/topic,59489.msg460551.html#msg460551

mesaj birleştirme:: 27 Şubat 2016, 07:28:42

Ayrıca @selimkoc un dikkat çektiği gibi, datasheet ten PLL o kadar çarpabiliyormu kontrol etmek lazım.

Yukarıdaki yazımda CcsC pll bu kadar çarpmaz diye uyarı veya hata verebiliyordur.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mustafabat

#include <18F4520.h>

#fuses  H4,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=40000000)

#define led pin_b0       

void main()
{
   set_tris_b(0x00);     
   output_b(0x00);               
   
   while(true)
   { 
      output_high(led);
      delay_ms(5000);
      output_low(led);
      delay_ms(1000);
   }
}


Yukarıdaki kodu işlemciye yükledim led 5 sn yanık, 1 sn sönük kaldı. Kronometre ile ölçtüm bir sorun yok. Ama işlemcinin komut işleme hızı nedir.

rree

#10
40Mhz/4=10Mhz   cycle 0.1us
#include <18F25K22.h>
#device ADC=10
#FUSES HSH
#FUSES PLLEN
#FUSES CCP2C0
#FUSES CCP2C1
#use delay(clock=40000000,crystal=10000000)

Yukarıdaki benim 18F25K22 için  konfigirasyon.  Osilator HSH moduda  10mhz kristal Bağlanıyor.
Pll devresi 4 çarpıp 40 Mhz çıkarıyor sonra ön bölücü 4 bölüyor. İç clock 10 Mhz olmuş oluyor.

mustafabat

#include <18F4520.h>
#device adc=8

#fuses  H4,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=40000000,crystal=10000000)


18f4520 için yukarıdaki konfigurasyon ayarlarını yaptığımda aynı şeyi yapmış olacağız diye düşünüyorum. Haklımıyım?

RaMu

#12
Haklı sayılırsın.

#FUSES kısmıyla oynamanıza gerek yoktur, yani
programınızda #FUSES diye bir ayar olmayacak,
bu CcsC nin eski versiyonlarından kalma bir ayar,
'eski kodlarda birebir kullanılabilsin-derlenebilsin diye var'
(benim düşüncem, yada öyle tahmin ediyorum, başka artılarıda var tabiki).

CcsC de kod yazarken her zaman "Project Wizard" kısmını kullanın,
yapılması gereken tüm ayarları, project wizard ın menülerinden yapın,
başka birşey yapmanıza gerek yok.
(Tabiki istisnalar var.)

Not: Zaten CcsC de c/asm list kısmına bakılırsa,
fuses ayarlarının otomatik olarak ayarlandığı şekilde eklendiği görülebilir.

#use delay(clock=40000000,crystal=10000000)

veya
#use delay(clock=40MHz,crystal=10MHz)

altdaki daha okunaklı.

Burada picin osilatör (OSC1 OSC2) bacaklarına 10MHz kristal bağladım,
picin 40MHz de çalışmasını istiyorum,
demiş oluyoruz.

40MHz de çalışan 18F serisi bir pic 40/4=10MHz hızında komut işler, yani
saniyede 10 milyon komut işler, 10 MIPS (Million Instruction Per Second = saniyedeki milyon komut işleme sayısı)
Buradaki komut mcu nun mimarisindeki komutlardır, instruction set, ASM komutları denebilir,
bazı komutlar 1 komut çevriminden daha uzun sürede işleyebilir.
(return, goto, bit test ...gibi atlama zıplama yapan komutlar,varsa  çarpma bölme, vs.)

C de kod yazarken komut hangi hızda işletiliyor kısmı neden merak edildi anlayamadım.


mesaj birleştirme:: 28 Şubat 2016, 23:15:26

Alıntı yapılan: rree - 28 Şubat 2016, 22:08:34
...
Osilator HSH moduda  10mhz kristal Bağlanıyor.
Pll devresi 4 çarpıp 40 Mhz çıkarıyor sonra ön bölücü 4 bölüyor. İç clock 10 Mhz olmuş oluyor.

Çok önemli değil ama bu bilginin bir kısmı hatalı,
İç clock dan kasıt nedir bilmiyorum ama:
MCU bu ayarlarla yukarıda dediğim gibi 1 saniyede 10milyon komut işler,
1 komutu 0.1 mikrosaniyede işler.
MCU datasheette Fosc diye geçen clock 40MHz olur,
yani işlemci 40MHz de çalışır ama:
Microchip in 18F de kullandığı mimari gereği
(hemen hemen) her komut 4 clock çevriminde işlenir, fetch decode execute...
Finstr = 10MHz oluyor.
İç clock diye tabir ettiğiniz şey aslında mcu nun bir komutu işleme süresine tekabül etmiş oluyor,
iç clock denebilecek şey ise Fosc zaten 40MHz oluyor,
önbölücü kavramı da varolan birşey ama
genelde modüllerde bulunur (timer, usb vs.)
oradada clock frekansını düşürmek için kullanılır.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mustafabat

Bir çizgi izleyen robot yapmayı düşünüyorum. Çizgi izleyende sensörleri tarama ve alınan veriyi işleme süresinin kısalması robotun daha hassas olmasını sağlar diye düşündüm ve işlemciyi nasıl daha hızlı çalıştırabilirim diye bir araştırma yapmak istedim. şimdiye kadarki uygulamalarımda hep 4Mhz kristal kullanmıştım.

selimkoc

PIC18F4550 kullan USB bootloderle prg atmak daha kolay ve 48Mhz çalışıyor.