1- Port isimleri ve işlevleri bütün piclerde aynı mıdır ? En azından "16fxxxx için aynıdır" falan ? Mesela 16f877'de A portu 6 bit ve hem dijital hem analog. Bütün 16f'lerde veya bütün piclerde A portu 6 bit ve analog/dijital midir ? Port B hepsinde dijital 8 bit midir ?
2- Kesmeler nedir ? Çok profesyonel düzeyde istemiyorum elimdeki kitapta "RB0 Harici Kesmesi" "RB4-4B7 Pinlerindeki Değişiklik Kesmesi" "Timer0/1/2 Birimi Taşma Kesmesi" falan yazıyor. Nedir bunlar ?
Zamanla ekleyeceğim. Teşekkürler şimdiden. :)
3-Pic'in iki tarafındaki beslemeleri de kullanmak zorunda mıyız ? Tekini kullansak da aynı verimde çalışır mı ?
1-Piclerdeki portların giriş çıkış sayısı modelden modele farklı olabilir.16F628A 8 bit A portu 8 bit B portu mevcut ama aynı şey 16F877A için geçerli değil.
2-Kesmeler gerçekleştiğinde ana yazılımı duraklatıp işlem sırasını kesme bölümüne atar.Yani kesme durumu gerçekleştiğinde ana yazılım duraklatılıp kesme fonksiyonu işleme konur.Kesme sona erdiğinde ana yazılım kaldığı yerden devam eder.
3-Yanılmıyorsam denemiştim ama bir şey diyemeyeceğim.2 tane konulduğuna göre hepsini kullanman daha iyi olacaktır.
secollah
kullanıcısına yanıt
Teorik olarak "duraklatıp kesmeyi gerçekleştirip sonra tekrar devam ederek işlemciyi yavaşlatmama" gibi bir şey anlatılıyor. Ancak pratikte canlanmadı gözümde. Nasıl bir örnekte kullanabilirim ki ben bunu ?
Kesme için günlük hayattan bir örnek vereyim. Kitap okurken telefonun çaldı. Kitapta kaldığın yere parmağını koydun ve telefonu açtın. Konuşman bitince de kaldığın yerden kitabını okumaya devam ettim. Telefonun çalması harici kesme olur bu durumda. Telefonu açıp konuşman ise harici kesme geldiğinde verilen program rutini olur.
aeronics
kullanıcısına yanıt
Bu kesmeler bizi sürekli telefona bakmaktan kurtarıyor kabaca tabir etmek gerekirse. Benim anladığım bu.
Eğer doğru anladıysam, buna devre alanından bir örnek istiyorum. Gerçekten aklımda canlanmadı çünkü bunu nasıl kullanabileceğimiz. Normal bir anahtarı denetlemekten ne farkı var ki ?
Telefona bakmaktan kurtarmıyor.
Kesme fonksiyonuun önceliği ana programdan yüksektir.Yani kesme gerçekleştiğinde ana programdaki kaldığı yeri hafızasına alır ve kesme işlemini yapar.Kesme işi bittiğinde ana yazılımda kaldığı yerden devam ediyor.
Örnek olarak telefon örneği çok doğruve açık.Telefon çalınca harici bir olay sayesinde kesme gerçekleşiyor.Kaldığın yere elini koyuyorsun yani orayı hafızana alıyorsun devam etmek üzere.Telefonla konuşurken yapacakların ise kesme içine yazdıkların oluyor.Kesme bittiğide yani telefonu kapadığında kitaba kaldığın yerden devam ediyorsun.
Anahtarı denetlemekten farkı anahtar denetlendiğinde işlenmesi gerekenleri kaydedebiliyorsun.İşin en iyi tarafı kesme gerçekleştikten sonra baştan başlamıyor.Kaldığı yerden devam ediyor.
secollah'ın dediğinin üstüne başka bir şey yazmaya gerek yok sanırım.
quote:
Orijinalden alıntı: kimyasalatik
Normal bir anahtarı denetlemekten ne farkı var ki ?
İşte o anahtarı denetlerken başka iş yapamazsın. Başka iş yaparken de anahtarı denetleyemezsin. Kesme ile biraz ondan biraz bundan çalıştırarak aynı anda birden fazla işi yaparsın.
Bir devren olsun, kendi işi yanında bir de dijital saat özelliği olsun istedin. Kesme olmadan bu imkansıza yakın.
kimyasalatik,
Detaylı bir örnek istemişsin. Elimden geldiğince anlatacağım.
Öncelikle microdenetleyici programlama low-level yani düşük seviyeli programlama olarak adlandırılır. Matlab,Fortran,C,C++ ve benzeri programlama dilleri ise Yüksek seviye programlama dilleridir. Yüksek seviye programlamada yazılımı yazdığımız, yada çalıştıracağımız sistemler çoğunlukla(%99 diyebilirim) bizi alakadar etmez. Donanım hakkında bilgi sahibi olmamız gerekmez. Ancak düşük seviyede işler değişir. Donanımımızın her parçasını, her kabiliyetini sonuna kadar bilmemiz gerekir. Doğal olarakta her mikrodenetleyici birbirinden farklıdır. Ancak bizlerin oldugu gibi onlarında birer ailesi vardır. Aynı aileye dahil bireylerinse pekçok ortak noktası vardır. 16F seriside buna bir örnek. Donanımsal olarak farklılıklar olsada ortak noktalarıda azımsanmayacak kadar azdır. Kısacası bir aileden 1 denetleyiciyi tanıdıktan sonra, aynı aileden başka denetleyiciye hakim olmak, farklı bir aileden farklı bir denetleyiciye hakim olmaktan daha kolaydır.
Kesmelere gelecek olursak, yukarda analojik olarak çok güzel örnekler verilmiş aslında. Ben biraz daha yazılımsal bir örnek vermeye çalışacağım. Örnek olarak kapı zilini bir pic kullanarak yapmaya çalışacağımızı düşünelim. Bunun için 1 giriş 1 de çıkış bizim için yeterli. Girişten, düğmeye basıldığı takdirde lojik 1, aksi durumlarda lojik 0 alalım. Düğme lojik 1 ikende pic çıkışa lojik 1 yollasın ve zili çalsın. aksi durumlarda lojik 0 olsun çıkışımız.
Bunu kabaca 2 şekilde yapabiliriz. 1.Yol picimizin içine sürekli giriş aldıgımız bacağı kontrol eden bir program yazarız. Açıktırki bu bir döngü olmak zorunda. Bu durumda pic sürekli iş yapacağı için sürekli enerji harcayacak, dahada önemlisi bir bacağı kontrol etmek gibi basit bir işi sanki yapabileceği tek işmiş gibi kabul etmiş olacak. Aslında onun yeteneklerine hakaret gibi. Çünkü kendisi çok farklı işler yaparken bacağıda kontrol edebilecek kapasitesede. 2.Yol RB0 kesmesini kullanırsak, pic çok çok başka işlerle uğraşabilir vs vs ne yaptığı önemli değil. hiçbirşey de yapmayabilir. Bacağı kontrol etmeyecektir cunku kesmeyi aktif hale getirdiğimiz için düğmeye basıldıgında RB0 da değişiklik olacak, bu durumda kesme çalışacak, pic yaptıgı işleri askıya alacak, kesme komutlarını çalıştırıp zili çalacak, sonra kesmeyi bitirip kaldığı yerden devam edecek.
İşi biraz abartalım. RB0 ve RB4-RB7 kesmesini kullanalım. çıkış olarakta 2 farklı zilimiz var. ama bu defa RB0 bacağı kapıdaki zil butonu olsun. RB4 bacağı kapıdaki hareket sensörü olsun. RB5 bacağı penceredeki hareket sensörü olsun. RB6 bacağı mutfaktaki duman sensörü olsun. RB7 bacağı ise zemindeki titreşim sensörü olsun.
Sensörler genel mantıkla üzerlerine amaç dahilindeki etki oluştuğunda +5V yani lojik 1 üreten elemanlardır. Yukarıdaki örnekten biraz daha komplike bir kesme programı ile kesme oluştuğunda hangi kesmenin oluştuğu(bayraklar vasıtası ile), buna göre hangi zilin çalıçacağı vs ayarlanabilir. Çok çok daha karmaşık şeyler yazmakta mümkün tabiki. Sizi aydınlattığımı umuyorum.
İyi günler.
Kesmenin en büyük avantajlarından birisi ise aynı sırada hem kesmeyi kontrol edebilmekte ve yazılımı işlemektedir.Yani kesme işlemleri komutların işleyişini etkilemez.İf şeklinde yapılsaydı if işlemi sürekli kontrol edilecek ana program bölünecekti.
Örnek:Pic ile 2 tane led kontrol ettiğimizi düşünelim.Ama bunun normal flip floptan farkı buton bırakılıncaya kadar sürekli yanık bırakması olsun.
Eğer if şeklinde ana yazılımda kontrol etseydik muhtemelen butona bastığımız zaman bekleme kısmına gelip işlemeyecekti.Ama biz bunu kesme ile yaptığımız zaman beklemeye gelse bile yarıda bölüp kesme işlemine geçerdi yani her basış işlerdi.İkisini de kontrol ediyor ve ana yazılımı meşgul etmiyor.
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme