M

Pic 'lerin Config Ayarları Nedir? Nasıl Yapılır?

Başlatan mavikaplan, 10 Ağustos 2012, 21:42:08

mavikaplan

Merhaba, internette bu konu hakkında düzgün bir türkçe kaynak bulamadım.
Mesela Watchdog Timer hangi durumlarda on, hangi durumlarda off yapılır ve ne işe yarar düzgün bir toplu bilgi bulamadım internette.

Mesela, PIC 'in diğer ayar komutları aşağıdakiler, bunler ne işe yarar, hangi durumlarda açık, hangi durumlarda kapalı yapılmalıdır? Bilgi verebilirmisiniz.
WDT_ON
PWRT_ON
PROTECT_OFF
MCLR_ON
INTRC_OSC_NOCLKOUT
BODEN_OFF
BOD_OFF
LVP_OFF
XT_OSC

Mucit23

Hepsinin ayrı bir görevi var. Sırayla açıklayayım.

WDT_ON watch dog timer adı verilir. Görevi ise işlemcinin program işleyişi sırasında programın bir yerde takılıp  kalması durumunda işlemciyi besteleyen sigortadir.

PWRT_ON yanlısım  yoksa eğer işlemciye enerji verildiginde belli bir sure islemciyi resette tutan sigortadir.

PROTECT_OFF Yazdiginiz kodun okunmasını  engelleyen sigortadir.

MCLR_ON bazı piclerde reset bacağı ayrıca giriş olarak kullanılabilir. ışte bu tür işlemcilerde rest bacağı MCLR_OFF yazilarak reset özelliği pasif hale getirilir.

INTRC_OSC_NOCLKOUT bazı piclerde kendi içerisinde belirli frekanslarda osilatorler bulunur. ışte yukarıdaki sigorta yazilarak dahili osilatör aktif edilir.Osl pinleri IO olarak kullanılabilir.

BODEN_OFF bu sigorta ile BOD_OFF aynı şeydir. Görevi ise işlemcinin besleme voltajinin belirli bir seviyenin altına indiğinde işlemciye resetleme sidir.

LVP_OFF işlemci programlama esnasında program moduna girebilmesi için rest bacağına 12-13volt gelirim uygulanması gerekir. Bu sigorta açılırsa eğer işlemci daha düşük bir voltaj ile program moduna girer.

XT_OSC kristal seçim sigortasıdır.
1Mhz ile 8 mhz arası Xt, 8 mhz ve üzeri frekanslar HS yazilir.

daha ayrıntılı yazmak isterdim ama telefonla yaziyorum. Ayrıntılı bilgi için datasheet e bak.
kolay gelsin..
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

mavikaplan

Teşekkür ederim, watchdog hakkında biraz daha bilgi verebilirmisiniz, mesela neden kesmelerde off yapılıyor? On yapıldığı zaman kesmeler çalışmıyor. Nedeni ne olabilir? İngilizcem yeteri düzeyde olmadığı için datasheetlerden pek bişey anlamıyorum. Cevabınız için çok teşekkür ederim..

ete

Wdt geri planda calışan bir zamanlayıcıdır. Bu sayac değeri aşıma ulaştığı anda şayet aktif ise işlemciye reset atar. Kesmelerle bir bağlantısı yok senden duydum bu konuyu.
Normal şartlarda programcı programına hakim olmalı ve onun hangi ihtimallerde lüzumsuz bir bekleme moduna gireceğini tahmin etmelidir. Şayet kontrol edemediğiniz bir bekleme oluyor ve işlemciniz buna baglıolarak reset atıyor ise o zaman sigorta ayarlarından wdt i kapatmanız önerilir.
Böyle bir şey yok ise zaten açık tutmanız menfaatiniz gereğidir.
Asm de program yazarken clrwdt seklinde bir komut ile sayac arada bir sıfırlanarak reset atması önlenir. Basic de de benzer bir komut mevcut .kullanırsanız derleyici gerekli yerlere clr komutunu ekler (sanıyorum).
Unutmayınki wdt aynen tmr0 gibi sürekli sayar. Option registerinden bölme oranını ayarlayarak sayacın hangi kademelerde bir artırılacağını belirleyebilirsiniz.. Option registeri inceleyiniz. Bölme oranını büyüterek resetin daha büyük gecikmelerde oluşmasını sağlayabilirsiniz.

Ete




mavikaplan

Cevabınız için teşekkür ederim ama wdt 'nin kesmelerle bir alakası yok demişsiniz ancak tmr0 kesmesi oluşturduğunuzda eğer wdt 'yi off yapmazsanız program PIC 'de çalışmıyor, yani kesme oluşmuyor.

