18F4550 48Mhz?

Başlatan aRci, 19 Şubat 2021, 21:00:53

aRci

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.

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

ete

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

aRci

teşekkür ederim cevap için peki bunun bir test yolu nedir. Baud ayarı yapmadım ve sorunsuz çalışıyor ( Simulasyonda ).

alisumer

isis kullanıyorsan çipin frekansını değiştirmeyi unutursan baud değişmez asıl önemsediği çip ayarlarındaki hz değeri onun test etmeyi puls yada pwm üretip frekansını osiloskop ile tespit edebilirsin bunlar sistem hızı ile doğru orantılı çalışır belki timer de bellibir sayım yapar her kesmede bir değişkeni bir arrtırır bir saniye sonrada değişkeni okursun ama bununiçin ASM kullanıp yazdığın komutların da zaman kayıplarını hesaplaman gerekir hassas olsun istersen
Hep meraktan

Powered by EzPortal