ATMEL PROGRAMLAMA 4- İlk programımız - led yakmaca

    Atmel Studio'yu kurmayı ve yeni proje oluşturmayı bir önceki yazılarımda anlatmıştım. Şimdi yeni bir proje açıp mikrodenetleyici dünyasının ilk programı olan led yakmaca programımızı anlatalım. Programı anlatmaya başlamadan önce şunu belirtmek istiyorum ki burada programlar C programlama dili ile yazılmıştır. Programları tam anlamıyla öğrenebilmeniz için öncelikle belli bir seviyede C biliyor olmanız gerekmektedir. C ile program yazmayı bilmeyen arkadaşlarımızın öncelikle C programlama öğrenmelerini tavsiye ederim.



    Mikrodenetleyici ile program yazabilmek için sadece bir programlama dili bilmek yetmiyor. Aynı zamanda elektrik-elektronik bilgisine sahip olmak  ve kullanacağımız çevre birimler ile mikrodenetleyicinin kendi elektriksel özelliklerini bilmemiz gerekmektedir. Mikrodenetleyicinin özelliklerini datasheet'ine bakarak öğrenebiliriz. Program yazarken Atmega328p datasheet'ine fazlasıyla ihtiyacımız olacak. datasheet'i     buradan        indirebilirsiniz.

   İlk programımızda Atmega 328p'nin  B portunun 0. pinine (PB0)  bağlı bir Led'i yakmak istiyoruz. 

   Bunu yapabilmek için

1. adım :  Led'ler hakkında bilgi sahibi olmamız gerekiyor.

   Ledler çeşitli renklerde olabiliyor Kırmızı LED en az 1,5 - 1,6 volt ile çalışırken turuncu 1,7 volt, sarı 1,8 volt, yeşil 2,2 -2,4 volt , mavi ve beyaz ledler ise 3.3voltta ışık yaymaya başlar. Yaklaşık 2,5 ile 4 volttan yüksek gerilimler LED’lerde bozucu etki yapar. ledler 2-20 mA gibi çok az bir akımla çalışırlar . 

  Led'in elektriksel özelliklerini öğrendikten sonra şunu düşünmeliyiz. Bizim elimizdeki mikrodenetleyici bir led'i çalıştırabilecek elektriksel özelliklere sahip midir? yoksa ek donanımlar gerekmekte midir?  
   Bu sorunun cevapı Atmega328p'nin datasheet'inde saklı. Datasheet'i incelediğimizde sayfa 304'te table 29-1 Common DC characteristics  isimli bir tablo görürüz bu tablonun alt kısmındaki açıklamalarda yaklaşık her portun 5V besleme gerilimi için 20 mA civarı akım verebileceğini söylüyor.


   Bu akım mikrodenetleyicinin ledi çalıştırabilmesi için yeterli bir akım seviyesidir. Ancak port çıkışları besleme gerilimi  olan 5V seviyesindedir. 5V led'imiz için fazla bir gerilimdir. bu gerilimi led'e bağlayacağımız bir seri direnç ile led ve direnç üzerinde paylaştırmalıyız. şimdiki sorumuz bu seri direnç değeri ne olmalı?  

 Lede bağlanması gereken direncin değeri:

Rseri = (Besleme gerilimi - Led gerilimi)/Led akımı
Pratikte LED akımı  10mA  seçilebilir

buna göre 

Rseri = (5V- 2V)/10mA=300 ohm olur  ancak  piyasada ise 330 ohm direnç bulabliriz. 

buna göre led bağlantımızı şöyle yapabiliriz. 

   Yukardaki şekilde de görüldüğü gibi led'i iki şekilde denetleyicimizin portuna bağlayabiliriz.

 1. yöntemde led gerilimi ve akımı porttan çeker (SOURCE)
 2. bağlantıda ise akım ve gerilim ayrı bir kaynaktan verilir.  (SINK)
       genel olarak 1. yöntem kullanılır. 2. yöntemi de kullanabilirsiniz.

   1. bağlantıya baktığımız zaman led'in yanabilmesi için bağlı olduğu port pininin çıkışının 5V ( logic 1-HIGH )olması , Led'in söndürebilmek için ise pinin gerilim değerinin 0V ( logic 0 - LOW) yapmamız  yeterli olacaktır.  

   Bu şekilde bir led'i mikrodenetleyiciye nasıl bağlayacağımızı, nasıl yakıp söndürebileceğimizi donanımsal (elektriksel) olarak öğrenmiş  olduk.

   2. adım : Atmega 328p'nin elektriksel bağlantıları

          Yukarıdaki resimde Atmega 328p'nin pinleri ve pinlere ait özellikleri görülmektedir.
   Şekle göre PB0 pinine led bağlayıp yakabilmemiz için gerekli olan bağlantı şekli aşağıdaki gibidir.



  
  Bağlantıyı yaptığımız zaman donanımsal işlemlerimiz bitmiş oluyor. şimdi sıra işin yazılımsal kısmında.



   3. adım : Atmel Studio'da programımızı yazmak 

   Program yazmaya  Atmega328p'nin  konfigürasyon (Osilatör ve sigorta) ayarlarını  yaparak başlamamız gerekiyor. ancak ilk programımızda bu ayarlamalara girmeyeceğiz. Bu konuyu daha ilerki yazılarımızda  detaylı olarak ele alacağız. Şimdilik ATmega328p'nin (önceden hiç programlanmamış ) default ayarlarını kullanarak işlemimize devam edecğiz.

   Default olarak Atmega328p  8Mhz'lik dahili RC osilatör ve CKDIV8 sigortası aktif edilmiş haldedir. Yani Osilatörümüz 8MHz olacak ancak CKDIV8 nedeniyle 8Mhz/8=1Mhz olarak çalışacak. (Datasheet sayfa 27)
 
             