ete

Kim demiş bunu bilmiyorum ama öyle bir şey yok. İşte ispatı. Ekteki programı incele WDT aktiftir ve kesme ile saat oluşturulmuştur.
Ete

mavikaplan

Ama benim yaptığım uygulamada WDT 'yı ON yaptığımın zaman program PIC 'de çalışmıyor,  eğer OFF yaparsam program düzgün birşekilde çalışıyor. Kodlar:
#CONFIG
__config _XT_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF & _BODEN_OFF
#ENDCONFIG
trisa=%11111111
trisb=%00000000
b0 var byte
ON INTERRUPT GOTO Kesme_alt_prog
option_reg=%00110001
intcon=%10100000
TMR0=$ff
b0=0
Ana_prog:
portb=b0
Goto Ana_prog
DISABLE INTERRUPT
Kesme_alt_prog:
b0=b0+1
TMR0=$ff
INTCON.2=0
RESUME
ENABLE INTERRUPT
end


Proteus : https://docs.google.com/open?id=0Bw2zrnpVqvJ0N1pfS3hmMGtGams

Proteus 'da Verdiği uyarı mesajları, Aşağıdaki gibi uzayıp gidiyor uyarı mesajları :


ete

Tmr0 degeri olarak $ff vermişsin. Bu deger programin kesmeden hic ayrilmayacagi anlamina gelir.
Zira $ff den sonra Tmr0 degeri bir artinca hemen overflow olur ve yeniden kesme olusur. Wdt bu nedenle reset atiyordur.
Nedeyse sıfır us de kesme olussun demissin.
Tmr0 degerini mantikli bir seviyeye getir oyle bak..
Ayrıca bu hali ile çalışsın diyorsan programın başına clearwdt komutunu ilave et.
Komutun yazılış şeklini tam hatırlamıyorum. Manuali acarsan oradan bulabilirsin.
Ete

jun

@__CONFIG_CONFIG1H_OSCS_OFF_1H_HS_OSC_1H
@__CONFIG_CONFIG2H_WDT_OFF_2H_WDTPS_128_2H
@__CONFIG_CONFIG4L_LVP_OFF_4L

bu tanımlamaları bu şekilde verince warnin 28 hatası alıyorum ama derlemede hex oluşturuluyor.bi bakarmısınız bu tanımlamaların neresinde hata var?(işlemci 18f452)

ete

Warning yalnızca bir ikaz dır hata değildir. Ama bazen önemli olabilir. 28 kod numarasındanbir şey anlamam. Yazılan mesajı versen daha uygun olurdu.

Ete

jun

@__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
@__CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
@__CONFIG    _CONFIG4L, _LVP_OFF_4L

bu configlerle aşagıdaki hataları veriyor.

jun

@__CONFIG_CONFIG1H_OSCS_OFF_1H_HS_OSC_1H
@__CONFIG_CONFIG2H_WDT_OFF_2H_WDTPS_128_2H
@__CONFIG_CONFIG4L_LVP_OFF_4L

bu şekilde düzelttigimde ise aşagıdakini

ete

Config ayarlarını verme formatın yanlış. Bana kalırsa aşağıdaki şekilde ver ayarları;
 '    device, 18F452
asm
    __CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H  ;  _HSPLL_OSC_1H       
    __CONFIG _CONFIG2L, _BOR_ON_2L  & _BORV_20_2L & _PWRT_OFF_2L
    __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
    __CONFIG _CONFIG3H, _CCP2MX_ON_3H
    __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
;    __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
    __CONFIG _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L
;    __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
    __CONFIG _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H   
    __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
    __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
    __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
    __CONFIG _CONFIG7H, _EBTRB_OFF_7H
endasm


Ayrıca aşağıdaki linkte bu konuyu detaylı açıklamış idim. Orayıda dikkatlice okumanı öneririm.
Özellikle aşağıdaki yazılanlarla başlayan paragrafı okumanda yarar var.
"Şimdi de 64 bit makinalar için ve ayrıca 18F serisinin derlenmesi için gerekli açıklamaları yazalım."

Ete

jun


jun

ete abi dursun can teknik abimizin 2 yıl önce verdigi lcd matik devresini yaptım fakat tam olarak çalışmıyor.simulasyonda normal görünüyor ama devreyi eksizsiz kurmama ragmen saniye ilerlemiyor tarih ayarında girince lcd kapanıyor kilitleniyor,buzzer hiç çalışmıyor.verdigi kaynak kodu derletmeye çalıştıgımda yukardaki hatayı veriyor.rica etsem bi bakarmısın eksik yada yanlış olan nedir?

Powered by EzPortal