proton basic pic18f2550 pic18f25k22 pll kullanımı pic18f4550 clock ayarları
Proton basic 18f serisi için pic18f2550 için pll kullanımına örnek kodlar aşağıda. Her işlemci için config ayarları farklı olabiliyor. Pic18f2550 için 16mhz kristal ile pll kullanımını, pic18f25k22 ile dahili 16mhz osilatör ile 64mhz pll çalışmasını örneklemeye çalıştım.
Ayrıca bir bilgi daha vermek isterim, aşağıdaki pic18f2550 pll kodu denemedim ama pic18f4550 için de kullanılabilir.
Pic18f2550 için örnek pll kodu:
Device = 18F2550
Declare Xtal = 48 'Gerçek devrede 16mhz kristal mevcut, pll devrede.
Config_Start
FOSC = HSPLL_HS 'Yüksek hızlı osilatör seçiliyor çünki kristal 16 mhz, pll açılıyor
PLLDIV = 4 'Kristal frekansı 4'e bölünüyor
Config End
Pic18f25k22 için örnek pll kodu:
Device = 18F25K22
Declare Xtal = 64 ' Gerçekte devrede kristal kullanılmıyor, dahili 16mhz osilatör kullanılıyor.
OSCCON = %01110100 ' 16MHz dahili osilatör açılıyor.
OSCTUNE = %01000000 ' PLL açılıyor
OSCCON2 = %10000100 ' Saat kaynağı olarak seçiliyor.
Config_Start
FOSC = INTIO67 ' Dahili osilatör kullanıldığı belirtiliyor
PLLCFG = On ' Osilatör doğrudan kullanılıyor
PRICLKEN = On ' Birincil saat etkin
Config End
Pic18f4550 usb için örnek pll kodu:
Device = 18F4550 ' Choose a device with on-board full speed USB
Declare Xtal = 48 ' Inform the compiler we’re operating at 48MHz
Config_Start
PLLDIV = 3 ' Divide by 3 (12 MHz oscillator input)
CPUDIV = OSC1_PLL2 ' [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
USBDIV = 1 ' USB clock source comes directly from the primary osc
FOSC = HSPLL_HS ' HS oscillator, PLL enabled
FCMEN = OFF ' Fail-Safe Clock Monitor disabled
IESO = OFF ' Oscillator Switchover mode disabled
Config_End
Pic18f4520 için 10 mhz ktistal ile pllde 40mhz elde edilen config ayarı:
Device 18F4520
Config_Start
OSC = HSPLL ; HS oscillator, PLL enabled (Clock Frequency=4 x FOSC1)
FCMEN = OFF ; Fail-Safe Clock Monitor disabled
IESO = OFF ; Oscillator Switchover mode disabled
PWRT = OFF ; PWRT disabled
BOREN = OFF ; Brown-out Reset disabled in hardware and software
WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit)
MCLRE = On ; RE3 input pin enabled; MCLR disabled
LPT1OSC = OFF ; Timer1 configured for higher power operation
PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
CCP2MX = PORTBE ; CCP2 input/output is multiplexed with RC1
STVREN = OFF ; Stack full/underflow will not cause Reset
LVP = OFF ; Single-Supply ICSP disabled
XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
Debug = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
Config_End
Xtal 10
Declare PLL_Req TRUE '40mhz 'komut işleme süresi 0,1uS
ETEPİC.COM SİTESİNDEDE PBP İÇİN BİR AYAR HAKKINDA BİLGİLER VERİLMİŞ O LİNKİ VE YAZILANLARI EKLİYORUM.
Config_Start
OSC = HSPLL ; HS oscillator, PLL enabled (Clock Frequency=4 x FOSC1)
FCMEN = OFF ; Fail-Safe Clock Monitor disabled
IESO = OFF ; Oscillator Switchover mode disabled
PWRT = OFF ; PWRT disabled
BOREN = OFF ; Brown-out Reset disabled in hardware and software
WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit)
MCLRE = On ; RE3 input pin enabled; MCLR disabled
LPT1OSC = OFF ; Timer1 configured for higher power operation
PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
CCP2MX = PORTBE ; CCP2 input/output is multiplexed with RC1
STVREN = OFF ; Stack full/underflow will not cause Reset
LVP = OFF ; Single-Supply ICSP disabled
XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
Debug = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
Config_End
Xtal 10
Declare PLL_Req TRUE '40mhz 'komut işleme süresi 0,1uS
ETEPİC.COM SİTESİNDEDE PBP İÇİN BİR AYAR HAKKINDA BİLGİLER VERİLMİŞ O LİNKİ VE YAZILANLARI EKLİYORUM.
Arci yazmış: merhaba 18F4550 pic e 20Mhz kristal bağlı ve devrem çalışıyor. seri haberleşme vs bir problem yok. şimdi Picin PLL ile 48Mhz de çalışmasını isityorum alltaki şekilde sigorta ayarları yaptım sanırsam doğru yardımcı olabilirmisiniz.
birde devrenin çalışma frekansının değişip değişmediğini anlamanın bir yolu varmı mesala paylaştığım kodları yüklediğimde en basitinden uart baud ayarı yapmam gerekiyordu ama olmadı böylece frekansın değişmediğini var sayıyorum.
birde devrenin çalışma frekansının değişip değişmediğini anlamanın bir yolu varmı mesala paylaştığım kodları yüklediğimde en basitinden uart baud ayarı yapmam gerekiyordu ama olmadı böylece frekansın değişmediğini var sayıyorum.
ASM
__CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L
__CONFIG _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _BORV_0_2L & _VREGEN_OFF_2L
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
__CONFIG _CONFIG3H, _PBADEN_OFF_3H
__CONFIG _CONFIG4L, _LVP_OFF_4L & _ICPRT_OFF_4L & _XINST_OFF_4L
ENDASM
UCFG.2=1 'FULL SPEED MODE AKTİF 48 MHZ (FSEN=1)
OSCCON.0=0 'PRIMARY OSC
OSCCON.1=0 'PRIMARY OSC
OSCCON.7=0 'IDLEN DISABLE
DEFINE OSC 48 'bir komut çevrimi 0,1us
eteyazmış:
Bu işlemci sabit 4Mhz giriş OSC değerinden PLL ile 96Mhz sabit frekans üretmektedir.
Bu nedenle öncelikle 20Mhz OSC değerini bölerek 4Mhz 'e düşürmek için PLLDIV = 5 yani _PLLDIV_5_1L ayarını vermek gerekiyor ki vermişsin. Ardından işlemcinin bunu osc frekansı olarak 48 Mhz de kullanabilmesi için CPUDIV = OSC1_PLL2 yani _CPUDIV_OSC1_PLL2_1L ayarını vermek gerekiyor ki onuda vermişsin. PLL nin aktif edilmesi için FOSC_HSPLL_HS_1H ayarınında verilmesi gerekiyorki onuda vermişsin.
Son olarak da Define OSC 48 komutunun verilmesi gerekiyor ki onuda vermişsin.
Sorun gözükmüyor çalışması lazım.
Ete
Bu nedenle öncelikle 20Mhz OSC değerini bölerek 4Mhz 'e düşürmek için PLLDIV = 5 yani _PLLDIV_5_1L ayarını vermek gerekiyor ki vermişsin. Ardından işlemcinin bunu osc frekansı olarak 48 Mhz de kullanabilmesi için CPUDIV = OSC1_PLL2 yani _CPUDIV_OSC1_PLL2_1L ayarını vermek gerekiyor ki onuda vermişsin. PLL nin aktif edilmesi için FOSC_HSPLL_HS_1H ayarınında verilmesi gerekiyorki onuda vermişsin.
Son olarak da Define OSC 48 komutunun verilmesi gerekiyor ki onuda vermişsin.
Sorun gözükmüyor çalışması lazım.
Ete
Şimdi de clock ayarları için bazı bilgileri ekliyorum. Clock ayarları bilgileri buradaki siteden alıntıdır.
PIC18F4550 CLOCK AYARLARI:
Bu yazımda 18f4550 mikrodenetleyicisi ile ilk programımıza başlamadan önce kullanılabilcek olan osilatör kaynaklarından ve USB gibi yüksek frekans gerektiren uygulamalarda frekans çapıcı olarak PLL(Pulse Lock Loop) konusunda bilgi vereceğim.
OSİLATÖR KONTROLÜ
18F4550 mikrodenetleyicisinde osilatörün çalışması CONFING1L, CONFIG1H adındaki 2 konfigürasyon registeri aracılığıyla belirlenir. Osilatör modu ve USB prescaler/postscaler seçenekleri bu registerlar ile ayarlanır.
OSCCON registerı hangi clock modunun aktif edileceğinin seçimi için kullanılır.
OSCTUNE registerı dahili INTRC frekans kaynağını kırpma ayarlarını yapmak için kullanılır.
OSİLATÖR ÇEŞİTLERİ
18F4550 12 farklı osilatör modu mevcuttur. FOSC3:FOSC0 konfigürasyon bitleriyle bu modların seçimi gerçekleştirilir.
- XT Crystal/Resonator-Birincil osilatör kaynağından gelen Max 4MHz osilatör.
- XTPLL Crystal/Resonator – 4 MHz osilatör bölme oranı uygulanmadan PLL verilir ve PLL çıkışı kaynak olarak kullanılır.
- HS High-Speed Crystal/Resonator– Birincil osilatör kaynağından gelen 4MHz üzeri osilatör kullanılır.
- HSPLL High-Speed Crystal/Resonator- 4MHz üzeri osilatör PLL 4MHz elde edilecek şekilde bir bölme oranıyla girişine verilir ve PLL çıkışı kullanılır
- EC External Clock – Harici bir clock kaynağı OSC1 pinine verilir, OSC2 pininden FOSC/4 frekansında bir sinyal çıkışı verilir.
- ECIO External Clock – Harici bir clock kaynağı OSC1 pinine verilir, OSC2(RA6) pini normal IO olarak kullanılabilir.
- ECPLL External Clock – Harici bir clock kaynağı 4MHz’i sağlayacak bir bölme oranıyla PLL girişine verilir ve PLL çıkışı kaynak olarak kullanılır. OSC2(RA6) pini FOSC/4 frekansında sinyal üretir.
- ECPIO External Clock – Harici bir clock kaynağı 4MHz’i sağlayacak bir bölme oranıyla PLL girişine verilir ve PLL çıkışı kaynak olarak kullanılır. OSC2(RA6) pini normal IO olarak kullanılır
- INTHS – Dahili osilatör mikrodenetleyiciye clock kaynağı olarak kullanılır, harici HS osilatör USB için kullanılır.
- INTXT – Dahili osilatör mikrodenetleyiciye clock kaynağı olarak kullanılır, harici XT osilatör USB için kullanılır.
- INTIO – Dahili osilatör mikrodenetleyiciye clock kaynağı olarak kullanılır, harici clock kaynağı USB için kullanılır . OSC2(RA6) pini normal IO olarak kullanılabilir.
- INTCKO – Dahili osilatör mikrodenetleyiciye clock kaynağı olarak kullanılır, harici clock kaynağı USB için kullanılır . OSC2(RA6) pini FOSC/4 clock çıkışı verir.
OSİLATÖR MODLARI VE USB İŞLEMİ
USB birimine clock kaynağı olarak sadece primary(birincil) osilatör seçilebilir. Bu clock kaynağı direk olarak USB kaynağı olarak kullanılabilirken, dolaylı olarak yani PLL girişine verilip, PLL çıkışından USB ye verilerek kullanılabilir.
Primary Osilatör
HS: Yüksek hızlı osilatör .(>4MHz)
XT: Düşük hızlı osilatör.(<=4MHz)
EC: OSC1 girişine bir clock kaynağı bağlanır. OSC2 pini FOSC/4 clock sağlar.
ECIO: OSC1 girişine bir clock kaynağı bağlanır. OSC2 pini normal IO olarak kullanılır.
USB modülü yukarıdaki primary oslitör girişine bağlı osilatörlerden biriyle beslenmek zorundadır. Yani internal(dahili) veya secondary(ikincil) osilatörler USB birimine verilemez. Fakat bu birimlerden biri mikrodenetleyiciye ve çevre birimlerine bağlanabilir. USB düşük hız 6MHz ve yüksek hız 48MHz olmak üzere iki hız seçeneğiyle çalıştırılabilir.
DAHİLİ OSİLATÖR BLOĞU
PIC18F4550 2 farklı clock üretebilen bir dahili clock bloğuna sahiptir. Eğer USB kullanılmayacaksa, dahili osilatör harici osilatör gereksinimini ordan kaldırmaktadır.
Ana clock kaynağı 8MHz INTOSC dir ve direk olarak mikrodenetleyiciye clock kaynağı olarak kullanılabilmektedir. Aynı zaman da 8 MHz lik sinyali direk vermek yerine bir postscaler(bölme) uygulayarak 31kHz-4MHz arasında clock elde etmekte mümkündür. Clock kaynağı olarak 125kHz-8MHz arasında seçilirse INTOSC aktif hale gelir.
Diğer dahili kaynak ise INTRC kaynağıdır ve 31kHzlik sabit bir clock sağlamaktadır. Bu clock eğer midrodenetleyiciye clock kaynağı olarak seçilmiş ise veya aşağıdaki durumlarda aktif hale gelir.
- Power-up Timer
- Fail-Safe Clock Monitor
- Watchdog Timer
- Two-Speed Start-up
Clock kaynağı olarak doğrudan INTOSC, INTRC veya INTOSC kaynağında bir bölme uygulanarak alınabilir. Bu ayar OSCCON registerının IRCF bitleriyle yapılır.
INTERNAL OSİLATÖR MODLARI
Internal osilatörü mikrodenetleyici için, primary osilatörü USB için seçebileceğimiz 4 mod vardır.
- INTHS mode: USB clock sinyalini HS osilatörden alır.
- INTXT mode: USB clock sinyalini XT osilatörden alır.
- INTCKO mode: USB clock sinyalini OSC1 pininden bir clock kaynağıyla alır, OSC2 pini FOSC/4 çıkış verir.
- INTIO mode: USB clock sinyalini OSC1 pininden bir clock kaynağıyla alır, OSC2 pini normal IO olarak kullanılır.
Sadece INTIO modu seçildiğinde RA6 pini normal IO olarak kullanım için boşa çıkmaktadır. Eğer USB kullanılmayacaksa ve sistem clock sinyali olarak dahili osilatör kullanılıyorsa harici bir osilatöre gerek yoktur. Bu durumda yukarıdaki ayarlamaların hepsi sadece dahili osilatörü aktif eder, harici osilatör seçimlerinin bir önemi kalmaz. Böye bir durumda INTIO seçeneği extra 1 pin imkanı verdiği için daha kullanışlıdır.
PLL VE USB OSİLATÖR AYARLARI
18F4550 mikrodenetleyicisi USB’nin yüksek hızda iletişim için ihtiyaç duyduğu 48MHz frekansı sağlamak için frekans çapıcı PLL(Pulse Lock Loop) konulmuştur. PLL girişleri sadece primary osilatörden HS, XT, EC, ECIO olarak alınabilir. PLL girişlerine 4MHz sabit frekans verilmek zorundadır. Yani primary osilatör girişine 4MHz harici bir osilatör bağlanmış ise PLL girişine vermeden önce 4MHz’e eşit olacak şekilde bir önbölme uygulanmalıdır.
PLL çıkışı ise sabit 96MHz alınmaktadır. Bu frekans USB’ye 2 ye bölünerek gitmektedir. Mikrodenetleyici clock sinyali olarak bu 96MHz’lik çıkışı en fazla 48MHz olarak almaktadır. 48MHz dışında isteğe bağlı olarak 1/3 1/4 1/6 bölme oranlarıyla da 96MHz sinyali azaltarak alabilmektedir.
USB DÜŞÜK HIZDA ÇALIŞMASI
USB düşük hız olan 6MHz hızında çalıştırılmak istenirse bu değer direk olarak PLL çıkışdan alınamaz. Çünkü PLL çıkışından 96/2 olarak alınmaktadır. 6 MHz clock sağlamak için kaynak olarak 24MHz olmak koşuluyla primary osilatör seçenekleri HS, XT, EC kullanılabilir veya PLL çıkışından 24MHz olarak alınan clocklar 4’e bölünerek USB ye verilebilmektedir.
Yorumlar
Yorum Gönder