40mhz kristal kullanımı ? (18f2520 veya 18f2550)

Başlatan ghistmanzero, 01 Ağustos 2017, 12:03:38

ghistmanzero

merhaba  arkadaşlar ,
elimde  18f2520 ve 18f2550 pic var .birini seçicem ve ben bunun olabildiğince yüksek hızda çalışmasını istiyorum. datasheette max 48mhz de çalıştığı yazıyor. ancak burda 40 mhz kristal demiyor. ayrıca 40mhz kristal için kapasitor değeri de yok. şimdi ben direk 40mhz kristali  osc 1 ve osc2 uçlarına bağlayıp 15-22 pF lık kondansatorleri bağlayıp 40mhz çalıştırabilir miyim? bunun bu şekilde çalışmadığını okudum yabancı forumlarda. bunu nasıl çalıştırabilirim acaba ? deneyen var mı ?

ikinci bir alternatif de şu: bazı yerlerde pll moduna rastladım ki bu kristal hızını 4 e katlıyor. yani ben bu durumda 12mhz  kristal kullanır ve pll moddunda çalıştırırsam 48 mhzde çalışacak öyle mı? bunun için ccs c de böyle bir konfigurassyon yaptım
#include <18F2520.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#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)
#FUSES NOMCLR  
#fuses H4

 
#use delay(clock=48MHz,crystal=12MHz,USB_FULL)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)


burda  "#fuses H4 " ve  "#use delay(clock=48MHz,crystal=12MHz,USB_FULL)" ayarları bu iş için yeterli mi acaba ? ayrıca burda USB_FULL dediği de bu bahsettiğimiz pll modu mu oluyor ? hani normal bildiğimiz usb üzerinden filan bağlantı gerekmiyor değil mi? onunla bir alakası yoktur umarım . çünkü pici kart üzerine koyup akü ile beslemeyi düşünüyorum.
daha önce 20mhz e kadar normal şekilde kullandım picleri ama ilk defa yüksek hız gerekiyor. yardımcı olabilirseniz çok sevinirim.
( daha önce açılmış birkaç konuya baktım ama  net bir sonuç yok. )

eeburakdemir

#1
Merhaba,
Şu linkteki ilk kısımdaki gibi fuses ayarlarınızı yaptıktan sonra birde konfigrasyon ayarlarınızı yapmanız gerekir. PLL yazılımsal bir olaydır yani donanımsal birşey değildir. Mcu hızı belirlerken ana parametreniz MIPS veya DMIPS olmalıdır. ( DMIPS arm çekirdekli mcu larda mevcut ) Ayrıca kristal kullanırken özellikle yüksek hızar için mcu datasheetindeki kristal devresini dikkate almanız iyi olur. Aksi halde kristal aktif olamayabiliyor. Hatta bu konu daha önce konuşulmuştu.

https://ccsinfo.com/forum/viewtopic.php?p=195913
Asla pes etme...

selimkoc

Kullandığınız kristal 20 Mhz bile olsa önce onu 4 e bölüp sonra 12 ile çarparak 48 Mhz elde ediliyor. Bu işlem PLL ile yapılıyor.

ghistmanzero

@eeburakdemir @selimkoc  cevaplar için teeşekkürler. datasheette  eğer pll veya hspll kullanılacaksa normal 4 mhz, 8mhz bağlar gibi bağlanacağını gösteren bir şema var. ve  " HSPLL nın aksıne PLL yazılımsaldır" diyor. bu  piclerde hspll donanımı  da olduğu yazıyor. bu durumda 8mhz kristal takıp
#include "main.h" 
#use delay(clock=32000000) // 32MHz 
#fuses NOWDT,NOPROTECT,H4 

