05- Buton Uygulaması

05- Buton Uygulaması

Merhaba sevgili okuyucu.

İlk uygulamamızda yanım sönen bir LED devresi tasarlamıştık. Bu uygulamamızda o LED i bir buton ile kontrol edeceğiz.

Bu yazıda bahsedilenler ile bilmediğiniz kısımlar çıkarsa bir önceki bölüm başta olmak üzere önceki bölümlerde bahsi yapılmıştır. Onlara bakıp konuyu kavrayabilirsiniz.

Mantık olarak bir giriş bir çıkış pinimiz olacak. Giriş pinimize butondan gelen 1 veya 0 bilgisi gelecek. Biz bu pinin durumunu okuyup çıkış pinine bağladığımız LED i yakacağız veya söndüreceğiz.

Yazılım

Sırasıyla

  • Proje dosyasını oluşturun
  • Osilatör ayarını yapın
  • Configuration bitlerini ayarlayın

Bir önceki bölümde buna değindiğimiz için burada tekrar göstermiyorum. Önceki bölüme buradan ulaşabilirsiniz.

Elimizde ham olarak şöyle bir kod olacak.

Öncelikle pinlerimizin giriş mi çıkış mı olacağını belirliyoruz.

B0 pinimiz çıkış yapıyoruz. Bu pine LED imizi bağlacağız.

B7 pinimizi giriş yapıyoruz. Bu pinden buton değerini okuyacağız.

Bu iki kullanım şekli de mümkündür. İsterseniz “TRISBbits.” yazarak açılan menüden pininizi seçersiniz isterseniz direkt olarak “TRISB7” yazarak giriş çıkış durumunu ayarlayabilirsiniz.

TRISBbits.” ile kullanmanızı tavsiye ederim. Bu sayede yanlış yazma olasılığınız düşecek ve kodlarınız daha düzenli görünecek.

En son olarak çıkış olarak belirlediğimiz pini 0 yapıyoruz.

Gerekli giriş çıkış ayarlarını verdikten sonra while sonsuz döngüye girebiliriz.

komutu ile RB7 değerinin 1 olup olmadığını kontrol ediyoruz.

Eğer okuduğumuz değer 1 ise şu kodları yazıyoruz. Burada fark ettiyseniz bir daha RB7 pininin kontrolünü yaptık. Bunun nedeni herhangi bir elektriksel arkdan doğabilecek dalgalanmalar. Durumu 0 ama dalgalanmadan dolayı anlık olarak 1 değerini vermiş olabilir. Bu oldukça mümkün. Bu yüzden 1 milisaniye bekleyip yeniden kontrolü yapıyoruz. Eğer hala 1 ise gerçekten de butona basılmış demektir. 1 ise RB0 pinini 1 yaparak LED i yakıyoruz. Değil ise 0 yaparak yanık durumda ise söndürüyoruz.

Eğer ilk yaptığımız kontrolde pin değeri 1 değilse bu sefer yine çıkışımızı 0 yapıyoruz. İlk sorguda “RB7 == 1” i denetlediğimiz için bunun olmadığı tek koşul vardır. Bu yüzden “if (RB7 == 0)” diyerek sorgulamak yerine “else” yani “değilse” diyerek de bunu gerçekleştirebiliriz. “Eğer 0 ise çıkışı 0 yapmamıza gerek var mı?” diye bir soru aklınıza gelebilir. Evet yapmamız gerekiyor. Çünkü butondan elimizi çekince LED in de sönmesini istiyoruz. Bunun için butonun 1 değeri vermediği değer için 0 yazarak söndürmemiz lazım.

Tüm kodu bu şekilde görebileceğiniz gibi en aşağıda verdiğim dosyada da bulabilirsiniz.

Donanım

Sıra geldi devremizi kurmaya. Yazılımda kurduklarımıza bakarsak şunları elde ederiz

  • Osilatör değeri – 20 MHZ
  • LED i bağlayacağımız çıkış pini – RB0
  • Butonu okuyacağımız giriş pini – RB7

Önceki yazılarda minimum devremizin nasıl kurulacağını görmüştük. Oradakileri aynen uygulayın ve yazlımda girdiğiniz saat hızına uygun osilatörü devreye kurun. LED i zaten 220 ohm luk bir direnç ile devreye dahil ettiğimizi söylemiştik. Sıra butonu nasıl ekleyeceğimize geldi.

Butona basılmıyorken iki ucu arası iletkenlik göstermez. Mantık olarak bir ucunu 5V a bir ucunu PIC e bağlıyoruz. Fakat bunu yaparsak iki sorun bizi bekliyor.

  1. Eğer butona basarsak aşırı akımdan dolayı PIC i yakmış oluruz.
  2. Butona basılmadığında giriş pini hiçbir elektriksel tarafa bağlı olmadığı için dalgalanmalara yol açacaktır. Bu da istemsiz olarak LED in yanıp sönmesine neden olacaktır.

Çözüm

  1. 5V ile buton arasına 220 ohm luk bir direnç koyarak bu sorunu halledebiliriz.
  2. Giriş pinini eksi (-) kutba direkt veya bir dirençle bağlı tutarak basılmadığında 0 durumunu okumasını sağlayabiliriz. Fakat buradaki önemli nokta dirençlerin voltaj bölücü olarak işlememesi. Voltaj bölücüleri sonraki bölümlerde göreceğiz. Örneğin 220 ohm koyarsak, bu durum düğmeye basıldığında PIC e giden sinyal voltajının 5V değil de 2.5V olması anlamına gelir ki bu PIC in dijital okuma değeri aralıklarında olmayacağından sinyal değerinde dalgalanmalara yol açar. Bu yüzden giriş pinini toprağa bağlayacağımız direnci ilk maddedeki dirence göre çok yüksek seçmek. 10Kohm (10000 ohm) değeri yeterli olacaktır.

02-Button02-Button_şema02-Button_bb

Devreye bakarsak da görebiliyoruz. Butona basılmadığı sürece pin toprağa bağlı. Basıldığında ise toprağa güçsüz 5V a güçlü bir şekilde bağlı. Böylece bu proje denenmeye hazır duruma geliyor. Programınızı derleyip PIC inize atmanız ve bu devreyi kurup gücü vermeniz yeterli.

SONUÇ

buton-marked2

Proje ile ilgili MPLAB, Fritzing ve Proteus dökümanlarına aşağıdaki linkten ulaşabilirsiniz.