PIC16C84/PIC16F84 Üzerine bir Tez Çalışması
Pic meraklılarının merakla bekledikleri
altıncı bölüm…..
2.21 WATCHDOG TIMER
Watchdog-Timer çip üzerinde serbest çalışan ve hiçbir dış eleman
gerektirmeyen RC osilatörüdür. RC osilatör OSC1/CLKIN pininin
RC osilatöründen ayrıdır. Bu , şu anlama gelmektedir ki, aygıtın
OSC1 / CLKIN ve OSC2 / CLKOUT üzerindeki saat durduysa bile,
mesela SLEEP komutunun çalıştırılmasıyla, çalışacaktır.
Normal işlemi boyunca WDT zaman aralığı aygıtı resetleyecektir.
Eğer aygıt SLEEP modundaysa, WDT kaldırma programı aygıtı tekrar
normal işlemine döndürecek ve devam ettirecektir. WDT,
konfigrasyon programlama bitini '0' a programlayarak, sürekli
etkisiz yapabilir. WDT' nin kullanım amacı, PIC'i veya herhangi bir
işlemciyi bir döngüde kilitlenmekten uzak tutmaktır. Böyle bir durum
yazılımda bir hata veya harici elektriksel kıvılcımlar nedeniyle ortaya
çıkabilir. WDT, PIC' e bir çeşit kalp atışı sağlar ve eğer WDT yazmacı
düzenli aralıklarla temizlenmezse PIC' i reset'e zorlar.
Bu mükemmel bir özelliktir ve güvenlik sistemleri gibi, ana kontrol
panellerinde bir kilitlenmenin asla söz konusu olmaması gereken
uygulamalar için birebirdir.
Güç koruması gereken ve yalnızca peryodik olarak açılması gereken
ürünlerde WDT' den faydalanılır.
WDT' nin konfigrasyonu 16C5X ailesinde OPTION komutu aracılığıyla,
16C71'deyse doğrudan Option Yazmacı' na (81H) yazılarak
gerçekleştirilir. Option Yazamacı, WDT ile ilgili 4 kontrol bitine sahiptir.
Tablo 2.11: WDT kontrol bitleri
Option Yazmacı' ndaki prescaler bitleri kullanılarak, zaman
aşımı süresi 2.5s' ye kadar genişletilebilir.
WDT bir SLEEP veya CLRWDT komutuyla temizlenir veya
reset edilir. WDT' nin bir reset' e yol açmaması için yazılımda
bu komutlardan biri kullanılmalıdır.
2.21.1 WDT DEVRİ
WDT 18 ms nominal zaman aralığına sahiptir. Zaman aralığı
devresi ısı derecesi, Vdd ve bir mikrodan diğerine, işlem
çeşitlerine göre değişmektedir. Eğer daha uzun zaman aralığı
isteniyorsa , 1:128' den daha yüksek bölme oranında,
OPTION REG kaydına yazarak , yazılım denetimi altında
WDT'ye tahsis edilebilir. Böylece zaman aralığı devresinin
yükseldiği farkedilebilir.
2.21.2 WDT
Şu , dikkate alınmalıdır ki ; arzu edilmeyen durumlarda
(Vdd= min , ısı derecesi = max, WDT= max),
WDT zaman aralığının ortaya çıkması birkaç saniye alabilir.
CLRWDT ve SLEEP komutları , zaman aralığının meydana
gelmesini önler ve aygıtı reset durumuna getirir.
STATUS kaydındaki TO biti, WDT zaman aralığı üstünde
temizlenmelidir. Yani WDT yazmacının düzenli aralıklarla
temizlenmesi gerekir. Aksi taktirde PIC reset'e zorlanır.
Bu mükemmel bir özelliktir ve güvenlik sistemleri gibi ana
kontrol panelinde , bir kilitlenmenin asla söz konusu olmaması
gereken uygulamalar için birebirdir.
WDT' nin konfigürasyonu 16C5X ailesinde OPTION komutu
aracılığıyla, 16C71' deyse doğrudan Option Yazmacına (81H)
yazılarak gerçekleştirilir. Option Yazmacı, WDT' ile ilişkili 4 kontrol
bitine sahiptir.
WDT bir SLEEP veya CLRWDT komutuyla temizlenir veya
reset edilir. WDT' nin bir reset'e yol açmaması için yazılımda
bu komutlardan biri kullanılmalıdır.
Örnek 2.6:
MOVLW B'00000111' ; RTCC PRESCALER/256
OPTON ; Sayım başına 256mS
MAIN CLRWDT ; Her seferinde Wathdog'u temizler.
Kodun, zaman peryodunun , zaman aşımı ayarından büyük olma
ihtimalinin bulunduğu kısımlarında ayrıca bir CLRWDT komutu
kullanılmalıdır. (örneğin bir girdi pin' inin durumunun değişmesini beklerken).
Kritik kodların güvenliğini sağlamak için kullanılacak ideal kod bit'i
yalnızca bir CLRWDT komutu içerir. Bu komut ana döngüde yer alır
ve genel bir kural olarak ne kadar çok CLRWDT komutu bulunursa,
bunlar o kadar az etkili olurlar.
Reset gerçekleştiğinde, Statü Yazmacı' ndaki iki bit resetin nedenini
gösterir. Bu bitler TO ve PD bitleridir (Time out ve Power down)
TO PD Reset nedeni
0 0 WDT, SLEEP durumundan çıkmıştır.
0 1 WDT, SLEEP haricinde zaman aşımına uğramıştır.
1 0 SLEEP durumundayken harici reset(WDT kapalı)
1 1 Açılma durumu
Reset gerçekleştikten hemen sonra bu bitlerin hemen
incelenmesiyle, program nasıl davranacağını ve nerede
dallanacağını belirleyebilir.
Örnek 2.7 :
BTFSS STATUS,WATCHDOG ; Watchdog bitini test et.
GOTO SCAN ;Watchdog,
zaman aşımı
durumunda değilse, ilk açılma
MOVLW B'00001111' ; PORTA' yı ayarla
TRIS PORTA ; Tümü girdi.
WDT kullanmayan ama SLEEP moduna sokulan uygulamalarda,
programlama sırasında WDT bitinin ayarlanmadığından emin
olmak önemlidir. Programlama sırasında verici ve alıcı gibi
bağıntılı ürünlerin unutulması oldukça kolaydır. Alıcı kilitlenmeyi
engellemek için bir WDT' ye ihtiyaç duyar ama vericinin
çalıştırılması yalnızca bir düğme aracılığıyla gerçekleşebilir.
Vericinin WDT biti programlanmamışsa , program döngüye
girer ve asla iletimi gerçekleştiremez.
Gürültülü ortamlarda OPTION ve TRIS yazmaçlarını düzenli
aralıklarla güncellemek önemlidir. Bu akıllıca önlem sayesinde
yazmaç elektriksel girişimlerde bozulmaya uğramayacaktır.
Şekil 2.25: WATCHDOG TİMER'ın Blok Diyagramı
Tablo 2.12: Watchdog timer ile birleştirilen kayıtların özeti
2.21.3 GÜÇ KAYNAĞI DÜŞÜRME (AZALTMA) MODU (SLEPP)
Mikronun güç kaynağından çektiği akım SLEEP komutuyla arttırılır
veya azaltılabilir.
2.21.3.1 Sleep modu
Power-Down moduna SLEEP komutu çalıştırılarak girilebilir.
Power ' Down modu daha önceden belirtildiği gibi aygıtın
düşük güçte bekleme modudur. Eğer SLEEP komutu etkin
durumdaysa, Watchdog Timer silinmiştir. (Fakat çalışır durumdadır).
PD biti (STATUS<3>) silinmiştir. TO biti (STATUS<4>) kurulmuştur
ve osilatör sürücüsü kapalıdır. I/O portları, SLEEP komutunun
çalıştırılmasından önceki statüyü korurlar.
SLEEP modundaki en düşük elektrik tüketimi için, tüm I/O pinleri,
dış devrelerden değil de , akımı I/O pinlerinden çekerek ya Vdd
ya da Vss'ye yerleştirilir ve dış saatleri etkinsizleştirilir.
Yüksek zahiri dirençli olan I/O pinleri, akım girişlerinin neden
olduğ
u gerilim Kesilmesini önlemek için yüksek veya düşük
düzeye ayarlanmalıdır. TOCKI girişi de Vdd veya Vss de olmalıdır.
MCLR pini lojik yüksek seviyede olmalıdır. Şu dikkate alınmalıdır ki,
WDT zaman aralığı tarafından üretilen RESET, MCLR pinini aşağı sürmez.
2.21.3.2 Sleep modundan çıkış
Aygıt SLEEP modunda aşağıdaki şekillerde çıkarılabilir.
1) MCLR dış giriş reseti
2) WDT çıkışı (Eğer WDT aktif ise)
3) RBO/IN pininden Kesme de, RB port değişimi veya
EEPROM'a dataların yazımının tamamlanmasında.
Priferialler, SLEEP süresince Kesme üretemezler, çünkü o
anda işlemci hiçbir iş yapmamaktadır.
İlk şıkta (MCLR resetlenir), aygıt resetlenir. Sonraki iki şık ise
program çalışmasının devamı olarak düşünülmektedir.
TO ve PD biti, aygıtın resetlenmesinin nedenlerini belirlemede
kullanılabilir. Güç kaynağı üzerine kurulan PD biti, SLEEP
modunda iken silinir. Eğer WDT zaman aralığı meydana
gelirse ( ve SLEEP modundan çıkışa neden olursa) TO
biti temizlenir. SLEEP komutu çalıştırılırken sıradaki komut
(PC+1) bir ön devir yapar. Kesme durumunda iken aygıtın
SLEEP' ten çıkması için, uygun aktif Kesme biti
kurulmalıdır(etkinleştirilmelidir). SLEPP' ten çıkış,
GIE bitinin durumuna bakmaksızın meydana gelir.
Eğer GIE biti temizse (aktif değilse), aygıt, sıradaki
uygulamaya SLEEP komutundan sonra devam eder.
Eğer GIE biti aktifse (kuruluysa), aygıt, SLEEP komutundan
sonraki uygulamaya geçer ve Kesme adreslerine bölünür(0004h).
SLEEP'ten sonraki uygulamaya geçilmesinin istenmediği
durumlarda, kullanıcı SLEEP komutundan sonra
NOP komutunu kullanmalıdır.
ŞEKİL 2.26: Kesme aracılığıyla sleep modundan çıkış
2.21.3.3 Çıkış (sleep) için kullanılan kesmeler
Global Kesmeler etkinsiz durumunda (GIE temizlenir) ve
herhangi Kesme kaynakları aktif Kesme biti ve Kesme bayrak
bit setinin her ikisini de içeriyorsa, aşağıdakilerden birisi
meydana gelir.
- Eğer Kesme, SLEEP komutunun yürütülmesinden daha
- Eğer Kesme, SLEEP komutunun uygulanması sırasında
önce meydana gelirse, SLEEP komutu NOP olarak
tanımlanacaktır. Böylece WDT ve WDT prescaler
temizlenmeyecek, TO kurulmayacak ve PD bitleri
temizlenmeyecektir.
veya daha sonra meydana gelirse, aygıt hemen SLEEP
modundan çıkacaktır. SLEEP komutu , Wake-up'dan
önce tamamıyla uygulanacaktır. Böylece WDT ve WDT
prescaler temizlenecek ve, TO biti kurulacak ve PD biti
temizlenecektir.
SLEEP komutunun uygulanmasından önce bayrak bitleri kontrol
edilse bile, bayrak bitleri SLEEP komutunun tamamlanmasından
daha önce kurulmuş olabilir. SLEEP komutunun uygulanıp,
uygulanmadığını belirlemek için PD bitini test edebiliriz.
Eğer PD biti kuruluysa, SLEEP komutu NOP olarak uygulanmıştır.
WDT nin temizlendiğinden emin olmak için, SLEEP komutundan
önce CLRWDT komutu uygulanmalıdır.
2.21.3.4 Program doğrulaması / Kod koruması
Eğer kod koruma biti programlanmamışsa, çip üzeri program
belleği, hedefin doğrulanması için okunabilir.
Not : Microchip, pencereli aygıtları kod koruma için tavsiye
etmemektedir.
2.22 ID YERLEŞİMİ
Kontrol sonuçları veya diğer kod tanıma sayılarını saklamak için
ID yerleşimi olarak 4 bellek yerleşimi ( 2000h-2003h)
düzenlenmiştir. Bu yerleşimler normal uygulama süresince
erişilemez fakat program/doğrulama süresince okunabilir ve
yazılabilir. ID yerleşiminin yalnızca 4 biti kullanılabilirdir.
ROM aygıtları için bu değerler ROM koduyla kullanılmaktadır.
2.23 DEVRE İÇİ SERİ PROGRAMLAMA
PIC16C84 mikrokontrolörleri, uygulama devrenin sonunda seri
olarak programlanabilir. Bu basitçe, saat ve veri için iki hat, güç
kaynağının, toprağın ve program voltajının üç hattı ile yapılabilir.
Müşteriler bellekleri programlanmamış aygıtları kullanamayabilirler
ve bu taktirde, mikrokontrolör, ürünün paketlenmesinden önce
programlanır.
Aygıtı, program/doğrulama moduna geçirmek için RB6 ve RB7
pinlerini low da tutarak, MCLR pini VIL'den VIH'a çekilir. RB6
programlama saati ve RB7 programlama verileri halini alır.
RB6 ve RB7' nin her ikisi de bu modda schmitt trigger girişleridir.
Reset'ten sonra, aygıtı, programlama/doğrulama moduna getirmek
için, program sayacı (PC) 00h adresini gösterir. Daha sonra,
aygıta 6 bit komutu verilir, program verilerinin 14 biti ya aygıta verilir
ya da aygıttan çekilir. (yükleme komutunu kullanarak).
ROM aygıtlarında, Program Belleği ve Data EEPROM
belleklerinin her ikiside okunabilir, fakat yalnızca Data
EEPROM belleği programlanabilir.
Şekil 2.27: Tipik sistem içi seri programlama bağlantıları