Reset pinimiz default olarak aktif edilmiş durumda. (Datasheet sayfa 288 )reset pinine herhangi bir bağlantı yapmamıza gerek yok. Reset konusunu da ayrıca detaylı olarak ilerki yazılarımızda inceleyeceğiz.

 
   

    Led'imizi PORTB'nin 0. bitine  (PB0 pini)  bağlayacağız. Portlar Mikrodenetleyicimizin dış dünya ile bağlantısını sağlarlar.  Mikrodenetleyici sistemleri portların kontrolü şeklinde çalışır. Yani Portlardan bilgi okunur, bu bilgi yazılmış olan programa göre yorumlanır, bir çıktı elde edilir ve bu çıktıya bağlı olarak istenilen portlar kontrol edilir.

   Her  Port için üç adet Register mevcuttur.

    1- DDRx = ( Data Direction Register ) Port Giriş/Çıkış yönlendirme işlemleri için kullanılır. Burada dikkat etmemiz gereken konu Portun hangi biti çıkış olacaksa "1", giriş olacaksa "0" yapılır. Pic kullananlar için tam ters bir işlem :(

         DDRB=0b00001111;   burada PORTB'nin ilk dörtbiti çıkış (1111) son dört biti giriş olarak ayarlanmıştır (0000). 



     2- PORTx = (Data Register) Port'a bilgi yazmak için kullanılır.

     3- PINx = (Port Input Pins) Port'tan bilgi okumak için kullanılır.


     Artık programımızı yazmaya başlayabiliriz.
 
Atmel Studio'da yeni proje oluşturduğumuz zaman karşımıza aşağıdaki  program şablonu hazır olarak geliyor.


Bu şablonda  "/*"  ile  başlayıp "*/" biten satırlar arasında programla ilgili bilgiler yazabiliriz. bu yazdıklarımız programımızla ilgili açıklamalardır.

*
 * ilk.c
 *
 * Created: 28.12.2015 13:10:51
 * Author : kermit
 */

#include <avr/io.h>    satırı avr ile ilgili giriş/çıkış header dosyasıdır. derleyiciye portlarla ilgili bilgileri verir.


 int main(void)
{
    /* Replace with your application code */
    while (1)
    {
    }
}



kısmı ana programımızı yazacağımız satırlardır.

Programımız şöyle olacak.


/*
 * ilk.c
 *
 * Created: 28.12.2015 13:10:51
 * Author : kermit
 */
 #include <avr/io.h>
int main(void)
{

   PORTB = 0b00000000 ;    // ilk an için PORTB nin tüm çıkışları sıfır yapılıyor.
   DDRB  =  0b11111111   ;  // PORTB tüm bitleri çıkış yapıldı

   
   PORTB= 0b00000001  ;    //  PB0=1 yapılarak led yakıldı.
    while (1)
    {

          ;
    }
}



  4. adım : Atmel Studio'da yazdığımız programı derlemek

Programı derlemek için Build menüsüne girip  Build Solution seçeneğini seçiyoruz.  Output ekranında 

   Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== 



iletisini görüyorsak başarılı olmuşuz  demektir.  

 

 


  5. adım : Devremizi Proteus_Isıs programında kurup çalıştırmak

      Şimdilik devrelerimizi  Proteus programında kurup çalıştıracağız.  İlerki aşamalarda Breadboard'a devre kuracağız. 

    Bu konumuz biraz uzun sürdü. Temel bazı kavramların anlaşılabilmesi için detaylı anlatmaya çalıştım .


Yorumlar

  1. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  2. bir yeri eksik okudugum için yorumu sildim pic basic'ten baya farklı saygılarımla

    YanıtlaSil
    Yanıtlar
    1. kolay gelsin :) pic basic ten farklı ben basic'i sevemedim. C daha derli toplu geliyor bana .

      Sil

Yorum Gönder