﻿ CCS PIC C Dersleri - 16 Kesmeler Ve Zamanlayıcılar (İnterrupt ve Timer) | ruzname.net
Bugunkü konumuz kesmeler (interrupts). Mikrodenetleyicilerde kesme konusu çok önemli bir yer tutar. Kesme mantığını ve işleyişini bilmeden gelişmiş programlmar yazmanız mümkün değildir. Yani kesme bilmeyen biri ben mikrodenetleyici biliyorum diye geçinmesin.
Peki kesme nedir? Gerçek hayattan kesmelere bir örnek verelim: Elinize bir roman almış odanızda yatarak okuyorsunuz. Siz kitabınızı okurken birden bire evin telefonu çalıyor. Evde kimse yok ve telefon yanıbaşınızda değil. Ne yapmak lazım? Kitabınızı okumayı bırakıyorsunuz, hatta kitaba nerede kaldığınıza dair bir işaret koyuyorsunuz. Ve gidip telefona bakıyorsunuz. Sonra geri dönüp işaretlediğiniz yerden kitap okumaya devam ediyorsunuz. İşte kesme mantığı kısaca böyledir. Mikroişlemcinin yaptığı işi, belli bir kesme gelmesiyle bırakması ve kesmenin işaret ettiği işi yapıp gerçek işine geri dönmesi.
Peki kesme olmasıydı bu iş nasıl olacaktı. Yani bir yerlerden telefon geleceğini biliyorsunuz ama telefonun zil sesi (kesme işareti) çalışmıyor. Bu durumda mesela her üç dakikada bir kitap okumayı bırakır telefonun başına geçer ve kimse aramış mı diye ahizeyi kaldırırdınız değil mi? Kitab okuma işiniz böylece sekteye uğrardı. Verimli bir okuma olmazdı. İşte biz de bazen öyle programlar olur ki eğer kesme kullanmazsanız eğreti çalışır.
Peki telefona baktığımızda kapı da çalsa yani araya başka kesme girse ne olacak? O zaman bizim telefondaki adama bir dakika kapı çalıyor gidip bakayım deme imkanımız olsa da mikrodenetleyicinin böyle bir imkanı yok. Yani bir kesme çalışırken diğer bir kesme çalışamaz. Bizim, evde kitap okurken genelde iki kesmemiz vardır:Kapı zili ve telefon zili. Ama PIC16F877A entegresine ait tam 14 adet kesme vardır. B
unlardan en önemlileri: Timer0 kesmesi RB0 ucuna gelen harici kesme Timer1 kesmesi Timer2 Kesmesi CCP1 ve CCP2 e ait kesmeler Biz şimdilik zamanlayıcılarla ilgili olan kesmelerle ilginleceğiz. O zaman bir şeyi açıklığa kavuşturmamız gerekiyor: Zamanlayıcı (TIMER) Nedir? Zamanlayıcı dediğimiz 8 ya da 16 bitlik bir register’den başka bir şey değildir.
Bunlar PIC’in içindeki osilator frekansıyla çalışırlar ve belli bir sürede +1 artarak devam ederler. Mesela PIC’in içindeki dahili osilatör 1 Hz ise Timer0 zamanlayıcısı her 1 saniyede 1 artacak ve 255 değerine geldiğinde (çünkü Timer0 8 bit) sıfıra geri dönecek. İşte sıfıra dönmesiyle bir kesme üretilir. Bu kesme fonksiyonu altında istediğimiz işlemleri yapabiliriz. Mesela 10 saniyede bir LED yanıp sönsün istiyoruz. Dahili frekansımız da 5 Hz. Yani 1/5= 0,2 saniye.
Bu şu demek: timer0 içeriği her 0,2 saniyede +1 artsın. O zaman 255 değerine ulaşıncaya kadar ne kadar süre geçer? 255 x 0,2=51 saniye. Bunun manasında şudur ki timer0 her 51 saniye de bir kesme işareti üretir. Yani kesme fonksiyonuna gider. Biz programımızda kesme fonksiyonunn altına “LED i tersle” komutu verirsek LED yanıyorsa söner, sönüyorsa yanar.
İyi de biz 10 saniyede bir led yakmak istiyorduk ama şurada 50 saniyede bir yanacak, ne iş? Evet haklısınız. İşte bu yüzden bir ayar çekmemiz lazım. Şimdi düşünün bakalım. Madem 255e kadar sayanda 50 saniye geçiyorsa, 10 saniye kadar geçmesi için kaça kadar saymalı. (255 –a) x (0,2sn)=10sn Bir denklem kurduk, burada a=205 çıkar.
Yani biz sayıcıyı sıfırdan değil de 205 den başlatırsak 255’e kadar 50 birim sayacak, 50*0,2=10 saniye verecektir. Peki zamanlayıcıyı böyle istediğimiz değere ayarlayabiliyor muyuz? Evet. Burada bir de ön bölücü kavramından bahsedelim. 1 - 2-4-8-16-32-64 gibi ön bölücüler, dahili frekansın kaç kere dönüp durduktan sonra timer’ı +1 artıracağını belirler.
Mesela yukarıdaki örnekte önbölücü 4 olsaydı her 0,2 saniyede bir değil de her 0,2 x4=0,8 saniyede bir artacaktı. Anladınız mı? O zaman size bir ödev verip bugünkü dersimizi noktalayalım: 8 Mhz kristal osilatörle çalışan bir PIC’te 250 mikrosaniyelik kesme yapması için timer0’ın kaçtan başlaması gerekir. (dahili frekansın harici frekansın çeyreği olduğunu unutmayın, önbölücü değerlerden birini de kullanınız)
TAGS: pic kesme,nterrupts,capture,counter,timer
peynir6 suyu tozu , 13/06/2008-12:53 Facebook'ta Paylas Tweet
Sal, 05/17/2011 - 12:31, ziyaretci (doğrulanmamış) dedi ki:
hocam anlatımlarınız çok güzel bu bilgileri bizlerle paylaştığınız için teşekkür ederiz...
2. süper anlatmışsınız hocam,
Çrş, 01/27/2010 - 11:39, ziyaretci (doğrulanmamış) dedi ki:
süper anlatmışsınız hocam, teşekkürler
3. Teşeşkkurler sayın hocam
Per, 09/25/2008 - 23:54, nuri (doğrulanmamış) dedi ki:
Teşeşkkurler sayın hocam paylaşımlarınızın devamını dört gözle bekliyor olacağım anlatımlar süper
Cum, 09/26/2008 - 08:29, peynir6 suyu tozu dedi ki:
beğendiğinize sevindim. dersler ağır ağır ilerliyor. yoğunum biraz. hafta sonu allah izin verirse yeni dersimiz olacak. step motor kontrolü.
5. teşekkurler usta devamını
Per, 09/25/2008 - 23:53, Misafir (doğrulanmamış) dedi ki:
teşekkurler usta devamını beklior olacağım anlatımlar süper
Çrş, 07/16/2008 - 02:31, RaMaZaN (doğrulanmamış) dedi ki:
Keşke bir örnek ekleseydiniz veya soruya cevap verseydiniz. Daha faydalı olurdu bence. Teşekkürler paylaşımınız için yine de. Örneğiniz güzeldi olayı anlamak adına.
7. devamı olacak.
Çrş, 07/16/2008 - 19:41, peynir6 suyu tozu dedi ki:
dostum haklısın da bu bir yazı dizisi olduğu için cevabı bir sonraki derse bırakmıştım. şu sıralar yoğunluktan ötürü bir türlü dersin devamını yazamadım. en kısa zamanda 17. dersimizde buluşacağız. PIC CCS ile SAAT devresi programlamayarak timer ve interrupt olayını pekiştireceğiz...
8. 07/16/2008 yazı tarihi kısa
Pzt, 01/09/2012 - 23:21, ziyaretci (doğrulanmamış) dedi ki:
07/16/2008 yazı tarihi kısa zamandan kastın :)