void main() 
{ 
   setup_oscillator(OSC_8MHZ|OSC_NORMAL|OSC_31250|OSC_PLL_ON);


Bu şekilde ayar yapınca dahili osilatörü mu kullanmış oluyorum ? kristal takmama gerek kalmıyor mu ? ya da yine takma gerekiyor mu ? bunları  cevaplarsanız sevinirim.ona göre devreyi kurup deniycem. hoş 8 mhz ile mi yoksa 32mhz  ile mi çalıştığını nasıl anlıycam o da ayrı şey.


bu arada ben 40 mhz osilator alıp taraksam çalışmaz mı devre ? ille de pll ya da hspll olması mı lazım?
baya soru sordum ama sizi yormadan kısa kısa cavaplar alabılırsem çok sevinirim. hani 40 mhz kullanmak için nasıl takıp nasıl configurasyon yapmam lazım ? ne datasheette ne de manuel guide da bunu anlatmıyor. ornek de bulamadım. yıne aynı şey pll veya hspll için de geçerli . 

selimkoc



Datasheetin 26 / 438 sayfasında blok olarak vermiş.

eeburakdemir

Hatırladıgım kadarıyla internal osc icin konfıgrasyon yerıne ınternal gibi birşey yazılıyordu.

#fuses INTRC,...
#use delay(8000000)

void main(){

   // tell pic to use internal crystal
   setup_oscillator(OSC_8MHZ | OSC_INTRC);

dahili osc kullanırsanız harici kristale gerek kalmaz. Eski mcu larda 70 derecelerde dahılı osc sapıtıyor. Bunu mcu ile bir pwm olusturup deneyebilirsiniz. Darbelerin bozuldupunu goreceksınız. Hangi frekansta çalıtığınızı da kullandığınız frekansa gore pwm yapıp deneyebilirsiniz. 40 Mhz osc takarsanız devrenız elbetteki calısır fakat krıstaller frekansı yukseldıkce fıyatları artmaktadır. Ayrıca krıstallerın salınımlarını stabıl yapabılmelerı ıcın de ppm degerlerıne dıkkat edılmelıdır. @selimkoc arkadasın da dedıgı gıbı PIC mcu lar ılk once 4 ' e boler sonra ıslemlerı yapar. Kullandıgınız mcu ıın datasheet ıyıce takıp edılmelı ve kullandıgınız ne olursa olsun uretıcı ve edıtor uretıcısının sundugu ornekler ıncelenmenız sızın acınızdan faydalı olacaktır.
Asla pes etme...

OG

Alıntı yapılan: eeburakdemir - 01 Ağustos 2017, 12:59:18
PLL yazılımsal bir olaydır yani donanımsal birşey değildir.
PLL bir DONANIM dır. Yazılımla açıp kapatılır demek istediniz herhalde.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

LukeSkywalker

40 MHz kristali kullanamazsınız.
Datasheet'te "TABLE 28-8: EXTERNAL CLOCK TIMING REQUIREMENTS" kısmını incelerseniz maksimum 25MHz'lik kristal osilatör bağlanabileceğini görürsünüz.


ghistmanzero

@OG  haklısınız . @LukeSkywalker  yani kristali normal kullanma durumunda max 25 mhz takabiliyorum. peki bahsedilen 48mhz veya 32mhz hıza nasıl ulaşabilrim? hani alıp 8 mhz kristal bağladım diyelim pice.22pf kapasitorleri de koydum. bu adımdan sonra ccs c de konfigurasyon komutları olarak
#include "main.h" 
#use delay(clock=32000000) // 32MHz 
#fuses NOWDT,NOPROTECT,H4 

void main() 
{ 
   setup_oscillator(OSC_8MHZ|OSC_NORMAL|OSC_31250|OSC_PLL_ON);
bunları yazınca girişe 38mhz baglamış gibi çalışır mı ? hani bunu alıp kendısı artık 32/4 yapıp 16mhz den 1/16=> 62,5 nslik komut işleme hızı ile çalışacak mı ?  kusura bakamayın .hani düz cümlelerle ilerlemeye çalışıyorum çünkü o kadar farklı yorumlar var ki . kafam iyice karıştı.

Salih

Benim bildiğim sadece 4MHz kristal bağlanarak 48MHz elde edilebiliyor.
Blok diyagramda sadece 4MHz kristal bağlı iken 96Mhz PLL çıkışı elde ediliyor, diyor.
Ölçeklemeyle 2'ye bölünerek 48Mhz elde ediliyor.
Bende kendi devremde 4MHz kullanarak, 48Mhz de çalıştırmıştım.

ghistmanzero

@Salih  pll 4e katlıyor deniyor . 4 ile max 16 mhz olmaz mı ? siz kullandığınız ayarlarla 48mhz elde ettiyseniz yardımcı olabilir misniz lüttfen? kendi devrenizde kullandığınız pic ve ccsc konfigurasyon ayarlarınızı yazabilir misiniz lütfen ?

Salih

Şu an deneme imkanım yok, aşağıdaki ayarlar 48Mhz çalışıyordu galiba.
Bir denermisin.


[/code]
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN, MCLR
#use delay(clock=48000000)

ghistmanzero

@Salih  maalesef kabul etmiyor onu .
ben projeyi uluştururken şöyle bir ayar yaptım. uygun olduğunuzda kontrol edebilir misiniz acaba ?
#include <18F2520.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#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)
#FUSES NOMCLR  
#fuses H4

 
#use delay(clock=48MHz,crystal=12MHz,USB_FULL)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)

Salih

Şöyle yaparak denermisin. Tabi kristal 4Mhz bağlı olsun.


#use delay(clock=48MHz,crystal=4MHz,USB_FULL)